@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
package/utils/fee/transfer.js
CHANGED
|
@@ -9,9 +9,10 @@ import { createCardanoTransaction } from '@subwallet/extension-base/services/bal
|
|
|
9
9
|
import { gasSettingsForEWC, getERC20TransactionObject, getEVMTransactionObject } from '@subwallet/extension-base/services/balance-service/transfer/smart-contract';
|
|
10
10
|
import { createSubstrateExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/token';
|
|
11
11
|
import { createTonTransaction } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
|
|
12
|
-
import { createAcrossBridgeExtrinsic, createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, createXcmExtrinsicV2 } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
|
|
12
|
+
import { createAcrossBridgeExtrinsic, createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createBittensorToSubtensorEvmExtrinsic, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, createSubtensorEvmToBittensorExtrinsic, createXcmExtrinsicV2 } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
|
|
13
13
|
import { _isAcrossChainBridge, _isAcrossTestnetBridge, getAcrossSendingValue } from '@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge';
|
|
14
14
|
import { isAvailChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge';
|
|
15
|
+
import { _isBittensorToSubtensorBridge, _isSubtensorToBittensorBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge';
|
|
15
16
|
import { _isPolygonChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge';
|
|
16
17
|
import { _isPosChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/posBridge';
|
|
17
18
|
import { estimateXcmFee } from '@subwallet/extension-base/services/balance-service/transfer/xcm/utils';
|
|
@@ -82,6 +83,7 @@ export const calculateTransferMaxTransferable = async (id, request, freeBalance,
|
|
|
82
83
|
feeOption,
|
|
83
84
|
isTransferLocalTokenAndPayThatTokenAsFee,
|
|
84
85
|
isTransferNativeTokenAndPayLocalTokenAsFee,
|
|
86
|
+
metadata,
|
|
85
87
|
nativeToken,
|
|
86
88
|
srcChain,
|
|
87
89
|
srcToken,
|
|
@@ -184,7 +186,8 @@ export const calculateTransferMaxTransferable = async (id, request, freeBalance,
|
|
|
184
186
|
networkKey: srcChain.slug,
|
|
185
187
|
tokenInfo: srcToken,
|
|
186
188
|
to: recipient,
|
|
187
|
-
substrateApi
|
|
189
|
+
substrateApi,
|
|
190
|
+
metadata
|
|
188
191
|
});
|
|
189
192
|
}
|
|
190
193
|
if (feeChainType === 'evm') {
|
|
@@ -337,10 +340,12 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
337
340
|
srcChain,
|
|
338
341
|
srcToken,
|
|
339
342
|
substrateApi,
|
|
343
|
+
transferAll,
|
|
340
344
|
value
|
|
341
345
|
} = request;
|
|
342
346
|
const feeChainType = fee.type;
|
|
343
347
|
let estimatedFee = '0';
|
|
348
|
+
let crossChainFee = '0';
|
|
344
349
|
let feeOptions;
|
|
345
350
|
let maxTransferable;
|
|
346
351
|
let error;
|
|
@@ -350,7 +355,9 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
350
355
|
const isPolygonBridgeTransfer = _isPolygonChainBridge(srcChain.slug, destChain.slug);
|
|
351
356
|
const isPosBridgeTransfer = _isPosChainBridge(srcChain.slug, destChain.slug);
|
|
352
357
|
const isAcrossBridgeTransfer = _isAcrossChainBridge(srcChain.slug, destChain.slug);
|
|
353
|
-
const
|
|
358
|
+
const isBittensorBridgeTransfer = _isBittensorToSubtensorBridge(srcChain.slug, destChain.slug);
|
|
359
|
+
const isSubtensorEvmBridgeTransfer = _isSubtensorToBittensorBridge(srcChain.slug, destChain.slug);
|
|
360
|
+
const isSubstrateParaspellXcm = !(isAvailBridgeFromEvm || isAvailBridgeFromAvail || isSnowBridgeEvmTransfer || isPolygonBridgeTransfer || isPosBridgeTransfer || isAcrossBridgeTransfer || isBittensorBridgeTransfer || isSubtensorEvmBridgeTransfer);
|
|
354
361
|
const fakeAddress = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap'; // todo: move this
|
|
355
362
|
const substrateAddress = fakeAddress; // todo: move this
|
|
356
363
|
const evmAddress = u8aToHex(addressToEvm(fakeAddress)); // todo: move this
|
|
@@ -373,7 +380,8 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
373
380
|
evmApi,
|
|
374
381
|
feeCustom,
|
|
375
382
|
feeOption,
|
|
376
|
-
feeInfo: fee
|
|
383
|
+
feeInfo: fee,
|
|
384
|
+
transferAll
|
|
377
385
|
};
|
|
378
386
|
let funcCreateExtrinsic;
|
|
379
387
|
if (isPosBridgeTransfer || isPolygonBridgeTransfer) {
|
|
@@ -381,6 +389,10 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
381
389
|
} else if (isAcrossBridgeTransfer) {
|
|
382
390
|
funcCreateExtrinsic = createAcrossBridgeExtrinsic;
|
|
383
391
|
params.sendingValue = await getAcrossSendingValue(srcChain, srcToken, destChain, _isAcrossTestnetBridge(srcChain.slug));
|
|
392
|
+
} else if (isBittensorBridgeTransfer) {
|
|
393
|
+
funcCreateExtrinsic = createBittensorToSubtensorEvmExtrinsic;
|
|
394
|
+
} else if (isSubtensorEvmBridgeTransfer) {
|
|
395
|
+
funcCreateExtrinsic = createSubtensorEvmToBittensorExtrinsic;
|
|
384
396
|
} else if (isSnowBridgeEvmTransfer) {
|
|
385
397
|
funcCreateExtrinsic = createSnowBridgeExtrinsic;
|
|
386
398
|
} else if (isAvailBridgeFromEvm) {
|
|
@@ -412,7 +424,8 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
412
424
|
};
|
|
413
425
|
} else if (feeChainType === 'substrate') {
|
|
414
426
|
// Calculate fee for substrate transaction
|
|
415
|
-
if (
|
|
427
|
+
if (isSubstrateParaspellXcm) {
|
|
428
|
+
var _xcmFeeInfo$destinati;
|
|
416
429
|
const xcmFeeInfo = await estimateXcmFee({
|
|
417
430
|
fromChainInfo: params.originChain,
|
|
418
431
|
fromTokenInfo: params.originTokenInfo,
|
|
@@ -422,6 +435,7 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
422
435
|
value: params.sendingValue
|
|
423
436
|
});
|
|
424
437
|
estimatedFee = (xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : xcmFeeInfo.origin.fee) || '0';
|
|
438
|
+
crossChainFee = (xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : (_xcmFeeInfo$destinati = xcmFeeInfo.destination) === null || _xcmFeeInfo$destinati === void 0 ? void 0 : _xcmFeeInfo$destinati.fee) || '0';
|
|
425
439
|
} else {
|
|
426
440
|
try {
|
|
427
441
|
var _paymentInfo$partialF2;
|
|
@@ -436,7 +450,8 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
|
|
|
436
450
|
estimatedFee = new BigN(estimatedFee).plus(tip).toFixed(0);
|
|
437
451
|
feeOptions = {
|
|
438
452
|
...fee,
|
|
439
|
-
estimatedFee
|
|
453
|
+
estimatedFee,
|
|
454
|
+
crossChainFee
|
|
440
455
|
};
|
|
441
456
|
} else if (feeChainType === 'bitcoin') {
|
|
442
457
|
feeOptions = {
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports._getChainflipEarlyValidationError = _getChainflipEarlyValidationError;
|
|
8
|
-
exports._getEarlyAssetHubValidationError = _getEarlyAssetHubValidationError;
|
|
9
|
-
exports._getEarlyHydradxValidationError = _getEarlyHydradxValidationError;
|
|
10
|
-
exports._getSimpleSwapEarlyValidationError = _getSimpleSwapEarlyValidationError;
|
|
11
|
-
exports._validateBalanceToSwap = _validateBalanceToSwap;
|
|
12
|
-
exports._validateBalanceToSwapOnAssetHub = _validateBalanceToSwapOnAssetHub;
|
|
13
|
-
exports._validateBalanceToSwapV2 = _validateBalanceToSwapV2;
|
|
14
|
-
exports._validateQuoteV2 = _validateQuoteV2;
|
|
15
|
-
exports._validateSwapRecipient = _validateSwapRecipient;
|
|
16
|
-
exports._validateSwapRecipientV2 = _validateSwapRecipientV2;
|
|
17
|
-
var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
|
|
18
|
-
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
19
|
-
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
20
|
-
var _types = require("@subwallet/extension-base/types");
|
|
21
|
-
var _swap = require("@subwallet/extension-base/types/swap");
|
|
22
|
-
var _utils2 = require("@subwallet/extension-base/utils");
|
|
23
|
-
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
24
|
-
var _utilCrypto = require("@polkadot/util-crypto");
|
|
25
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
26
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
27
|
-
|
|
28
|
-
function _validateBalanceToSwapOnAssetHub(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
|
|
29
|
-
const bnFromTokenBalance = new _bignumber.default(fromTokenBalance);
|
|
30
|
-
if (!(0, _utils._isNativeToken)(fromToken) && bnFromTokenBalance.minus(swapAmount).lt((0, _utils._getTokenMinAmount)(fromToken))) {
|
|
31
|
-
const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(bnFromTokenBalance.minus((0, _utils._getTokenMinAmount)(fromToken)), (0, _utils._getAssetDecimals)(fromToken));
|
|
32
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
33
|
-
}
|
|
34
|
-
if (new _bignumber.default(feeTokenBalance).lte(feeAmount)) {
|
|
35
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
|
|
36
|
-
}
|
|
37
|
-
if (!(0, _utils._isNativeToken)(fromToken) && fromToken.slug === feeToken.slug) {
|
|
38
|
-
// todo: need review and refactor
|
|
39
|
-
if (bnFromTokenBalance.lte(new _bignumber.default(feeAmount).plus(swapAmount))) {
|
|
40
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (isXcmOk) {
|
|
44
|
-
// assume that the swap is valid if XCM is in the process and it was successful
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|
|
47
|
-
if (minSwap) {
|
|
48
|
-
if (bnFromTokenBalance.lte(minSwap)) {
|
|
49
|
-
const parsedMinSwapValue = (0, _utils2.formatNumber)(minSwap, (0, _utils._getAssetDecimals)(fromToken));
|
|
50
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (new _bignumber.default(swapAmount).gte(fromTokenBalance)) {
|
|
54
|
-
const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(fromTokenBalance, (0, _utils._getAssetDecimals)(fromToken));
|
|
55
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
56
|
-
}
|
|
57
|
-
return undefined;
|
|
58
|
-
}
|
|
59
|
-
function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
|
|
60
|
-
const bnFromTokenBalance = new _bignumber.default(fromTokenBalance);
|
|
61
|
-
if (new _bignumber.default(feeTokenBalance).lte(feeAmount)) {
|
|
62
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
|
|
63
|
-
}
|
|
64
|
-
if (fromToken.slug === feeToken.slug) {
|
|
65
|
-
// todo: need review and refactor
|
|
66
|
-
if (bnFromTokenBalance.lte(new _bignumber.default(feeAmount).plus(swapAmount))) {
|
|
67
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (isXcmOk) {
|
|
71
|
-
// assume that the swap is valid if XCM is in the process and it was successful
|
|
72
|
-
return undefined;
|
|
73
|
-
}
|
|
74
|
-
if (minSwap) {
|
|
75
|
-
if (bnFromTokenBalance.lte(minSwap)) {
|
|
76
|
-
const parsedMinSwapValue = (0, _utils2.formatNumber)(minSwap, (0, _utils._getAssetDecimals)(fromToken));
|
|
77
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (new _bignumber.default(swapAmount).gte(fromTokenBalance)) {
|
|
81
|
-
const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(fromTokenBalance, (0, _utils._getAssetDecimals)(fromToken));
|
|
82
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
83
|
-
}
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
function _validateSwapRecipient(destChainInfo, recipient) {
|
|
87
|
-
const isEvmAddress = (0, _utilCrypto.isEthereumAddress)(recipient);
|
|
88
|
-
const isEvmDestChain = (0, _utils._isChainEvmCompatible)(destChainInfo);
|
|
89
|
-
if (isEvmAddress && !isEvmDestChain || !isEvmAddress && isEvmDestChain) {
|
|
90
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.INVALID_RECIPIENT);
|
|
91
|
-
}
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
function _getChainflipEarlyValidationError(error, metadata) {
|
|
95
|
-
// todo: support more providers
|
|
96
|
-
switch (error) {
|
|
97
|
-
case _swap.SwapErrorType.NOT_MEET_MIN_SWAP:
|
|
98
|
-
{
|
|
99
|
-
const parsedMinSwapValue = (0, _utils2.formatNumber)(metadata.minSwap.value, metadata.minSwap.decimals);
|
|
100
|
-
const message = `Amount too low. Increase your amount above ${parsedMinSwapValue} ${metadata.minSwap.symbol} and try again`;
|
|
101
|
-
return new _SwapError.SwapError(error, message);
|
|
102
|
-
}
|
|
103
|
-
case _swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE:
|
|
104
|
-
{
|
|
105
|
-
if (metadata.maxSwap) {
|
|
106
|
-
const parsedMaxSwapValue = (0, _utils2.formatNumber)(metadata.maxSwap.value, metadata.maxSwap.decimals);
|
|
107
|
-
return new _SwapError.SwapError(error, `Amount too high. Lower your amount below ${parsedMaxSwapValue} ${metadata.maxSwap.symbol} and try again`);
|
|
108
|
-
} else {
|
|
109
|
-
return new _SwapError.SwapError(error, 'Amount too high. Lower your amount and try again');
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
case _swap.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
113
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
114
|
-
case _swap.SwapErrorType.UNKNOWN:
|
|
115
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
116
|
-
case _swap.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
117
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
118
|
-
default:
|
|
119
|
-
return new _SwapError.SwapError(error);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
function _getEarlyHydradxValidationError(error, metadata) {
|
|
123
|
-
switch (error) {
|
|
124
|
-
case _swap.SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
|
|
125
|
-
{
|
|
126
|
-
return new _SwapError.SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
|
|
127
|
-
}
|
|
128
|
-
case _swap.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
129
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
130
|
-
case _swap.SwapErrorType.UNKNOWN:
|
|
131
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
132
|
-
case _swap.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
133
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
134
|
-
default:
|
|
135
|
-
return new _SwapError.SwapError(error);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
function _getEarlyAssetHubValidationError(error, metadata) {
|
|
139
|
-
switch (error) {
|
|
140
|
-
case _swap.SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
|
|
141
|
-
return new _SwapError.SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
|
|
142
|
-
case _swap.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
143
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
144
|
-
case _swap.SwapErrorType.UNKNOWN:
|
|
145
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
146
|
-
case _swap.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
147
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
148
|
-
case _swap.SwapErrorType.MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT:
|
|
149
|
-
return new _SwapError.SwapError(error, 'You swap too much. It make pool not enough existential deposit');
|
|
150
|
-
// TODO: i18n this
|
|
151
|
-
default:
|
|
152
|
-
return new _SwapError.SwapError(error);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
function _getSimpleSwapEarlyValidationError(error, metadata) {
|
|
156
|
-
// todo: support more providers
|
|
157
|
-
switch (error) {
|
|
158
|
-
case _swap.SwapErrorType.NOT_MEET_MIN_SWAP:
|
|
159
|
-
{
|
|
160
|
-
const message = `Amount too low. Increase your amount above ${metadata.minSwap.value} ${metadata.minSwap.symbol} and try again`;
|
|
161
|
-
return new _SwapError.SwapError(error, message);
|
|
162
|
-
}
|
|
163
|
-
case _swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE:
|
|
164
|
-
{
|
|
165
|
-
if (metadata.maxSwap) {
|
|
166
|
-
return new _SwapError.SwapError(error, `Amount too high. Lower your amount below ${metadata.maxSwap.value} ${metadata.maxSwap.symbol} and try again`);
|
|
167
|
-
} else {
|
|
168
|
-
return new _SwapError.SwapError(error, 'Amount too high. Lower your amount and try again');
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
case _swap.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
172
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
173
|
-
case _swap.SwapErrorType.UNKNOWN:
|
|
174
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
175
|
-
case _swap.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
176
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
177
|
-
default:
|
|
178
|
-
return new _SwapError.SwapError(error);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
function _validateQuoteV2(selectedQuote) {
|
|
182
|
-
if (!selectedQuote) {
|
|
183
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Check swapQuote alive
|
|
187
|
-
if (selectedQuote.aliveUntil <= +Date.now()) {
|
|
188
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.QUOTE_TIMEOUT);
|
|
189
|
-
}
|
|
190
|
-
return undefined;
|
|
191
|
-
}
|
|
192
|
-
function _validateBalanceToSwapV2(request) {
|
|
193
|
-
const {
|
|
194
|
-
chainInfo,
|
|
195
|
-
feeAmount,
|
|
196
|
-
feeToken,
|
|
197
|
-
feeTokenBalance,
|
|
198
|
-
fromToken,
|
|
199
|
-
fromTokenBalance,
|
|
200
|
-
minSwapAmount,
|
|
201
|
-
swapAmount
|
|
202
|
-
} = request;
|
|
203
|
-
const bnFromTokenBalance = (0, _bignumber.default)(fromTokenBalance);
|
|
204
|
-
if (new _bignumber.default(feeTokenBalance).lte(feeAmount)) {
|
|
205
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${chainInfo.name}) to pay transaction fee`);
|
|
206
|
-
}
|
|
207
|
-
if (fromToken.slug === feeToken.slug) {
|
|
208
|
-
// todo: need review and refactor
|
|
209
|
-
if (bnFromTokenBalance.lte((0, _bignumber.default)(feeAmount).plus(swapAmount))) {
|
|
210
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
211
|
-
}
|
|
212
|
-
} else {
|
|
213
|
-
if (bnFromTokenBalance.lt(swapAmount)) {
|
|
214
|
-
return new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
if (minSwapAmount) {
|
|
218
|
-
if (bnFromTokenBalance.lte(minSwapAmount)) {
|
|
219
|
-
const parsedMinSwapValue = (0, _utils2.formatNumber)(minSwapAmount, (0, _utils._getAssetDecimals)(fromToken));
|
|
220
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
return undefined;
|
|
224
|
-
}
|
|
225
|
-
function _validateSwapRecipientV2(destChainInfo, recipient) {
|
|
226
|
-
if (!recipient) {
|
|
227
|
-
return undefined;
|
|
228
|
-
}
|
|
229
|
-
const isEvmAddress = (0, _utilCrypto.isEthereumAddress)(recipient);
|
|
230
|
-
const isEvmDestChain = (0, _utils._isChainEvmCompatible)(destChainInfo);
|
|
231
|
-
if (isEvmAddress && !isEvmDestChain || !isEvmAddress && isEvmDestChain) {
|
|
232
|
-
return new _TransactionError.TransactionError(_swap.SwapErrorType.INVALID_RECIPIENT);
|
|
233
|
-
}
|
|
234
|
-
return undefined;
|
|
235
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { _ChainAsset, _ChainInfo } from '@subwallet/chain-list/types';
|
|
2
|
-
import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
|
|
3
|
-
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
4
|
-
import { SwapQuote } from '@subwallet/extension-base/types';
|
|
5
|
-
import { AssetHubPreValidationMetadata, ChainflipPreValidationMetadata, HydradxPreValidationMetadata, SimpleSwapValidationMetadata, SwapErrorType } from '@subwallet/extension-base/types/swap';
|
|
6
|
-
interface RequestValidateSwap {
|
|
7
|
-
chainInfo: _ChainInfo;
|
|
8
|
-
fromToken: _ChainAsset;
|
|
9
|
-
fromTokenBalance: string;
|
|
10
|
-
feeToken: _ChainAsset;
|
|
11
|
-
feeTokenBalance: string;
|
|
12
|
-
feeAmount: string;
|
|
13
|
-
swapAmount: string;
|
|
14
|
-
minSwapAmount?: string;
|
|
15
|
-
}
|
|
16
|
-
export declare function _validateBalanceToSwapOnAssetHub(fromToken: _ChainAsset, feeToken: _ChainAsset, feeTokenChainInfo: _ChainInfo, feeAmount: string, fromTokenBalance: string, feeTokenBalance: string, swapAmount: string, isXcmOk: boolean, minSwap?: string): TransactionError | undefined;
|
|
17
|
-
export declare function _validateBalanceToSwap(fromToken: _ChainAsset, feeToken: _ChainAsset, feeTokenChainInfo: _ChainInfo, feeAmount: string, fromTokenBalance: string, feeTokenBalance: string, swapAmount: string, isXcmOk: boolean, minSwap?: string): TransactionError | undefined;
|
|
18
|
-
export declare function _validateSwapRecipient(destChainInfo: _ChainInfo, recipient: string): TransactionError | undefined;
|
|
19
|
-
export declare function _getChainflipEarlyValidationError(error: SwapErrorType, metadata: ChainflipPreValidationMetadata): SwapError;
|
|
20
|
-
export declare function _getEarlyHydradxValidationError(error: SwapErrorType, metadata: HydradxPreValidationMetadata): SwapError;
|
|
21
|
-
export declare function _getEarlyAssetHubValidationError(error: SwapErrorType, metadata: AssetHubPreValidationMetadata): SwapError;
|
|
22
|
-
export declare function _getSimpleSwapEarlyValidationError(error: SwapErrorType, metadata: SimpleSwapValidationMetadata): SwapError;
|
|
23
|
-
export declare function _validateQuoteV2(selectedQuote: SwapQuote): TransactionError | undefined;
|
|
24
|
-
export declare function _validateBalanceToSwapV2(request: RequestValidateSwap): TransactionError | undefined;
|
|
25
|
-
export declare function _validateSwapRecipientV2(destChainInfo: _ChainInfo, recipient: string | undefined): TransactionError | undefined;
|
|
26
|
-
export {};
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
|
-
import { SwapError } from '@subwallet/extension-base/background/errors/SwapError';
|
|
5
|
-
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
6
|
-
import { _getAssetDecimals, _getTokenMinAmount, _isChainEvmCompatible, _isNativeToken } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
|
-
import { BasicTxErrorType } from '@subwallet/extension-base/types';
|
|
8
|
-
import { SwapErrorType } from '@subwallet/extension-base/types/swap';
|
|
9
|
-
import { formatNumber } from '@subwallet/extension-base/utils';
|
|
10
|
-
import BigN from 'bignumber.js';
|
|
11
|
-
import { isEthereumAddress } from '@polkadot/util-crypto';
|
|
12
|
-
export function _validateBalanceToSwapOnAssetHub(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
|
|
13
|
-
const bnFromTokenBalance = new BigN(fromTokenBalance);
|
|
14
|
-
if (!_isNativeToken(fromToken) && bnFromTokenBalance.minus(swapAmount).lt(_getTokenMinAmount(fromToken))) {
|
|
15
|
-
const parsedMaxBalanceSwap = formatNumber(bnFromTokenBalance.minus(_getTokenMinAmount(fromToken)), _getAssetDecimals(fromToken));
|
|
16
|
-
return new TransactionError(SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
17
|
-
}
|
|
18
|
-
if (new BigN(feeTokenBalance).lte(feeAmount)) {
|
|
19
|
-
return new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
|
|
20
|
-
}
|
|
21
|
-
if (!_isNativeToken(fromToken) && fromToken.slug === feeToken.slug) {
|
|
22
|
-
// todo: need review and refactor
|
|
23
|
-
if (bnFromTokenBalance.lte(new BigN(feeAmount).plus(swapAmount))) {
|
|
24
|
-
return new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if (isXcmOk) {
|
|
28
|
-
// assume that the swap is valid if XCM is in the process and it was successful
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
if (minSwap) {
|
|
32
|
-
if (bnFromTokenBalance.lte(minSwap)) {
|
|
33
|
-
const parsedMinSwapValue = formatNumber(minSwap, _getAssetDecimals(fromToken));
|
|
34
|
-
return new TransactionError(SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (new BigN(swapAmount).gte(fromTokenBalance)) {
|
|
38
|
-
const parsedMaxBalanceSwap = formatNumber(fromTokenBalance, _getAssetDecimals(fromToken));
|
|
39
|
-
return new TransactionError(SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
40
|
-
}
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
export function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
|
|
44
|
-
const bnFromTokenBalance = new BigN(fromTokenBalance);
|
|
45
|
-
if (new BigN(feeTokenBalance).lte(feeAmount)) {
|
|
46
|
-
return new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
|
|
47
|
-
}
|
|
48
|
-
if (fromToken.slug === feeToken.slug) {
|
|
49
|
-
// todo: need review and refactor
|
|
50
|
-
if (bnFromTokenBalance.lte(new BigN(feeAmount).plus(swapAmount))) {
|
|
51
|
-
return new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (isXcmOk) {
|
|
55
|
-
// assume that the swap is valid if XCM is in the process and it was successful
|
|
56
|
-
return undefined;
|
|
57
|
-
}
|
|
58
|
-
if (minSwap) {
|
|
59
|
-
if (bnFromTokenBalance.lte(minSwap)) {
|
|
60
|
-
const parsedMinSwapValue = formatNumber(minSwap, _getAssetDecimals(fromToken));
|
|
61
|
-
return new TransactionError(SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (new BigN(swapAmount).gte(fromTokenBalance)) {
|
|
65
|
-
const parsedMaxBalanceSwap = formatNumber(fromTokenBalance, _getAssetDecimals(fromToken));
|
|
66
|
-
return new TransactionError(SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
|
|
67
|
-
}
|
|
68
|
-
return undefined;
|
|
69
|
-
}
|
|
70
|
-
export function _validateSwapRecipient(destChainInfo, recipient) {
|
|
71
|
-
const isEvmAddress = isEthereumAddress(recipient);
|
|
72
|
-
const isEvmDestChain = _isChainEvmCompatible(destChainInfo);
|
|
73
|
-
if (isEvmAddress && !isEvmDestChain || !isEvmAddress && isEvmDestChain) {
|
|
74
|
-
return new TransactionError(SwapErrorType.INVALID_RECIPIENT);
|
|
75
|
-
}
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
export function _getChainflipEarlyValidationError(error, metadata) {
|
|
79
|
-
// todo: support more providers
|
|
80
|
-
switch (error) {
|
|
81
|
-
case SwapErrorType.NOT_MEET_MIN_SWAP:
|
|
82
|
-
{
|
|
83
|
-
const parsedMinSwapValue = formatNumber(metadata.minSwap.value, metadata.minSwap.decimals);
|
|
84
|
-
const message = `Amount too low. Increase your amount above ${parsedMinSwapValue} ${metadata.minSwap.symbol} and try again`;
|
|
85
|
-
return new SwapError(error, message);
|
|
86
|
-
}
|
|
87
|
-
case SwapErrorType.SWAP_EXCEED_ALLOWANCE:
|
|
88
|
-
{
|
|
89
|
-
if (metadata.maxSwap) {
|
|
90
|
-
const parsedMaxSwapValue = formatNumber(metadata.maxSwap.value, metadata.maxSwap.decimals);
|
|
91
|
-
return new SwapError(error, `Amount too high. Lower your amount below ${parsedMaxSwapValue} ${metadata.maxSwap.symbol} and try again`);
|
|
92
|
-
} else {
|
|
93
|
-
return new SwapError(error, 'Amount too high. Lower your amount and try again');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
case SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
97
|
-
return new SwapError(error, 'This swap pair is not supported');
|
|
98
|
-
case SwapErrorType.UNKNOWN:
|
|
99
|
-
return new SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
100
|
-
case SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
101
|
-
return new SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
102
|
-
default:
|
|
103
|
-
return new SwapError(error);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
export function _getEarlyHydradxValidationError(error, metadata) {
|
|
107
|
-
switch (error) {
|
|
108
|
-
case SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
|
|
109
|
-
{
|
|
110
|
-
return new SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
|
|
111
|
-
}
|
|
112
|
-
case SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
113
|
-
return new SwapError(error, 'This swap pair is not supported');
|
|
114
|
-
case SwapErrorType.UNKNOWN:
|
|
115
|
-
return new SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
116
|
-
case SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
117
|
-
return new SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
118
|
-
default:
|
|
119
|
-
return new SwapError(error);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
export function _getEarlyAssetHubValidationError(error, metadata) {
|
|
123
|
-
switch (error) {
|
|
124
|
-
case SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
|
|
125
|
-
return new SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
|
|
126
|
-
case SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
127
|
-
return new SwapError(error, 'This swap pair is not supported');
|
|
128
|
-
case SwapErrorType.UNKNOWN:
|
|
129
|
-
return new SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
130
|
-
case SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
131
|
-
return new SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
132
|
-
case SwapErrorType.MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT:
|
|
133
|
-
return new SwapError(error, 'You swap too much. It make pool not enough existential deposit');
|
|
134
|
-
// TODO: i18n this
|
|
135
|
-
default:
|
|
136
|
-
return new SwapError(error);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
export function _getSimpleSwapEarlyValidationError(error, metadata) {
|
|
140
|
-
// todo: support more providers
|
|
141
|
-
switch (error) {
|
|
142
|
-
case SwapErrorType.NOT_MEET_MIN_SWAP:
|
|
143
|
-
{
|
|
144
|
-
const message = `Amount too low. Increase your amount above ${metadata.minSwap.value} ${metadata.minSwap.symbol} and try again`;
|
|
145
|
-
return new SwapError(error, message);
|
|
146
|
-
}
|
|
147
|
-
case SwapErrorType.SWAP_EXCEED_ALLOWANCE:
|
|
148
|
-
{
|
|
149
|
-
if (metadata.maxSwap) {
|
|
150
|
-
return new SwapError(error, `Amount too high. Lower your amount below ${metadata.maxSwap.value} ${metadata.maxSwap.symbol} and try again`);
|
|
151
|
-
} else {
|
|
152
|
-
return new SwapError(error, 'Amount too high. Lower your amount and try again');
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
case SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
156
|
-
return new SwapError(error, 'This swap pair is not supported');
|
|
157
|
-
case SwapErrorType.UNKNOWN:
|
|
158
|
-
return new SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
159
|
-
case SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
160
|
-
return new SwapError(error, 'No swap quote found. Change your network endpoint or adjust amount and try again');
|
|
161
|
-
default:
|
|
162
|
-
return new SwapError(error);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
export function _validateQuoteV2(selectedQuote) {
|
|
166
|
-
if (!selectedQuote) {
|
|
167
|
-
return new TransactionError(BasicTxErrorType.INTERNAL_ERROR);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Check swapQuote alive
|
|
171
|
-
if (selectedQuote.aliveUntil <= +Date.now()) {
|
|
172
|
-
return new TransactionError(SwapErrorType.QUOTE_TIMEOUT);
|
|
173
|
-
}
|
|
174
|
-
return undefined;
|
|
175
|
-
}
|
|
176
|
-
export function _validateBalanceToSwapV2(request) {
|
|
177
|
-
const {
|
|
178
|
-
chainInfo,
|
|
179
|
-
feeAmount,
|
|
180
|
-
feeToken,
|
|
181
|
-
feeTokenBalance,
|
|
182
|
-
fromToken,
|
|
183
|
-
fromTokenBalance,
|
|
184
|
-
minSwapAmount,
|
|
185
|
-
swapAmount
|
|
186
|
-
} = request;
|
|
187
|
-
const bnFromTokenBalance = BigN(fromTokenBalance);
|
|
188
|
-
if (new BigN(feeTokenBalance).lte(feeAmount)) {
|
|
189
|
-
return new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${chainInfo.name}) to pay transaction fee`);
|
|
190
|
-
}
|
|
191
|
-
if (fromToken.slug === feeToken.slug) {
|
|
192
|
-
// todo: need review and refactor
|
|
193
|
-
if (bnFromTokenBalance.lte(BigN(feeAmount).plus(swapAmount))) {
|
|
194
|
-
return new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
195
|
-
}
|
|
196
|
-
} else {
|
|
197
|
-
if (bnFromTokenBalance.lt(swapAmount)) {
|
|
198
|
-
return new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (minSwapAmount) {
|
|
202
|
-
if (bnFromTokenBalance.lte(minSwapAmount)) {
|
|
203
|
-
const parsedMinSwapValue = formatNumber(minSwapAmount, _getAssetDecimals(fromToken));
|
|
204
|
-
return new TransactionError(SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return undefined;
|
|
208
|
-
}
|
|
209
|
-
export function _validateSwapRecipientV2(destChainInfo, recipient) {
|
|
210
|
-
if (!recipient) {
|
|
211
|
-
return undefined;
|
|
212
|
-
}
|
|
213
|
-
const isEvmAddress = isEthereumAddress(recipient);
|
|
214
|
-
const isEvmDestChain = _isChainEvmCompatible(destChainInfo);
|
|
215
|
-
if (isEvmAddress && !isEvmDestChain || !isEvmAddress && isEvmDestChain) {
|
|
216
|
-
return new TransactionError(SwapErrorType.INVALID_RECIPIENT);
|
|
217
|
-
}
|
|
218
|
-
return undefined;
|
|
219
|
-
}
|