@subwallet/extension-base 1.3.38-0 → 1.3.40-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/koni/background/handlers/Extension.js +79 -69
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/transfer/xcm/index.js +19 -28
- package/cjs/services/balance-service/transfer/xcm/utils.js +47 -49
- package/cjs/services/chain-service/constants.js +2 -2
- package/cjs/services/chain-service/index.js +4 -0
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/handlers/special.js +28 -36
- package/cjs/services/request-service/handler/AuthRequestHandler.js +2 -0
- package/cjs/services/swap-service/handler/base-handler.js +58 -53
- package/cjs/services/swap-service/handler/kyber-handler.js +44 -28
- package/cjs/services/swap-service/handler/simpleswap-handler.js +79 -40
- package/cjs/services/swap-service/utils.js +2 -0
- package/cjs/utils/fee/transfer.js +41 -33
- package/koni/background/handlers/Extension.js +15 -5
- package/package.json +7 -7
- package/packageInfo.js +1 -1
- package/services/balance-service/transfer/xcm/index.d.ts +1 -2
- package/services/balance-service/transfer/xcm/index.js +16 -25
- package/services/balance-service/transfer/xcm/utils.d.ts +36 -6
- package/services/balance-service/transfer/xcm/utils.js +46 -48
- package/services/chain-service/constants.js +2 -2
- package/services/chain-service/index.js +4 -0
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/special.js +12 -20
- package/services/request-service/handler/AuthRequestHandler.js +2 -0
- package/services/swap-service/handler/base-handler.js +11 -6
- package/services/swap-service/handler/kyber-handler.js +44 -28
- package/services/swap-service/handler/simpleswap-handler.js +80 -41
- package/services/swap-service/utils.js +2 -0
- package/utils/fee/transfer.js +11 -3
|
@@ -6,21 +6,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.STABLE_XCM_VERSION = void 0;
|
|
7
7
|
exports.buildXcm = buildXcm;
|
|
8
8
|
exports.dryRunXcm = dryRunXcm;
|
|
9
|
-
exports.
|
|
9
|
+
exports.estimateXcmFee = estimateXcmFee;
|
|
10
10
|
exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
|
|
11
11
|
exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
|
|
12
12
|
exports.isUseTeleportProtocol = isUseTeleportProtocol;
|
|
13
|
-
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
14
13
|
var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
|
|
15
|
-
var _types = require("@subwallet/extension-base/types");
|
|
16
14
|
var _util = require("@polkadot/util");
|
|
17
15
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
18
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
19
17
|
|
|
20
|
-
const paraSpellEndpoint = 'https://api.lightspell.xyz';
|
|
18
|
+
const paraSpellEndpoint = 'https://api.lightspell.xyz/v3';
|
|
21
19
|
const paraSpellApi = {
|
|
22
20
|
buildXcm: `${paraSpellEndpoint}/x-transfer`,
|
|
23
|
-
dryRunXcm: `${paraSpellEndpoint}/dry-run
|
|
21
|
+
dryRunXcm: `${paraSpellEndpoint}/dry-run`,
|
|
22
|
+
feeXcm: `${paraSpellEndpoint}/xcm-fee`
|
|
24
23
|
};
|
|
25
24
|
const paraSpellKey = process.env.PARASPELL_API_KEY || '';
|
|
26
25
|
function txHexToSubmittableExtrinsic(api, hex) {
|
|
@@ -85,7 +84,7 @@ async function buildXcm(request) {
|
|
|
85
84
|
substrateApi
|
|
86
85
|
} = request;
|
|
87
86
|
if (!substrateApi) {
|
|
88
|
-
|
|
87
|
+
throw new Error('Substrate API is not available');
|
|
89
88
|
}
|
|
90
89
|
const psAssetType = (_originTokenInfo$meta = originTokenInfo.metadata) === null || _originTokenInfo$meta === void 0 ? void 0 : _originTokenInfo$meta.paraSpellAssetType;
|
|
91
90
|
const psAssetValue = (_originTokenInfo$meta2 = originTokenInfo.metadata) === null || _originTokenInfo$meta2 === void 0 ? void 0 : _originTokenInfo$meta2.paraSpellValue;
|
|
@@ -116,8 +115,6 @@ async function buildXcm(request) {
|
|
|
116
115
|
const chainApi = await substrateApi.isReady;
|
|
117
116
|
return txHexToSubmittableExtrinsic(chainApi.api, extrinsicHex);
|
|
118
117
|
}
|
|
119
|
-
|
|
120
|
-
// dry run can fail due to sender address & amount token
|
|
121
118
|
async function dryRunXcm(request) {
|
|
122
119
|
var _originTokenInfo$meta3, _originTokenInfo$meta4;
|
|
123
120
|
const {
|
|
@@ -132,60 +129,60 @@ async function dryRunXcm(request) {
|
|
|
132
129
|
const psAssetType = (_originTokenInfo$meta3 = originTokenInfo.metadata) === null || _originTokenInfo$meta3 === void 0 ? void 0 : _originTokenInfo$meta3.paraSpellAssetType;
|
|
133
130
|
const psAssetValue = (_originTokenInfo$meta4 = originTokenInfo.metadata) === null || _originTokenInfo$meta4 === void 0 ? void 0 : _originTokenInfo$meta4.paraSpellValue;
|
|
134
131
|
if (!psAssetType || !psAssetValue) {
|
|
135
|
-
throw new Error('Token is not support XCM at this time');
|
|
132
|
+
throw new Error('Token is not support XCM at this time');
|
|
136
133
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
134
|
+
const bodyData = {
|
|
135
|
+
senderAddress: sender,
|
|
136
|
+
address: recipient,
|
|
137
|
+
from: paraSpellChainMap[originChain.slug],
|
|
138
|
+
to: paraSpellChainMap[destinationChain.slug],
|
|
139
|
+
currency: createParaSpellCurrency(psAssetType, psAssetValue, sendingValue)
|
|
140
|
+
};
|
|
141
|
+
const response = await fetch(paraSpellApi.dryRunXcm, {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
body: JSON.stringify(bodyData),
|
|
144
|
+
headers: {
|
|
145
|
+
'Content-Type': 'application/json',
|
|
146
|
+
Accept: 'application/json',
|
|
147
|
+
'X-API-KEY': paraSpellKey
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
if (!response.ok) {
|
|
151
|
+
const error = await response.json();
|
|
152
|
+
return {
|
|
153
|
+
origin: {
|
|
154
|
+
success: false,
|
|
155
|
+
failureReason: error.message
|
|
154
156
|
}
|
|
155
|
-
}
|
|
156
|
-
dryRunInfo = await response.json();
|
|
157
|
-
} catch (e) {
|
|
158
|
-
console.error('Unable to dry run', e);
|
|
159
|
-
}
|
|
160
|
-
if (!dryRunInfo || !dryRunInfo.success) {
|
|
161
|
-
throw new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SEND, 'Unable to perform transaction. Select another token or destination chain and try again');
|
|
157
|
+
};
|
|
162
158
|
}
|
|
163
|
-
return
|
|
159
|
+
return await response.json();
|
|
164
160
|
}
|
|
165
|
-
async function
|
|
166
|
-
var
|
|
161
|
+
async function estimateXcmFee(request) {
|
|
162
|
+
var _fromTokenInfo$metada, _fromTokenInfo$metada2;
|
|
167
163
|
const {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
originTokenInfo,
|
|
164
|
+
fromChainInfo,
|
|
165
|
+
fromTokenInfo,
|
|
171
166
|
recipient,
|
|
172
167
|
sender,
|
|
173
|
-
|
|
168
|
+
toChainInfo,
|
|
169
|
+
value
|
|
174
170
|
} = request;
|
|
175
171
|
const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
|
|
176
|
-
const psAssetType = (
|
|
177
|
-
const psAssetValue = (
|
|
172
|
+
const psAssetType = (_fromTokenInfo$metada = fromTokenInfo.metadata) === null || _fromTokenInfo$metada === void 0 ? void 0 : _fromTokenInfo$metada.paraSpellAssetType;
|
|
173
|
+
const psAssetValue = (_fromTokenInfo$metada2 = fromTokenInfo.metadata) === null || _fromTokenInfo$metada2 === void 0 ? void 0 : _fromTokenInfo$metada2.paraSpellValue;
|
|
178
174
|
if (!psAssetType || !psAssetValue) {
|
|
179
|
-
|
|
175
|
+
console.error('Lack of paraspell metadata');
|
|
176
|
+
return undefined;
|
|
180
177
|
}
|
|
181
178
|
const bodyData = {
|
|
182
179
|
senderAddress: sender,
|
|
183
180
|
address: recipient,
|
|
184
|
-
from: paraSpellChainMap[
|
|
185
|
-
to: paraSpellChainMap[
|
|
186
|
-
currency: createParaSpellCurrency(psAssetType, psAssetValue,
|
|
181
|
+
from: paraSpellChainMap[fromChainInfo.slug],
|
|
182
|
+
to: paraSpellChainMap[toChainInfo.slug],
|
|
183
|
+
currency: createParaSpellCurrency(psAssetType, psAssetValue, value)
|
|
187
184
|
};
|
|
188
|
-
const response = await fetch(paraSpellApi.
|
|
185
|
+
const response = await fetch(paraSpellApi.feeXcm, {
|
|
189
186
|
method: 'POST',
|
|
190
187
|
body: JSON.stringify(bodyData),
|
|
191
188
|
headers: {
|
|
@@ -195,13 +192,14 @@ async function dryRunXcmV2(request) {
|
|
|
195
192
|
}
|
|
196
193
|
});
|
|
197
194
|
if (!response.ok) {
|
|
198
|
-
|
|
199
|
-
|
|
195
|
+
console.error('Failed to request estimate fee');
|
|
196
|
+
return undefined;
|
|
200
197
|
}
|
|
201
198
|
return await response.json();
|
|
202
199
|
}
|
|
203
200
|
function createParaSpellCurrency(assetType, assetValue, amount) {
|
|
204
201
|
// todo: handle complex conditions for asset has same symbol in a chain: Id, Multi-location, ...
|
|
202
|
+
// todo: or update all asset to use multi-location
|
|
205
203
|
return {
|
|
206
204
|
[assetType]: assetValue,
|
|
207
205
|
amount
|
|
@@ -40,7 +40,7 @@ const _BALANCE_CHAIN_GROUP = {
|
|
|
40
40
|
kintsugi: ['kintsugi', 'interlay', 'kintsugi_test', 'mangatax_para'],
|
|
41
41
|
genshiro: ['genshiro_testnet', 'genshiro'],
|
|
42
42
|
equilibrium_parachain: ['equilibrium_parachain'],
|
|
43
|
-
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network'],
|
|
43
|
+
bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'hydradx_rococo', 'pendulum', 'amplitude', 'continuum_network', 'truth_network', 'jamton'],
|
|
44
44
|
statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin', 'crust', 'phala', 'shibuya', 'dbcchain', 'westend_assethub'],
|
|
45
45
|
kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
|
|
46
46
|
// perhaps there are some runtime updates
|
|
@@ -276,7 +276,7 @@ const _TRANSFER_CHAIN_GROUP = {
|
|
|
276
276
|
riochain: ['riochain'],
|
|
277
277
|
sora_substrate: ['sora_substrate'],
|
|
278
278
|
avail: ['kate', 'goldberg_testnet'],
|
|
279
|
-
pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot'],
|
|
279
|
+
pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton'],
|
|
280
280
|
centrifuge: ['centrifuge'],
|
|
281
281
|
disable_transfer: ['crab', 'pangolin']
|
|
282
282
|
};
|
|
@@ -1262,6 +1262,10 @@ class ChainService {
|
|
|
1262
1262
|
deprecated = true;
|
|
1263
1263
|
break;
|
|
1264
1264
|
}
|
|
1265
|
+
if (defaultChainAsset.slug === storedAssetInfo.slug) {
|
|
1266
|
+
duplicated = true;
|
|
1267
|
+
break;
|
|
1268
|
+
}
|
|
1265
1269
|
}
|
|
1266
1270
|
if (!duplicated && !deprecated) {
|
|
1267
1271
|
mergedAssetRegistry[storedAssetInfo.slug] = storedAssetInfo;
|
|
@@ -11,7 +11,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
|
11
11
|
const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
|
|
12
12
|
const fetchDomain = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev';
|
|
13
13
|
const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
|
|
14
|
-
const ChainListVersion = '0.2.
|
|
14
|
+
const ChainListVersion = '0.2.105'; // update this when build chainlist
|
|
15
15
|
|
|
16
16
|
// todo: move this interface to chainlist
|
|
17
17
|
|
|
@@ -10,9 +10,10 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
|
10
10
|
var _constants = require("@subwallet/extension-base/constants");
|
|
11
11
|
var _utils = require("@subwallet/extension-base/koni/api/yield/helper/utils");
|
|
12
12
|
var _xcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm");
|
|
13
|
-
var _utils2 = require("@subwallet/extension-base/services/
|
|
13
|
+
var _utils2 = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
|
|
14
|
+
var _utils3 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
14
15
|
var _types = require("@subwallet/extension-base/types");
|
|
15
|
-
var
|
|
16
|
+
var _utils4 = require("@subwallet/extension-base/utils");
|
|
16
17
|
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
17
18
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
18
19
|
var _i18next = require("i18next");
|
|
@@ -28,7 +29,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
28
29
|
rate = 0;
|
|
29
30
|
constructor(state, chain) {
|
|
30
31
|
super(state, chain);
|
|
31
|
-
this.exchangeRatePromise = (0,
|
|
32
|
+
this.exchangeRatePromise = (0, _utils4.createPromiseHandler)();
|
|
32
33
|
}
|
|
33
34
|
get metadataInfo() {
|
|
34
35
|
return {
|
|
@@ -85,20 +86,20 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
85
86
|
const bnMinJoinPool = new _util.BN(poolInfo.statistic.earningThreshold.join);
|
|
86
87
|
const inputTokenInfo = this.state.chainService.getAssetBySlug(this.inputAsset);
|
|
87
88
|
const altInputTokenInfo = this.state.chainService.getAssetBySlug(this.altInputAsset);
|
|
88
|
-
const existentialDeposit = new _util.BN((0,
|
|
89
|
+
const existentialDeposit = new _util.BN((0, _utils3._getAssetExistentialDeposit)(altInputTokenInfo));
|
|
89
90
|
const bnAltInputAssetBalance = new _util.BN(altInputAssetBalance.value);
|
|
90
91
|
if (bnInputAssetBalance.add(bnAltInputAssetBalance).lt(bnMinJoinPool)) {
|
|
91
92
|
const missingAmount = bnMinJoinPool.sub(bnInputAssetBalance).sub(bnAltInputAssetBalance);
|
|
92
93
|
const isTheSame = missingAmount.toString() === bnMinJoinPool.toString();
|
|
93
94
|
const originChain = this.state.getChainInfo(inputTokenInfo.originChain);
|
|
94
95
|
const altChain = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
95
|
-
const originSymbol = (0,
|
|
96
|
-
const altSymbol = (0,
|
|
96
|
+
const originSymbol = (0, _utils3._getAssetSymbol)(inputTokenInfo);
|
|
97
|
+
const altSymbol = (0, _utils3._getAssetSymbol)(altInputTokenInfo);
|
|
97
98
|
const originName = originChain.name;
|
|
98
99
|
const altName = altChain.name;
|
|
99
|
-
const parsedMinJoinPool = (0,
|
|
100
|
+
const parsedMinJoinPool = (0, _utils4.formatNumber)(missingAmount.toString(), inputAssetInfo.decimals || 0);
|
|
100
101
|
const formatparsedMinJoinPool = isTheSame ? parsedMinJoinPool : Number(parsedMinJoinPool) + 0.01;
|
|
101
|
-
const parsedMinAltJoinPool = (0,
|
|
102
|
+
const parsedMinAltJoinPool = (0, _utils4.formatNumber)(missingAmount.add(existentialDeposit).toString(), inputAssetInfo.decimals || 0);
|
|
102
103
|
const formatParsedMinAltJoinPool = isTheSame ? parsedMinAltJoinPool : Number(parsedMinAltJoinPool) + 0.01;
|
|
103
104
|
return {
|
|
104
105
|
passed: false,
|
|
@@ -224,35 +225,26 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
224
225
|
const altChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
225
226
|
const symbol = altInputTokenInfo.symbol;
|
|
226
227
|
const networkName = altChainInfo.name;
|
|
227
|
-
const xcmOriginSubstrateApi = await this.state.getSubstrateApi(altInputTokenInfo.originChain).isReady;
|
|
228
|
-
const id = (0, _getId.getId)();
|
|
229
|
-
const feeInfo = await this.state.feeService.subscribeChainFee(id, altChainInfo.slug, 'substrate');
|
|
230
|
-
const xcmRequest = {
|
|
231
|
-
sender: address,
|
|
232
|
-
originTokenInfo: altInputTokenInfo,
|
|
233
|
-
destinationTokenInfo: inputTokenInfo,
|
|
234
|
-
sendingValue: bnAmount.toString(),
|
|
235
|
-
recipient: address,
|
|
236
|
-
destinationChain: this.chainInfo,
|
|
237
|
-
originChain: altChainInfo,
|
|
238
|
-
substrateApi: xcmOriginSubstrateApi,
|
|
239
|
-
feeInfo
|
|
240
|
-
};
|
|
241
228
|
|
|
242
229
|
// TODO: calculate fee for destination chain
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
230
|
+
const xcmFeeInfo = await (0, _utils2.estimateXcmFee)({
|
|
231
|
+
fromChainInfo: altChainInfo,
|
|
232
|
+
fromTokenInfo: altInputTokenInfo,
|
|
233
|
+
toChainInfo: this.chainInfo,
|
|
234
|
+
recipient: address,
|
|
235
|
+
sender: address,
|
|
236
|
+
value: bnAmount.toString()
|
|
237
|
+
});
|
|
238
|
+
if (!xcmFeeInfo) {
|
|
248
239
|
throw new Error('Error estimating XCM fee');
|
|
249
240
|
}
|
|
241
|
+
const xcmFee = (0, _bignumber.default)(xcmFeeInfo.origin.fee).multipliedBy(_constants.XCM_MIN_AMOUNT_RATIO).toFixed(0, 1);
|
|
250
242
|
const fee = {
|
|
251
243
|
slug: altInputTokenSlug,
|
|
252
244
|
amount: xcmFee
|
|
253
245
|
};
|
|
254
246
|
let bnTransferAmount = bnAmount.sub(bnInputTokenBalance);
|
|
255
|
-
if ((0,
|
|
247
|
+
if ((0, _utils3._isNativeToken)(altInputTokenInfo)) {
|
|
256
248
|
const bnXcmFee = new _util.BN(fee.amount || 0); // xcm fee is paid in native token but swap token is not always native token
|
|
257
249
|
|
|
258
250
|
bnTransferAmount = bnTransferAmount.add(bnXcmFee);
|
|
@@ -316,14 +308,14 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
316
308
|
processValidation.ok = false;
|
|
317
309
|
processValidation.status = _types.YieldValidationStatus.NOT_ENOUGH_BALANCE;
|
|
318
310
|
const bnMaxXCM = new _util.BN(altInputTokenBalance.value).sub(xcmFee.mul(new _util.BN(_constants.XCM_FEE_RATIO)));
|
|
319
|
-
const inputTokenDecimal = (0,
|
|
311
|
+
const inputTokenDecimal = (0, _utils3._getAssetDecimals)(inputTokenInfo);
|
|
320
312
|
const maxBn = bnInputTokenBalance.add(new _util.BN(altInputTokenBalance.value)).sub(xcmFee).sub(xcmFee);
|
|
321
|
-
const maxValue = (0,
|
|
322
|
-
const maxXCMValue = (0,
|
|
323
|
-
const symbol = (0,
|
|
313
|
+
const maxValue = (0, _utils4.formatNumber)(maxBn.toString(), inputTokenInfo.decimals || 0);
|
|
314
|
+
const maxXCMValue = (0, _utils4.formatNumber)(bnMaxXCM.toString(), inputTokenDecimal);
|
|
315
|
+
const symbol = (0, _utils3._getAssetSymbol)(altInputTokenInfo);
|
|
324
316
|
const inputNetworkName = this.chainInfo.name;
|
|
325
|
-
const altNetworkName = (0,
|
|
326
|
-
const currentValue = (0,
|
|
317
|
+
const altNetworkName = (0, _utils3._getAssetName)(altInputTokenInfo);
|
|
318
|
+
const currentValue = (0, _utils4.formatNumber)(bnInputTokenBalance.toString(), inputTokenDecimal);
|
|
327
319
|
processValidation.message = (0, _i18next.t)('You can only enter a maximum of {{maxValue}} {{symbol}}, which is {{currentValue}} {{symbol}} ({{inputNetworkName}}) and {{maxXCMValue}} {{symbol}} ({{altNetworkName}}). Lower your amount and try again.', {
|
|
328
320
|
replace: {
|
|
329
321
|
symbol,
|
|
@@ -379,7 +371,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
379
371
|
processValidation.failedStep = path.steps[id];
|
|
380
372
|
processValidation.ok = false;
|
|
381
373
|
processValidation.status = _types.YieldValidationStatus.NOT_ENOUGH_BALANCE;
|
|
382
|
-
const maxString = (0,
|
|
374
|
+
const maxString = (0, _utils4.formatNumber)(bnInputTokenBalance.toString(), inputTokenInfo.decimals || 0);
|
|
383
375
|
if (maxString !== '0') {
|
|
384
376
|
processValidation.message = (0, _i18next.t)('Amount must be equal or less than {{number}}', {
|
|
385
377
|
replace: {
|
|
@@ -443,7 +435,7 @@ class BaseSpecialStakingPoolHandler extends _base.default {
|
|
|
443
435
|
const altInputTokenSlug = this.altInputAsset || '';
|
|
444
436
|
const altInputTokenInfo = this.state.getAssetBySlug(altInputTokenSlug);
|
|
445
437
|
const originChainInfo = this.state.getChainInfo(altInputTokenInfo.originChain);
|
|
446
|
-
const originTokenSlug = (0,
|
|
438
|
+
const originTokenSlug = (0, _utils3._getChainNativeTokenSlug)(originChainInfo);
|
|
447
439
|
const originTokenInfo = this.state.getAssetBySlug(originTokenSlug);
|
|
448
440
|
const destinationTokenInfo = this.state.getAssetBySlug(destinationTokenSlug);
|
|
449
441
|
const substrateApi = this.state.getSubstrateApi(originChainInfo.slug);
|
|
@@ -13,12 +13,13 @@ var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
|
|
|
13
13
|
var _utils = require("@subwallet/extension-base/core/utils");
|
|
14
14
|
var _xcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm");
|
|
15
15
|
var _acrossBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge");
|
|
16
|
-
var _utils2 = require("@subwallet/extension-base/services/
|
|
17
|
-
var _utils3 = require("@subwallet/extension-base/services/
|
|
16
|
+
var _utils2 = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
|
|
17
|
+
var _utils3 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
18
|
+
var _utils4 = require("@subwallet/extension-base/services/swap-service/utils");
|
|
18
19
|
var _types = require("@subwallet/extension-base/types");
|
|
19
20
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
20
21
|
var _swap = require("@subwallet/extension-base/types/swap");
|
|
21
|
-
var
|
|
22
|
+
var _utils5 = require("@subwallet/extension-base/utils");
|
|
22
23
|
var _getId = require("@subwallet/extension-base/utils/getId");
|
|
23
24
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
24
25
|
var _i18next = require("i18next");
|
|
@@ -97,12 +98,12 @@ class SwapBaseHandler {
|
|
|
97
98
|
throw Error('Token or chain not found');
|
|
98
99
|
}
|
|
99
100
|
let recipientAddress;
|
|
100
|
-
const senderAddress = (0,
|
|
101
|
+
const senderAddress = (0, _utils5._reformatAddressWithChain)(address, fromChainInfo);
|
|
101
102
|
if (stepIndex === 0) {
|
|
102
|
-
recipientAddress = (0,
|
|
103
|
+
recipientAddress = (0, _utils5._reformatAddressWithChain)(address, toChainInfo);
|
|
103
104
|
} else {
|
|
104
105
|
// bridge after swap
|
|
105
|
-
recipientAddress = (0,
|
|
106
|
+
recipientAddress = (0, _utils5._reformatAddressWithChain)(recipient || address, toChainInfo);
|
|
106
107
|
}
|
|
107
108
|
if (!(0, _xcmParser._isXcmWithinSameConsensus)(fromChainInfo, toChainInfo) || (0, _xcmParser._isSnowBridgeXcm)(fromChainInfo, toChainInfo) || (0, _xcmParser._isAcrossBridgeXcm)(fromChainInfo, toChainInfo)) {
|
|
108
109
|
return undefined;
|
|
@@ -129,21 +130,25 @@ class SwapBaseHandler {
|
|
|
129
130
|
};
|
|
130
131
|
|
|
131
132
|
// TODO: calculate fee for destination chain
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
const xcmFeeInfo = await (0, _utils2.estimateXcmFee)({
|
|
134
|
+
fromChainInfo: xcmRequest.originChain,
|
|
135
|
+
fromTokenInfo: xcmRequest.originTokenInfo,
|
|
136
|
+
toChainInfo: xcmRequest.destinationChain,
|
|
137
|
+
recipient: xcmRequest.recipient,
|
|
138
|
+
sender: xcmRequest.sender,
|
|
139
|
+
value: xcmRequest.sendingValue
|
|
140
|
+
});
|
|
141
|
+
const estimatedBridgeFee = (0, _bignumber.default)((xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : xcmFeeInfo.origin.fee) || '0').multipliedBy(_utils4.FEE_RATE_MULTIPLIER.medium).toFixed(0, 1);
|
|
137
142
|
const fee = {
|
|
138
143
|
feeComponent: [{
|
|
139
144
|
feeType: _swap.SwapFeeType.NETWORK_FEE,
|
|
140
145
|
amount: estimatedBridgeFee,
|
|
141
|
-
tokenSlug: (0,
|
|
146
|
+
tokenSlug: (0, _utils3._getChainNativeTokenSlug)(fromChainInfo)
|
|
142
147
|
}],
|
|
143
|
-
defaultFeeToken: (0,
|
|
144
|
-
feeOptions: [(0,
|
|
148
|
+
defaultFeeToken: (0, _utils3._getChainNativeTokenSlug)(fromChainInfo),
|
|
149
|
+
feeOptions: [(0, _utils3._getChainNativeTokenSlug)(fromChainInfo)]
|
|
145
150
|
};
|
|
146
|
-
const isBridgeNativeToken = (0,
|
|
151
|
+
const isBridgeNativeToken = (0, _utils3._isNativeToken)(fromTokenInfo);
|
|
147
152
|
let bnSendingValue;
|
|
148
153
|
let expectedReceive;
|
|
149
154
|
const actionList = JSON.stringify(path.map(step => step.action));
|
|
@@ -156,30 +161,30 @@ class SwapBaseHandler {
|
|
|
156
161
|
expectedReceive = fromAmount;
|
|
157
162
|
bnSendingValue = (0, _bignumber.default)(fromAmount);
|
|
158
163
|
if (needEditAmount) {
|
|
159
|
-
bnSendingValue = bnSendingValue.multipliedBy(
|
|
164
|
+
bnSendingValue = bnSendingValue.multipliedBy(_utils4.DEFAULT_EXCESS_AMOUNT_WEIGHT);
|
|
160
165
|
expectedReceive = bnSendingValue.toFixed(0, 1);
|
|
161
166
|
}
|
|
162
167
|
if (isBridgeNativeToken) {
|
|
163
168
|
bnSendingValue = bnSendingValue.plus((0, _bignumber.default)(estimatedBridgeFee));
|
|
164
169
|
} else {
|
|
165
|
-
bnSendingValue = bnSendingValue.plus((0, _bignumber.default)((0,
|
|
170
|
+
bnSendingValue = bnSendingValue.plus((0, _bignumber.default)((0, _utils3._getTokenMinAmount)(toTokenInfo)).multipliedBy(_utils4.FEE_RATE_MULTIPLIER.medium)).plus((0, _utils3._getTokenMinAmount)(toTokenInfo));
|
|
166
171
|
}
|
|
167
172
|
if ((0, _bignumber.default)(toTokenBalance.value).lte(0)) {
|
|
168
|
-
bnSendingValue = bnSendingValue.plus((0,
|
|
173
|
+
bnSendingValue = bnSendingValue.plus((0, _utils3._getTokenMinAmount)(toTokenInfo));
|
|
169
174
|
}
|
|
170
175
|
} else {
|
|
171
176
|
// bridge after swap
|
|
172
177
|
expectedReceive = selectedQuote.toAmount;
|
|
173
178
|
if (needEditAmount) {
|
|
174
|
-
bnSendingValue = (0, _bignumber.default)(selectedQuote.toAmount).multipliedBy(
|
|
179
|
+
bnSendingValue = (0, _bignumber.default)(selectedQuote.toAmount).multipliedBy(_utils4.DEFAULT_EXCESS_AMOUNT_WEIGHT); // need to round
|
|
175
180
|
} else {
|
|
176
181
|
// todo: remove
|
|
177
182
|
console.log('The code cannot run into here, if it runs into here, pls ask dev to check');
|
|
178
183
|
bnSendingValue = (0, _bignumber.default)(selectedQuote.toAmount);
|
|
179
184
|
}
|
|
180
185
|
}
|
|
181
|
-
if (toTokenInfo.originChain === 'mythos' && (0,
|
|
182
|
-
bnSendingValue = bnSendingValue.plus((0, _bignumber.default)(2.5).shiftedBy((0,
|
|
186
|
+
if (toTokenInfo.originChain === 'mythos' && (0, _utils3._isNativeToken)(toTokenInfo)) {
|
|
187
|
+
bnSendingValue = bnSendingValue.plus((0, _bignumber.default)(2.5).shiftedBy((0, _utils3._getAssetDecimals)(toTokenInfo)));
|
|
183
188
|
}
|
|
184
189
|
const step = {
|
|
185
190
|
// @ts-ignore
|
|
@@ -248,7 +253,7 @@ class SwapBaseHandler {
|
|
|
248
253
|
return {
|
|
249
254
|
txChain: originAsset.originChain,
|
|
250
255
|
extrinsic,
|
|
251
|
-
transferNativeAmount: (0,
|
|
256
|
+
transferNativeAmount: (0, _utils3._isNativeToken)(originAsset) ? briefXcmStep.sendingValue : '0',
|
|
252
257
|
extrinsicType: _KoniTypes.ExtrinsicType.TRANSFER_XCM,
|
|
253
258
|
chainType: _KoniTypes.ChainType.SUBSTRATE,
|
|
254
259
|
txData: xcmData
|
|
@@ -291,7 +296,7 @@ class SwapBaseHandler {
|
|
|
291
296
|
return {
|
|
292
297
|
txChain: originTokenInfo.originChain,
|
|
293
298
|
extrinsic: tx,
|
|
294
|
-
transferNativeAmount: (0,
|
|
299
|
+
transferNativeAmount: (0, _utils3._isNativeToken)(originTokenInfo) ? bridgeStep.sendingValue : '0',
|
|
295
300
|
extrinsicType: _KoniTypes.ExtrinsicType.TRANSFER_XCM,
|
|
296
301
|
chainType: _KoniTypes.ChainType.EVM,
|
|
297
302
|
txData: txData
|
|
@@ -313,14 +318,14 @@ class SwapBaseHandler {
|
|
|
313
318
|
return [];
|
|
314
319
|
}
|
|
315
320
|
async validateBridgeStep(receiver, fromToken, toToken, selectedFeeToken, toChainNativeToken, bnBridgeAmount, bnFromTokenBalance, bnBridgeFeeAmount, bnFeeTokenBalance, bnBridgeDeliveryFee) {
|
|
316
|
-
const minBridgeAmountRequired = new _bignumber.default((0,
|
|
321
|
+
const minBridgeAmountRequired = new _bignumber.default((0, _utils3._getTokenMinAmount)(toToken)).multipliedBy(_utils4.FEE_RATE_MULTIPLIER.high);
|
|
317
322
|
const spendingAndFeePaymentValidation = (0, _logicValidation.validateSpendingAndFeePayment)(fromToken, selectedFeeToken, bnBridgeAmount, bnFromTokenBalance, bnBridgeFeeAmount, bnFeeTokenBalance);
|
|
318
323
|
if (spendingAndFeePaymentValidation.length > 0) {
|
|
319
324
|
return spendingAndFeePaymentValidation;
|
|
320
325
|
}
|
|
321
326
|
if (bnBridgeAmount.lte(minBridgeAmountRequired.plus(bnBridgeDeliveryFee))) {
|
|
322
|
-
const atLeastStr = (0,
|
|
323
|
-
maxNumberFormat: (0,
|
|
327
|
+
const atLeastStr = (0, _utils5.formatNumber)(minBridgeAmountRequired.plus(bnBridgeDeliveryFee), (0, _utils3._getAssetDecimals)(toToken), _utils5.balanceFormatter, {
|
|
328
|
+
maxNumberFormat: (0, _utils3._getAssetDecimals)(toToken) || 6
|
|
324
329
|
});
|
|
325
330
|
return [new _TransactionError.TransactionError(_types.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}} {{symbol}} to keep the destination account alive', {
|
|
326
331
|
replace: {
|
|
@@ -329,7 +334,7 @@ class SwapBaseHandler {
|
|
|
329
334
|
}
|
|
330
335
|
}))];
|
|
331
336
|
}
|
|
332
|
-
const isAcrossBridge = (0, _acrossBridge._isAcrossChainBridge)((0,
|
|
337
|
+
const isAcrossBridge = (0, _acrossBridge._isAcrossChainBridge)((0, _utils3._getAssetOriginChain)(fromToken), (0, _utils3._getAssetOriginChain)(toToken));
|
|
333
338
|
if (!isAcrossBridge) {
|
|
334
339
|
// By here, we know that the user is receiving a valid amount of toToken
|
|
335
340
|
const toChainApi = this.chainService.getSubstrateApi(toToken.originChain);
|
|
@@ -340,7 +345,7 @@ class SwapBaseHandler {
|
|
|
340
345
|
|
|
341
346
|
// Only need to check if account is alive with the receiving toToken
|
|
342
347
|
const isToTokenSufficient = await (0, _utils._isSufficientToken)(toToken, toChainApi, sufficientChain);
|
|
343
|
-
if (!isToTokenSufficient && !(0,
|
|
348
|
+
if (!isToTokenSufficient && !(0, _utils3._isNativeToken)(toToken)) {
|
|
344
349
|
// sending token cannot keep account alive, must check with native token
|
|
345
350
|
const toChainNativeTokenBalance = await this.balanceService.getTotalBalance(receiver, toToken.originChain, toChainNativeToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
|
|
346
351
|
if (!(0, _systemPallet._isAccountActive)(toChainNativeTokenBalance.metadata)) {
|
|
@@ -361,20 +366,20 @@ class SwapBaseHandler {
|
|
|
361
366
|
if (spendingAndFeePaymentValidation.length > 0) {
|
|
362
367
|
return spendingAndFeePaymentValidation;
|
|
363
368
|
}
|
|
364
|
-
if (bnExpectedReceivingAmount.lte((0,
|
|
365
|
-
const atLeastStr = (0,
|
|
366
|
-
maxNumberFormat: (0,
|
|
369
|
+
if (bnExpectedReceivingAmount.lte((0, _utils3._getTokenMinAmount)(receivingToken))) {
|
|
370
|
+
const atLeastStr = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(receivingToken), (0, _utils3._getAssetDecimals)(receivingToken), _utils5.balanceFormatter, {
|
|
371
|
+
maxNumberFormat: (0, _utils3._getAssetDecimals)(receivingToken) || 6
|
|
367
372
|
});
|
|
368
373
|
return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)('You can\'t receive less than {{number}} {{symbol}}', {
|
|
369
374
|
replace: {
|
|
370
375
|
number: atLeastStr,
|
|
371
|
-
symbol: (0,
|
|
376
|
+
symbol: (0, _utils3._getAssetSymbol)(receivingToken)
|
|
372
377
|
}
|
|
373
378
|
}))];
|
|
374
379
|
}
|
|
375
380
|
if (recipient) {
|
|
376
381
|
const isEvmAddress = (0, _utilCrypto.isEthereumAddress)(recipient);
|
|
377
|
-
const isEvmDestChain = (0,
|
|
382
|
+
const isEvmDestChain = (0, _utils3._isChainEvmCompatible)(swapToChain);
|
|
378
383
|
if (isEvmAddress !== isEvmDestChain) {
|
|
379
384
|
// todo: update condition if support swap chain # EVM or Substrate
|
|
380
385
|
return [new _TransactionError.TransactionError(_swap.SwapErrorType.INVALID_RECIPIENT)];
|
|
@@ -442,8 +447,8 @@ class SwapBaseHandler {
|
|
|
442
447
|
const bridgeSelectedFeeToken = this.chainService.getAssetBySlug(currentFee.selectedFeeToken || currentFee.defaultFeeToken);
|
|
443
448
|
const bnBridgeDeliveryFee = (0, _bignumber.default)(0); // todo
|
|
444
449
|
|
|
445
|
-
const bridgeSender = (0,
|
|
446
|
-
const bridgeReceiver = (0,
|
|
450
|
+
const bridgeSender = (0, _utils5._reformatAddressWithChain)(xcmMetadata.sender, this.chainService.getChainInfoByKey(bridgeFromToken.originChain));
|
|
451
|
+
const bridgeReceiver = (0, _utils5._reformatAddressWithChain)((_xcmMetadata$receiver = xcmMetadata.receiver) !== null && _xcmMetadata$receiver !== void 0 ? _xcmMetadata$receiver : bridgeSender, this.chainService.getChainInfoByKey(bridgeToToken.originChain));
|
|
447
452
|
const [bridgeFromTokenBalance, bridgeFeeTokenBalance] = await Promise.all([this.balanceService.getTransferableBalance(bridgeSender, bridgeFromToken.originChain, bridgeFromToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM), this.balanceService.getTransferableBalance(bridgeSender, bridgeFromToken.originChain, bridgeSelectedFeeToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM)]);
|
|
448
453
|
|
|
449
454
|
// Native token balance has already accounted for ED aka strict mode
|
|
@@ -487,11 +492,11 @@ class SwapBaseHandler {
|
|
|
487
492
|
if (bnSwapValue.gt(bnBridgeAmount)) {
|
|
488
493
|
return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR)];
|
|
489
494
|
}
|
|
490
|
-
if (bnSwapValue.lte((0,
|
|
491
|
-
const atLeastString = (0,
|
|
492
|
-
maxNumberFormat: (0,
|
|
495
|
+
if (bnSwapValue.lte((0, _utils3._getTokenMinAmount)(swapToken))) {
|
|
496
|
+
const atLeastString = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(swapToken), (0, _utils3._getAssetDecimals)(swapToken), _utils5.balanceFormatter, {
|
|
497
|
+
maxNumberFormat: (0, _utils3._getAssetDecimals)(swapToken) || 6
|
|
493
498
|
});
|
|
494
|
-
return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0,
|
|
499
|
+
return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0, _utils3._getAssetSymbol)(swapToken)} and try again`))];
|
|
495
500
|
}
|
|
496
501
|
const swapFeeToken = this.chainService.getAssetBySlug(swapFee.selectedFeeToken || swapFee.defaultFeeToken);
|
|
497
502
|
const swapToChain = this.chainService.getChainInfoByKey(swapMetadata.destinationTokenInfo.originChain);
|
|
@@ -530,11 +535,11 @@ class SwapBaseHandler {
|
|
|
530
535
|
const bnSwapReceivingAmount = (0, _bignumber.default)(swapMetadata.expectedReceive);
|
|
531
536
|
const bnSwapValue = (0, _bignumber.default)(swapMetadata.sendingValue);
|
|
532
537
|
const bnSwapFeeAmount = (0, _bignumber.default)(swapNetworkFee.amount);
|
|
533
|
-
if (bnSwapValue.lte((0,
|
|
534
|
-
const atLeastString = (0,
|
|
535
|
-
maxNumberFormat: (0,
|
|
538
|
+
if (bnSwapValue.lte((0, _utils3._getTokenMinAmount)(swapToken))) {
|
|
539
|
+
const atLeastString = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(swapToken), (0, _utils3._getAssetDecimals)(swapToken), _utils5.balanceFormatter, {
|
|
540
|
+
maxNumberFormat: (0, _utils3._getAssetDecimals)(swapToken) || 6
|
|
536
541
|
});
|
|
537
|
-
return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0,
|
|
542
|
+
return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0, _utils3._getAssetSymbol)(swapToken)} and try again`))];
|
|
538
543
|
}
|
|
539
544
|
const swapFeeToken = this.chainService.getAssetBySlug(swapFee.selectedFeeToken || swapFee.defaultFeeToken);
|
|
540
545
|
const swapToChain = this.chainService.getChainInfoByKey(swapMetadata.destinationTokenInfo.originChain);
|
|
@@ -573,8 +578,8 @@ class SwapBaseHandler {
|
|
|
573
578
|
const bridgeSelectedFeeToken = this.chainService.getAssetBySlug(currentFee.selectedFeeToken || currentFee.defaultFeeToken);
|
|
574
579
|
const bnBridgeDeliveryFee = (0, _bignumber.default)(0); // todo
|
|
575
580
|
|
|
576
|
-
const bridgeSender = (0,
|
|
577
|
-
const bridgeReceiver = (0,
|
|
581
|
+
const bridgeSender = (0, _utils5._reformatAddressWithChain)(xcmMetadata.sender, this.chainService.getChainInfoByKey(bridgeFromToken.originChain));
|
|
582
|
+
const bridgeReceiver = (0, _utils5._reformatAddressWithChain)((_xcmMetadata$receiver2 = xcmMetadata.receiver) !== null && _xcmMetadata$receiver2 !== void 0 ? _xcmMetadata$receiver2 : bridgeSender, this.chainService.getChainInfoByKey(bridgeToToken.originChain));
|
|
578
583
|
const [bridgeFromTokenBalance, bridgeFeeTokenBalance] = await Promise.all([this.balanceService.getTransferableBalance(bridgeSender, bridgeFromToken.originChain, bridgeFromToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM), this.balanceService.getTransferableBalance(bridgeSender, bridgeFromToken.originChain, bridgeSelectedFeeToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM)]);
|
|
579
584
|
|
|
580
585
|
// Native token balance has already accounted for ED aka strict mode
|
|
@@ -612,8 +617,8 @@ class SwapBaseHandler {
|
|
|
612
617
|
const bridgeSelectedFeeToken = this.chainService.getAssetBySlug(bridgeFee.selectedFeeToken || bridgeFee.defaultFeeToken);
|
|
613
618
|
const bnBridgeDeliveryFee = (0, _bignumber.default)(0); // todo
|
|
614
619
|
|
|
615
|
-
const bridgeSender = (0,
|
|
616
|
-
const bridgeReceiver = (0,
|
|
620
|
+
const bridgeSender = (0, _utils5._reformatAddressWithChain)(bridgeMetadata.sender, this.chainService.getChainInfoByKey(bridgeFromToken.originChain));
|
|
621
|
+
const bridgeReceiver = (0, _utils5._reformatAddressWithChain)((_bridgeMetadata$recei = bridgeMetadata.receiver) !== null && _bridgeMetadata$recei !== void 0 ? _bridgeMetadata$recei : bridgeSender, this.chainService.getChainInfoByKey(bridgeToToken.originChain));
|
|
617
622
|
const [bridgeFromTokenBalance, bridgeFeeTokenBalance] = await Promise.all([this.balanceService.getTransferableBalance(bridgeSender, bridgeFromToken.originChain, bridgeFromToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM), this.balanceService.getTransferableBalance(bridgeSender, bridgeFromToken.originChain, bridgeSelectedFeeToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM)]);
|
|
618
623
|
|
|
619
624
|
// Native token balance has already accounted for ED aka strict mode
|
|
@@ -657,11 +662,11 @@ class SwapBaseHandler {
|
|
|
657
662
|
if (bnSwapValue.gt(bnBridgeAmount)) {
|
|
658
663
|
return [new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR)];
|
|
659
664
|
}
|
|
660
|
-
if (bnSwapValue.lte((0,
|
|
661
|
-
const atLeastString = (0,
|
|
662
|
-
maxNumberFormat: (0,
|
|
665
|
+
if (bnSwapValue.lte((0, _utils3._getTokenMinAmount)(swapToken))) {
|
|
666
|
+
const atLeastString = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(swapToken), (0, _utils3._getAssetDecimals)(swapToken), _utils5.balanceFormatter, {
|
|
667
|
+
maxNumberFormat: (0, _utils3._getAssetDecimals)(swapToken) || 6
|
|
663
668
|
});
|
|
664
|
-
return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0,
|
|
669
|
+
return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0, _utils3._getAssetSymbol)(swapToken)} and try again`))];
|
|
665
670
|
}
|
|
666
671
|
const swapFeeToken = this.chainService.getAssetBySlug(swapFee.selectedFeeToken || swapFee.defaultFeeToken);
|
|
667
672
|
const swapToChain = this.chainService.getChainInfoByKey(swapMetadata.destinationTokenInfo.originChain);
|
|
@@ -700,8 +705,8 @@ class SwapBaseHandler {
|
|
|
700
705
|
const transitSelectedFeeToken = this.chainService.getAssetBySlug(transitTotalFee.selectedFeeToken || transitTotalFee.defaultFeeToken);
|
|
701
706
|
const bnTransitDeliveryFee = (0, _bignumber.default)(0); // todo
|
|
702
707
|
|
|
703
|
-
const transitSender = (0,
|
|
704
|
-
const transitReceiver = (0,
|
|
708
|
+
const transitSender = (0, _utils5._reformatAddressWithChain)(transitMetadata.sender, this.chainService.getChainInfoByKey(transitFromToken.originChain));
|
|
709
|
+
const transitReceiver = (0, _utils5._reformatAddressWithChain)((_transitMetadata$rece = transitMetadata.receiver) !== null && _transitMetadata$rece !== void 0 ? _transitMetadata$rece : transitSender, this.chainService.getChainInfoByKey(transitToToken.originChain));
|
|
705
710
|
const [transitFromTokenBalance, transitFeeTokenBalance] = await Promise.all([this.balanceService.getTransferableBalance(transitSender, transitFromToken.originChain, transitFromToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM), this.balanceService.getTransferableBalance(transitSender, transitFromToken.originChain, transitSelectedFeeToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_XCM)]);
|
|
706
711
|
|
|
707
712
|
// Native token balance has already accounted for ED aka strict mode
|