@subwallet/extension-base 1.2.3-0 → 1.2.3-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 +4 -0
- package/cjs/core/logic-validation/earning.js +47 -0
- package/cjs/core/logic-validation/swap.js +99 -0
- package/cjs/core/logic-validation/transfer.js +219 -0
- package/cjs/core/substrate/nominationpools-pallet.js +12 -0
- package/cjs/core/substrate/system-pallet.js +78 -0
- package/cjs/koni/api/dotsama/transfer.js +49 -4
- package/cjs/koni/api/staking/bonding/utils.js +1 -1
- package/cjs/koni/api/xcm/index.js +30 -2
- package/cjs/koni/background/handlers/Extension.js +135 -245
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/group.js +4 -27
- package/cjs/services/balance-service/helpers/subscribe/index.js +2 -30
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +41 -80
- package/cjs/services/balance-service/index.js +11 -9
- package/cjs/services/chain-service/index.js +0 -1
- package/cjs/services/chain-service/utils/index.js +6 -0
- package/cjs/services/earning-service/handlers/base.js +1 -1
- package/cjs/services/earning-service/handlers/special.js +11 -12
- package/cjs/services/swap-service/handler/base-handler.js +28 -44
- package/cjs/services/swap-service/handler/chainflip-handler.js +23 -21
- package/cjs/services/swap-service/handler/hydradx-handler.js +40 -38
- package/cjs/services/swap-service/index.js +6 -0
- package/cjs/services/swap-service/utils.js +8 -49
- package/cjs/services/transaction-service/index.js +66 -155
- package/core/logic-validation/earning.d.ts +10 -0
- package/core/logic-validation/earning.js +37 -0
- package/core/logic-validation/swap.d.ts +8 -0
- package/core/logic-validation/swap.js +89 -0
- package/core/logic-validation/transfer.d.ts +16 -0
- package/core/logic-validation/transfer.js +206 -0
- package/core/substrate/nominationpools-pallet.d.ts +7 -0
- package/core/substrate/nominationpools-pallet.js +6 -0
- package/core/substrate/system-pallet.d.ts +27 -0
- package/core/substrate/system-pallet.js +71 -0
- package/koni/api/dotsama/transfer.d.ts +3 -1
- package/koni/api/dotsama/transfer.js +44 -1
- package/koni/api/staking/bonding/relayChain.d.ts +2 -1
- package/koni/api/staking/bonding/utils.js +1 -1
- package/koni/api/xcm/index.d.ts +2 -0
- package/koni/api/xcm/index.js +27 -1
- package/koni/background/handlers/Extension.d.ts +5 -5
- package/koni/background/handlers/Extension.js +111 -221
- package/package.json +34 -9
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/group.js +4 -27
- package/services/balance-service/helpers/subscribe/index.d.ts +2 -1
- package/services/balance-service/helpers/subscribe/index.js +2 -30
- package/services/balance-service/helpers/subscribe/substrate/index.d.ts +2 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +26 -64
- package/services/balance-service/index.d.ts +7 -6
- package/services/balance-service/index.js +12 -10
- package/services/chain-service/index.js +0 -1
- package/services/chain-service/utils/index.d.ts +1 -0
- package/services/chain-service/utils/index.js +4 -0
- package/services/earning-service/handlers/base.js +1 -1
- package/services/earning-service/handlers/nomination-pool/index.d.ts +2 -1
- package/services/earning-service/handlers/special.js +11 -12
- package/services/swap-service/handler/base-handler.d.ts +3 -2
- package/services/swap-service/handler/base-handler.js +26 -42
- package/services/swap-service/handler/chainflip-handler.d.ts +2 -1
- package/services/swap-service/handler/chainflip-handler.js +4 -2
- package/services/swap-service/handler/hydradx-handler.d.ts +2 -1
- package/services/swap-service/handler/hydradx-handler.js +7 -5
- package/services/swap-service/index.js +7 -1
- package/services/swap-service/utils.d.ts +2 -4
- package/services/swap-service/utils.js +7 -47
- package/services/transaction-service/index.d.ts +1 -1
- package/services/transaction-service/index.js +30 -119
- package/services/transaction-service/types.d.ts +1 -0
- package/types/balance/index.d.ts +6 -10
- package/types/yield/info/pallet.d.ts +0 -6
|
@@ -4,18 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.SWAP_QUOTE_TIMEOUT_MAP = exports.MOCK_SWAP_FEE = exports.DEFAULT_SWAP_FIRST_STEP = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = exports.CHAIN_FLIP_MAINNET_EXPLORER = void 0;
|
|
7
|
+
exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = exports.SWAP_QUOTE_TIMEOUT_MAP = exports.MOCK_SWAP_FEE = exports.DEFAULT_SWAP_FIRST_STEP = exports.CHAIN_FLIP_TESTNET_EXPLORER = exports.CHAIN_FLIP_SUPPORTED_TESTNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_TESTNET_ASSET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_MAPPING = exports.CHAIN_FLIP_SUPPORTED_MAINNET_ASSET_MAPPING = exports.CHAIN_FLIP_MAINNET_EXPLORER = void 0;
|
|
8
8
|
exports.calculateSwapRate = calculateSwapRate;
|
|
9
|
-
exports.getChainflipEarlyValidationError = getChainflipEarlyValidationError;
|
|
10
|
-
exports.getEarlyHydradxValidationError = getEarlyHydradxValidationError;
|
|
11
9
|
exports.getSwapAltToken = getSwapAltToken;
|
|
12
10
|
exports.getSwapAlternativeAsset = getSwapAlternativeAsset;
|
|
13
11
|
var _swap = require("@chainflip/sdk/swap");
|
|
14
12
|
var _chainList = require("@subwallet/chain-list");
|
|
15
|
-
var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
|
|
16
13
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
17
14
|
var _swap2 = require("@subwallet/extension-base/types/swap");
|
|
18
|
-
var _utils2 = require("@subwallet/extension-base/utils");
|
|
19
15
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
20
16
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
21
17
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -65,6 +61,13 @@ const MOCK_SWAP_FEE = {
|
|
|
65
61
|
feeOptions: []
|
|
66
62
|
};
|
|
67
63
|
exports.MOCK_SWAP_FEE = MOCK_SWAP_FEE;
|
|
64
|
+
const _PROVIDER_TO_SUPPORTED_PAIR_MAP = {
|
|
65
|
+
[_swap2.SwapProviderId.HYDRADX_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX],
|
|
66
|
+
[_swap2.SwapProviderId.HYDRADX_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.HYDRADX_TESTNET],
|
|
67
|
+
[_swap2.SwapProviderId.CHAIN_FLIP_MAINNET]: [_chainList.COMMON_CHAIN_SLUGS.POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM],
|
|
68
|
+
[_swap2.SwapProviderId.CHAIN_FLIP_TESTNET]: [_chainList.COMMON_CHAIN_SLUGS.CHAINFLIP_POLKADOT, _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA]
|
|
69
|
+
};
|
|
70
|
+
exports._PROVIDER_TO_SUPPORTED_PAIR_MAP = _PROVIDER_TO_SUPPORTED_PAIR_MAP;
|
|
68
71
|
function getSwapAlternativeAsset(swapPair) {
|
|
69
72
|
var _swapPair$metadata;
|
|
70
73
|
return swapPair === null || swapPair === void 0 ? void 0 : (_swapPair$metadata = swapPair.metadata) === null || _swapPair$metadata === void 0 ? void 0 : _swapPair$metadata.alternativeAsset;
|
|
@@ -79,48 +82,4 @@ function calculateSwapRate(fromAmount, toAmount, fromAsset, toAsset) {
|
|
|
79
82
|
const decimalDiff = (0, _utils._getAssetDecimals)(toAsset) - (0, _utils._getAssetDecimals)(fromAsset);
|
|
80
83
|
const bnRate = bnFromAmount.div(bnToAmount);
|
|
81
84
|
return 1 / bnRate.times(10 ** decimalDiff).toNumber();
|
|
82
|
-
}
|
|
83
|
-
function getChainflipEarlyValidationError(error, metadata) {
|
|
84
|
-
// todo: support more providers
|
|
85
|
-
switch (error) {
|
|
86
|
-
case _swap2.SwapErrorType.NOT_MEET_MIN_SWAP:
|
|
87
|
-
{
|
|
88
|
-
const parsedMinSwapValue = (0, _utils2.formatNumber)(metadata.minSwap.value, metadata.minSwap.decimals);
|
|
89
|
-
const message = `Amount too low. Increase your amount above ${parsedMinSwapValue} ${metadata.minSwap.symbol} and try again`;
|
|
90
|
-
return new _SwapError.SwapError(error, message);
|
|
91
|
-
}
|
|
92
|
-
case _swap2.SwapErrorType.SWAP_EXCEED_ALLOWANCE:
|
|
93
|
-
{
|
|
94
|
-
if (metadata.maxSwap) {
|
|
95
|
-
const parsedMaxSwapValue = (0, _utils2.formatNumber)(metadata.maxSwap.value, metadata.maxSwap.decimals);
|
|
96
|
-
return new _SwapError.SwapError(error, `Amount too high. Lower your amount below ${parsedMaxSwapValue} ${metadata.maxSwap.symbol} and try again`);
|
|
97
|
-
} else {
|
|
98
|
-
return new _SwapError.SwapError(error, 'Amount too high. Lower your amount and try again');
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
case _swap2.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
102
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
103
|
-
case _swap2.SwapErrorType.UNKNOWN:
|
|
104
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
105
|
-
case _swap2.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
106
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Adjust your amount or try again later.');
|
|
107
|
-
default:
|
|
108
|
-
return new _SwapError.SwapError(error);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function getEarlyHydradxValidationError(error, metadata) {
|
|
112
|
-
switch (error) {
|
|
113
|
-
case _swap2.SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
|
|
114
|
-
{
|
|
115
|
-
return new _SwapError.SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
|
|
116
|
-
}
|
|
117
|
-
case _swap2.SwapErrorType.ASSET_NOT_SUPPORTED:
|
|
118
|
-
return new _SwapError.SwapError(error, 'This swap pair is not supported');
|
|
119
|
-
case _swap2.SwapErrorType.UNKNOWN:
|
|
120
|
-
return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
|
|
121
|
-
case _swap2.SwapErrorType.ERROR_FETCHING_QUOTE:
|
|
122
|
-
return new _SwapError.SwapError(error, 'No swap quote found. Adjust your amount or try again later.');
|
|
123
|
-
default:
|
|
124
|
-
return new _SwapError.SwapError(error);
|
|
125
|
-
}
|
|
126
85
|
}
|
|
@@ -8,30 +8,27 @@ exports.default = void 0;
|
|
|
8
8
|
var _EvmProviderError = require("@subwallet/extension-base/background/errors/EvmProviderError");
|
|
9
9
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
10
10
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
11
|
-
var _TransactionWarning = require("@subwallet/extension-base/background/warnings/TransactionWarning");
|
|
12
11
|
var _constants = require("@subwallet/extension-base/constants");
|
|
12
|
+
var _transfer = require("@subwallet/extension-base/core/logic-validation/transfer");
|
|
13
13
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
14
|
-
var _utils2 = require("@subwallet/extension-base/services/fee-service/utils");
|
|
15
14
|
var _constants2 = require("@subwallet/extension-base/services/request-service/constants");
|
|
16
15
|
var _constants3 = require("@subwallet/extension-base/services/transaction-service/constants");
|
|
17
16
|
var _eventParser = require("@subwallet/extension-base/services/transaction-service/event-parser");
|
|
18
17
|
var _helpers = require("@subwallet/extension-base/services/transaction-service/helpers");
|
|
19
|
-
var
|
|
18
|
+
var _utils2 = require("@subwallet/extension-base/services/transaction-service/utils");
|
|
20
19
|
var _helpers2 = require("@subwallet/extension-base/services/wallet-connect-service/helpers");
|
|
21
20
|
var _types = require("@subwallet/extension-base/types");
|
|
22
|
-
var
|
|
21
|
+
var _utils3 = require("@subwallet/extension-base/utils");
|
|
23
22
|
var _mergeTransactionAndSignature = require("@subwallet/extension-base/utils/eth/mergeTransactionAndSignature");
|
|
24
23
|
var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
|
|
25
24
|
var _number = require("@subwallet/extension-base/utils/number");
|
|
26
25
|
var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
|
|
27
|
-
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
28
26
|
var _ethereumjsUtil = require("ethereumjs-util");
|
|
29
27
|
var _ethers = require("ethers");
|
|
30
28
|
var _eventemitter = _interopRequireDefault(require("eventemitter3"));
|
|
31
29
|
var _i18next = require("i18next");
|
|
32
30
|
var _rxjs = require("rxjs");
|
|
33
31
|
var _util = require("@polkadot/util");
|
|
34
|
-
var _constants4 = require("../chain-service/constants");
|
|
35
32
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
36
33
|
// SPDX-License-Identifier: Apache-2.0
|
|
37
34
|
|
|
@@ -65,134 +62,48 @@ class TransactionService {
|
|
|
65
62
|
}
|
|
66
63
|
return [];
|
|
67
64
|
}
|
|
68
|
-
async
|
|
69
|
-
const
|
|
70
|
-
...
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
async validateTransaction(transactionInput) {
|
|
66
|
+
const validationResponse = {
|
|
67
|
+
...transactionInput,
|
|
68
|
+
status: undefined,
|
|
69
|
+
errors: transactionInput.errors || [],
|
|
70
|
+
warnings: transactionInput.warnings || []
|
|
73
71
|
};
|
|
74
72
|
const {
|
|
75
73
|
additionalValidator,
|
|
76
74
|
address,
|
|
77
75
|
chain,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
transaction
|
|
82
|
-
} = validation;
|
|
83
|
-
|
|
84
|
-
// Check duplicate transaction
|
|
85
|
-
validation.errors.push(...this.checkDuplicate(validationInput));
|
|
76
|
+
extrinsicType
|
|
77
|
+
} = validationResponse;
|
|
78
|
+
const transaction = transactionInput.transaction;
|
|
86
79
|
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
if (extrinsicType === _KoniTypes.ExtrinsicType.SEND_NFT) {
|
|
90
|
-
validation.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED, (0, _i18next.t)('This feature is not yet available for this NFT')));
|
|
91
|
-
} else {
|
|
92
|
-
validation.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.UNSUPPORTED));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
const validationResponse = {
|
|
96
|
-
status: undefined,
|
|
97
|
-
...validation
|
|
98
|
-
};
|
|
80
|
+
// Check duplicated transaction
|
|
81
|
+
validationResponse.errors.push(...this.checkDuplicate(transactionInput));
|
|
99
82
|
|
|
100
|
-
//
|
|
101
|
-
|
|
102
|
-
symbol: '',
|
|
103
|
-
decimals: 0,
|
|
104
|
-
value: '',
|
|
105
|
-
tooHigh: false
|
|
106
|
-
};
|
|
83
|
+
// Check support for transaction
|
|
84
|
+
(0, _transfer.checkSupportForTransaction)(validationResponse, transaction);
|
|
107
85
|
const chainInfo = this.state.chainService.getChainInfoByKey(chain);
|
|
108
86
|
if (!chainInfo) {
|
|
109
87
|
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR, (0, _i18next.t)('Cannot find network')));
|
|
110
|
-
} else {
|
|
111
|
-
const {
|
|
112
|
-
decimals,
|
|
113
|
-
symbol
|
|
114
|
-
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
|
|
115
|
-
estimateFee.decimals = decimals;
|
|
116
|
-
estimateFee.symbol = symbol;
|
|
117
|
-
if (transaction) {
|
|
118
|
-
try {
|
|
119
|
-
if ((0, _helpers.isSubstrateTransaction)(transaction)) {
|
|
120
|
-
estimateFee.value = (await transaction.paymentInfo(address)).partialFee.toString();
|
|
121
|
-
} else {
|
|
122
|
-
const web3 = this.state.chainService.getEvmApi(chain);
|
|
123
|
-
if (!web3) {
|
|
124
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.CHAIN_DISCONNECTED, undefined));
|
|
125
|
-
} else {
|
|
126
|
-
const gasLimit = await web3.api.eth.estimateGas(transaction);
|
|
127
|
-
const priority = await (0, _utils2.calculateGasFeeParams)(web3, chainInfo.slug);
|
|
128
|
-
if (priority.baseGasFee) {
|
|
129
|
-
const maxFee = priority.maxFeePerGas; // TODO: Need review
|
|
130
|
-
|
|
131
|
-
estimateFee.value = maxFee.multipliedBy(gasLimit).toFixed(0);
|
|
132
|
-
} else {
|
|
133
|
-
estimateFee.value = new _bignumber.default(priority.gasPrice).multipliedBy(gasLimit).toFixed(0);
|
|
134
|
-
}
|
|
135
|
-
estimateFee.tooHigh = priority.busyNetwork;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
} catch (e) {
|
|
139
|
-
const error = e;
|
|
140
|
-
if (error.message.includes('gas required exceeds allowance') && error.message.includes('insufficient funds')) {
|
|
141
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE));
|
|
142
|
-
}
|
|
143
|
-
estimateFee.value = '0';
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
88
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (!pair) {
|
|
152
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR, (0, _i18next.t)('Unable to find account')));
|
|
153
|
-
} else {
|
|
154
|
-
var _pair$meta;
|
|
155
|
-
if ((_pair$meta = pair.meta) !== null && _pair$meta !== void 0 && _pair$meta.isReadOnly) {
|
|
156
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.INTERNAL_ERROR, (0, _i18next.t)('This account is watch-only')));
|
|
157
|
-
}
|
|
89
|
+
const evmApi = this.state.chainService.getEvmApi(chainInfo.slug);
|
|
90
|
+
const isNeedEvmApi = transaction && !(0, _helpers.isSubstrateTransaction)(transaction) && !evmApi;
|
|
91
|
+
if (isNeedEvmApi) {
|
|
92
|
+
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.CHAIN_DISCONNECTED, undefined));
|
|
158
93
|
}
|
|
159
94
|
|
|
160
|
-
//
|
|
161
|
-
|
|
95
|
+
// Estimate fee for transaction
|
|
96
|
+
validationResponse.estimateFee = await (0, _transfer.estimateFeeForTransaction)(validationResponse, transaction, chainInfo, evmApi);
|
|
97
|
+
|
|
98
|
+
// Check account signing transaction
|
|
99
|
+
(0, _transfer.checkSigningAccountForTransaction)(validationResponse);
|
|
162
100
|
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const edNum = parseInt(existentialDeposit);
|
|
168
|
-
const transferNativeNum = parseInt(transferNative);
|
|
169
|
-
if (!validationInput.skipFeeValidation) {
|
|
170
|
-
// TODO
|
|
171
|
-
if (!new _bignumber.default(balance.value).gt(0)) {
|
|
172
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE));
|
|
173
|
-
}
|
|
174
|
-
if (transferNativeNum + feeNum > balanceNum) {
|
|
175
|
-
if (!isTransferAll) {
|
|
176
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE));
|
|
177
|
-
} else {
|
|
178
|
-
if ([..._constants4._TRANSFER_CHAIN_GROUP.acala, ..._constants4._TRANSFER_CHAIN_GROUP.genshiro, ..._constants4._TRANSFER_CHAIN_GROUP.bitcountry, ..._constants4._TRANSFER_CHAIN_GROUP.statemine].includes(chain)) {
|
|
179
|
-
// Chain not have transfer all function
|
|
180
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE));
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (!isTransferAll) {
|
|
185
|
-
if (balanceNum - (transferNativeNum + feeNum) < edNum) {
|
|
186
|
-
if (edAsWarning) {
|
|
187
|
-
validationResponse.warnings.push(new _TransactionWarning.TransactionWarning(_KoniTypes.BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT));
|
|
188
|
-
} else {
|
|
189
|
-
validationResponse.errors.push(new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_EXISTENTIAL_DEPOSIT));
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
101
|
+
const nativeTokenAvailable = await this.state.balanceService.getTransferableBalance(address, chain, nativeTokenInfo.slug, extrinsicType);
|
|
102
|
+
|
|
103
|
+
// Check available balance against transaction fee
|
|
104
|
+
(0, _transfer.checkBalanceWithTransactionFee)(validationResponse, transactionInput, nativeTokenInfo, nativeTokenAvailable);
|
|
194
105
|
|
|
195
|
-
//
|
|
106
|
+
// Check additional validations
|
|
196
107
|
additionalValidator && (await additionalValidator(validationResponse));
|
|
197
108
|
return validationResponse;
|
|
198
109
|
}
|
|
@@ -242,7 +153,7 @@ class TransactionService {
|
|
|
242
153
|
};
|
|
243
154
|
}
|
|
244
155
|
async handleTransaction(transaction) {
|
|
245
|
-
const validatedTransaction = await this.
|
|
156
|
+
const validatedTransaction = await this.validateTransaction(transaction);
|
|
246
157
|
const stopByErrors = validatedTransaction.errors.length > 0;
|
|
247
158
|
const stopByWarnings = validatedTransaction.warnings.length > 0 && !validatedTransaction.ignoreWarnings;
|
|
248
159
|
if (stopByErrors || stopByWarnings) {
|
|
@@ -341,13 +252,13 @@ class TransactionService {
|
|
|
341
252
|
getTransactionLink(id) {
|
|
342
253
|
const transaction = this.getTransaction(id);
|
|
343
254
|
const chainInfo = this.state.chainService.getChainInfoByKey(transaction.chain);
|
|
344
|
-
return (0,
|
|
255
|
+
return (0, _utils2.getExplorerLink)(chainInfo, transaction.extrinsicHash, 'tx');
|
|
345
256
|
}
|
|
346
257
|
transactionToHistories(id, startBlock, nonce, eventLogs) {
|
|
347
258
|
const transaction = this.getTransaction(id);
|
|
348
259
|
const extrinsicType = transaction.extrinsicType;
|
|
349
260
|
const chainInfo = this.state.chainService.getChainInfoByKey(transaction.chain);
|
|
350
|
-
const formattedTransactionAddress = (0,
|
|
261
|
+
const formattedTransactionAddress = (0, _utils3.reformatAddress)(transaction.address);
|
|
351
262
|
const historyItem = {
|
|
352
263
|
origin: 'app',
|
|
353
264
|
chain: transaction.chain,
|
|
@@ -380,7 +291,7 @@ class TransactionService {
|
|
|
380
291
|
switch (extrinsicType) {
|
|
381
292
|
case _KoniTypes.ExtrinsicType.TRANSFER_BALANCE:
|
|
382
293
|
{
|
|
383
|
-
const inputData = (0,
|
|
294
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
384
295
|
historyItem.to = inputData.to;
|
|
385
296
|
const sendingTokenInfo = this.state.chainService.getAssetBySlug(inputData.tokenSlug);
|
|
386
297
|
historyItem.amount = {
|
|
@@ -393,7 +304,7 @@ class TransactionService {
|
|
|
393
304
|
break;
|
|
394
305
|
case _KoniTypes.ExtrinsicType.TRANSFER_TOKEN:
|
|
395
306
|
{
|
|
396
|
-
const inputData = (0,
|
|
307
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
397
308
|
historyItem.to = inputData.to;
|
|
398
309
|
const sendingTokenInfo = this.state.chainService.getAssetBySlug(inputData.tokenSlug);
|
|
399
310
|
historyItem.amount = {
|
|
@@ -406,7 +317,7 @@ class TransactionService {
|
|
|
406
317
|
break;
|
|
407
318
|
case _KoniTypes.ExtrinsicType.TRANSFER_XCM:
|
|
408
319
|
{
|
|
409
|
-
const inputData = (0,
|
|
320
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
410
321
|
historyItem.to = inputData.to;
|
|
411
322
|
const sendingTokenInfo = this.state.chainService.getAssetBySlug(inputData.tokenSlug);
|
|
412
323
|
historyItem.amount = {
|
|
@@ -426,7 +337,7 @@ class TransactionService {
|
|
|
426
337
|
break;
|
|
427
338
|
case _KoniTypes.ExtrinsicType.SEND_NFT:
|
|
428
339
|
{
|
|
429
|
-
const inputData = (0,
|
|
340
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
430
341
|
historyItem.to = inputData.recipientAddress;
|
|
431
342
|
historyItem.amount = {
|
|
432
343
|
decimals: 0,
|
|
@@ -437,7 +348,7 @@ class TransactionService {
|
|
|
437
348
|
break;
|
|
438
349
|
case _KoniTypes.ExtrinsicType.STAKING_BOND:
|
|
439
350
|
{
|
|
440
|
-
const data = (0,
|
|
351
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
441
352
|
historyItem.amount = {
|
|
442
353
|
...baseNativeAmount,
|
|
443
354
|
value: data.amount || '0'
|
|
@@ -446,7 +357,7 @@ class TransactionService {
|
|
|
446
357
|
break;
|
|
447
358
|
case _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL:
|
|
448
359
|
{
|
|
449
|
-
const data = (0,
|
|
360
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
450
361
|
historyItem.amount = {
|
|
451
362
|
...baseNativeAmount,
|
|
452
363
|
value: data.amount || '0'
|
|
@@ -456,7 +367,7 @@ class TransactionService {
|
|
|
456
367
|
break;
|
|
457
368
|
case _KoniTypes.ExtrinsicType.STAKING_UNBOND:
|
|
458
369
|
{
|
|
459
|
-
const data = (0,
|
|
370
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
460
371
|
if (data.isLiquidStaking && data.derivativeTokenInfo && data.exchangeRate && data.inputTokenInfo) {
|
|
461
372
|
historyItem.amount = {
|
|
462
373
|
decimals: (0, _utils._getAssetDecimals)(data.derivativeTokenInfo),
|
|
@@ -478,7 +389,7 @@ class TransactionService {
|
|
|
478
389
|
break;
|
|
479
390
|
case _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL:
|
|
480
391
|
{
|
|
481
|
-
const data = (0,
|
|
392
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
482
393
|
historyItem.to = data.address || '';
|
|
483
394
|
historyItem.amount = {
|
|
484
395
|
...baseNativeAmount,
|
|
@@ -488,7 +399,7 @@ class TransactionService {
|
|
|
488
399
|
break;
|
|
489
400
|
case _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD:
|
|
490
401
|
{
|
|
491
|
-
const data = (0,
|
|
402
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
492
403
|
historyItem.amount = {
|
|
493
404
|
...baseNativeAmount,
|
|
494
405
|
value: data.unclaimedReward || '0'
|
|
@@ -497,7 +408,7 @@ class TransactionService {
|
|
|
497
408
|
break;
|
|
498
409
|
case _KoniTypes.ExtrinsicType.STAKING_WITHDRAW:
|
|
499
410
|
{
|
|
500
|
-
const data = (0,
|
|
411
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
501
412
|
const slug = data.slug;
|
|
502
413
|
const poolHandler = this.state.earningService.getPoolHandler(slug);
|
|
503
414
|
const amount = {
|
|
@@ -517,7 +428,7 @@ class TransactionService {
|
|
|
517
428
|
}
|
|
518
429
|
case _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE:
|
|
519
430
|
{
|
|
520
|
-
const data = (0,
|
|
431
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
521
432
|
historyItem.amount = {
|
|
522
433
|
...baseNativeAmount,
|
|
523
434
|
value: data.selectedUnstaking.claimable || '0'
|
|
@@ -527,7 +438,7 @@ class TransactionService {
|
|
|
527
438
|
case _KoniTypes.ExtrinsicType.EVM_EXECUTE:
|
|
528
439
|
{
|
|
529
440
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
530
|
-
const data = (0,
|
|
441
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
531
442
|
|
|
532
443
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access
|
|
533
444
|
historyItem.to = (data === null || data === void 0 ? void 0 : data.to) || '';
|
|
@@ -542,7 +453,7 @@ class TransactionService {
|
|
|
542
453
|
// eslint-disable-next-line no-fallthrough
|
|
543
454
|
case _KoniTypes.ExtrinsicType.MINT_VDOT:
|
|
544
455
|
{
|
|
545
|
-
const params = (0,
|
|
456
|
+
const params = (0, _utils2.parseTransactionData)(transaction.data);
|
|
546
457
|
const inputTokenInfo = this.state.chainService.getAssetBySlug(params.inputTokenSlug);
|
|
547
458
|
const isFeePaidWithInputAsset = params.feeTokenSlug === params.inputTokenSlug;
|
|
548
459
|
historyItem.amount = {
|
|
@@ -564,7 +475,7 @@ class TransactionService {
|
|
|
564
475
|
// eslint-disable-next-line no-fallthrough
|
|
565
476
|
case _KoniTypes.ExtrinsicType.REDEEM_QDOT:
|
|
566
477
|
{
|
|
567
|
-
const data = (0,
|
|
478
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
568
479
|
const yieldPoolInfo = data.poolInfo;
|
|
569
480
|
if (yieldPoolInfo.metadata.derivativeAssets) {
|
|
570
481
|
const inputTokenSlug = yieldPoolInfo.metadata.inputAsset;
|
|
@@ -603,7 +514,7 @@ class TransactionService {
|
|
|
603
514
|
// eslint-disable-next-line no-fallthrough
|
|
604
515
|
case _KoniTypes.ExtrinsicType.REDEEM_VDOT:
|
|
605
516
|
{
|
|
606
|
-
const data = (0,
|
|
517
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
607
518
|
const yieldPoolInfo = data.poolInfo;
|
|
608
519
|
const minAmountPercents = this.state.earningService.getMinAmountPercent();
|
|
609
520
|
if (yieldPoolInfo.metadata.derivativeAssets) {
|
|
@@ -637,7 +548,7 @@ class TransactionService {
|
|
|
637
548
|
}
|
|
638
549
|
case _KoniTypes.ExtrinsicType.TOKEN_APPROVE:
|
|
639
550
|
{
|
|
640
|
-
const data = (0,
|
|
551
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data);
|
|
641
552
|
const inputAsset = this.state.chainService.getAssetBySlug(data.inputTokenSlug);
|
|
642
553
|
historyItem.amount = {
|
|
643
554
|
value: '0',
|
|
@@ -648,7 +559,7 @@ class TransactionService {
|
|
|
648
559
|
}
|
|
649
560
|
case _KoniTypes.ExtrinsicType.SWAP:
|
|
650
561
|
{
|
|
651
|
-
const data = (0,
|
|
562
|
+
const data = (0, _utils2.parseTransactionData)(transaction.data); // TODO: switch by provider
|
|
652
563
|
const inputAsset = this.state.chainService.getAssetBySlug(data.quote.pair.from);
|
|
653
564
|
historyItem.amount = {
|
|
654
565
|
value: data.quote.fromAmount,
|
|
@@ -673,7 +584,7 @@ class TransactionService {
|
|
|
673
584
|
switch (extrinsicType) {
|
|
674
585
|
case _KoniTypes.ExtrinsicType.TRANSFER_XCM:
|
|
675
586
|
{
|
|
676
|
-
const inputData = (0,
|
|
587
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
677
588
|
receiverHistory.chain = inputData.destinationNetworkKey;
|
|
678
589
|
break;
|
|
679
590
|
}
|
|
@@ -734,7 +645,7 @@ class TransactionService {
|
|
|
734
645
|
// must be done after success/failure to make sure the transaction is finalized
|
|
735
646
|
const transaction = this.getTransaction(id);
|
|
736
647
|
if (transaction.extrinsicType === _KoniTypes.ExtrinsicType.SEND_NFT) {
|
|
737
|
-
const inputData = (0,
|
|
648
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
738
649
|
try {
|
|
739
650
|
const sender = _uiKeyring.default.getPair(inputData.senderAddress);
|
|
740
651
|
sender && this.state.dbService.handleNftTransfer(transaction.chain, [sender.address, _constants.ALL_ACCOUNT_KEY], inputData.nftItem).then(() => {
|
|
@@ -755,7 +666,7 @@ class TransactionService {
|
|
|
755
666
|
} else if ([_KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.STAKING_UNBOND, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD, _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL, _KoniTypes.ExtrinsicType.STAKING_POOL_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL].includes(transaction.extrinsicType)) {
|
|
756
667
|
this.state.eventService.emit('transaction.submitStaking', transaction.chain);
|
|
757
668
|
} else if (transaction.extrinsicType === _KoniTypes.ExtrinsicType.SWAP) {
|
|
758
|
-
const inputData = (0,
|
|
669
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
759
670
|
const toAssetSlug = inputData.quote.pair.to;
|
|
760
671
|
|
|
761
672
|
// todo: consider async
|
|
@@ -883,16 +794,16 @@ class TransactionService {
|
|
|
883
794
|
generateHashPayload(chain, transaction) {
|
|
884
795
|
const chainInfo = this.state.chainService.getChainInfoByKey(chain);
|
|
885
796
|
let txObject;
|
|
886
|
-
const max = (0,
|
|
797
|
+
const max = (0, _utils3.anyNumberToBN)(transaction.maxFeePerGas);
|
|
887
798
|
if (max.gt(_number.BN_ZERO)) {
|
|
888
799
|
var _transaction$nonce;
|
|
889
800
|
txObject = {
|
|
890
801
|
nonce: (_transaction$nonce = transaction.nonce) !== null && _transaction$nonce !== void 0 ? _transaction$nonce : 0,
|
|
891
|
-
maxFeePerGas: (0, _ethereumjsUtil.addHexPrefix)((0,
|
|
892
|
-
maxPriorityFeePerGas: (0, _ethereumjsUtil.addHexPrefix)((0,
|
|
893
|
-
gasLimit: (0, _ethereumjsUtil.addHexPrefix)((0,
|
|
802
|
+
maxFeePerGas: (0, _ethereumjsUtil.addHexPrefix)((0, _utils3.anyNumberToBN)(transaction.maxFeePerGas).toString(16)),
|
|
803
|
+
maxPriorityFeePerGas: (0, _ethereumjsUtil.addHexPrefix)((0, _utils3.anyNumberToBN)(transaction.maxPriorityFeePerGas).toString(16)),
|
|
804
|
+
gasLimit: (0, _ethereumjsUtil.addHexPrefix)((0, _utils3.anyNumberToBN)(transaction.gas).toString(16)),
|
|
894
805
|
to: transaction.to,
|
|
895
|
-
value: (0, _ethereumjsUtil.addHexPrefix)((0,
|
|
806
|
+
value: (0, _ethereumjsUtil.addHexPrefix)((0, _utils3.anyNumberToBN)(transaction.value).toString(16)),
|
|
896
807
|
data: transaction.data,
|
|
897
808
|
chainId: (0, _utils._getEvmChainId)(chainInfo),
|
|
898
809
|
type: 2
|
|
@@ -901,10 +812,10 @@ class TransactionService {
|
|
|
901
812
|
var _transaction$nonce2;
|
|
902
813
|
txObject = {
|
|
903
814
|
nonce: (_transaction$nonce2 = transaction.nonce) !== null && _transaction$nonce2 !== void 0 ? _transaction$nonce2 : 0,
|
|
904
|
-
gasPrice: (0, _ethereumjsUtil.addHexPrefix)((0,
|
|
905
|
-
gasLimit: (0, _ethereumjsUtil.addHexPrefix)((0,
|
|
815
|
+
gasPrice: (0, _ethereumjsUtil.addHexPrefix)((0, _utils3.anyNumberToBN)(transaction.gasPrice).toString(16)),
|
|
816
|
+
gasLimit: (0, _ethereumjsUtil.addHexPrefix)((0, _utils3.anyNumberToBN)(transaction.gas).toString(16)),
|
|
906
817
|
to: transaction.to,
|
|
907
|
-
value: (0, _ethereumjsUtil.addHexPrefix)((0,
|
|
818
|
+
value: (0, _ethereumjsUtil.addHexPrefix)((0, _utils3.anyNumberToBN)(transaction.value).toString(16)),
|
|
908
819
|
data: transaction.data,
|
|
909
820
|
chainId: (0, _utils._getEvmChainId)(chainInfo),
|
|
910
821
|
type: 0
|
|
@@ -974,12 +885,12 @@ class TransactionService {
|
|
|
974
885
|
const txObject = {
|
|
975
886
|
nonce: (_payload$nonce = payload.nonce) !== null && _payload$nonce !== void 0 ? _payload$nonce : 0,
|
|
976
887
|
from: payload.from,
|
|
977
|
-
gasPrice: (0,
|
|
978
|
-
maxFeePerGas: (0,
|
|
979
|
-
maxPriorityFeePerGas: (0,
|
|
980
|
-
gasLimit: (0,
|
|
888
|
+
gasPrice: (0, _utils3.anyNumberToBN)(payload.gasPrice).toNumber(),
|
|
889
|
+
maxFeePerGas: (0, _utils3.anyNumberToBN)(payload.maxFeePerGas).toNumber(),
|
|
890
|
+
maxPriorityFeePerGas: (0, _utils3.anyNumberToBN)(payload.maxPriorityFeePerGas).toNumber(),
|
|
891
|
+
gasLimit: (0, _utils3.anyNumberToBN)(payload.gas).toNumber(),
|
|
981
892
|
to: payload.to,
|
|
982
|
-
value: (0,
|
|
893
|
+
value: (0, _utils3.anyNumberToBN)(payload.value).toNumber(),
|
|
983
894
|
data: payload.data,
|
|
984
895
|
chainId: payload.chainId
|
|
985
896
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
2
|
+
export declare function _handleDisplayForEarningError(error: TransactionError): {
|
|
3
|
+
title: string;
|
|
4
|
+
message: string;
|
|
5
|
+
} | undefined;
|
|
6
|
+
export declare const INSUFFICIENT_MESSAGES: string[];
|
|
7
|
+
export declare function _handleDisplayInsufficientEarningError(error: Error, availableBalance: string, amount: string, minJoinPool: string): {
|
|
8
|
+
title: string;
|
|
9
|
+
message: string;
|
|
10
|
+
} | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import BigN from 'bignumber.js';
|
|
5
|
+
export function _handleDisplayForEarningError(error) {
|
|
6
|
+
if (error.message.startsWith('UnknownError Connection to Indexed DataBase server lost') || error.message.startsWith('Provided address is invalid, the capitalization checksum test failed') || error.message.startsWith('connection not open on send()')) {
|
|
7
|
+
return {
|
|
8
|
+
title: 'Connection error',
|
|
9
|
+
message: 'Your selected network has lost connection. Update it by re-enabling it or changing network provider'
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
export const INSUFFICIENT_MESSAGES = ['残高不足', 'Недостаточный баланс', 'Insufficient balance'];
|
|
15
|
+
export function _handleDisplayInsufficientEarningError(error, availableBalance, amount, minJoinPool) {
|
|
16
|
+
if (!INSUFFICIENT_MESSAGES.some(v => error.message.includes(v))) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const bnAvailableBalance = new BigN(availableBalance);
|
|
20
|
+
const bnAmount = new BigN(amount);
|
|
21
|
+
if (bnAvailableBalance.gt(0) && bnAmount.gte(bnAvailableBalance)) {
|
|
22
|
+
return {
|
|
23
|
+
title: 'Insufficient balance',
|
|
24
|
+
message: 'Insufficient balance. Amount must be smaller than available balance'
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (bnAvailableBalance.lte(minJoinPool)) {
|
|
28
|
+
return {
|
|
29
|
+
title: 'Insufficient balance',
|
|
30
|
+
message: 'You don\'t have enough {{symbol}} ({{chain}}) to stake, make sure your available balance is higher than {{minJoinPool}} {{symbol}}'
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
title: 'Insufficient balance',
|
|
35
|
+
message: 'You don\'t have enough {{symbol}} ({{chain}}) to pay gas fee. Lower your amount and try again'
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
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 { ChainflipPreValidationMetadata, HydradxPreValidationMetadata, SwapErrorType } from '@subwallet/extension-base/types/swap';
|
|
5
|
+
export declare function _validateBalanceToSwap(fromToken: _ChainAsset, feeToken: _ChainAsset, feeTokenChainInfo: _ChainInfo, feeAmount: string, fromTokenBalance: string, feeTokenBalance: string, swapAmount: string, isXcmOk: boolean, minSwap?: string): TransactionError | undefined;
|
|
6
|
+
export declare function _validateSwapRecipient(destChainInfo: _ChainInfo, recipient: string): TransactionError | undefined;
|
|
7
|
+
export declare function _getChainflipEarlyValidationError(error: SwapErrorType, metadata: ChainflipPreValidationMetadata): SwapError;
|
|
8
|
+
export declare function _getEarlyHydradxValidationError(error: SwapErrorType, metadata: HydradxPreValidationMetadata): SwapError;
|