@multiversx/sdk-dapp-liquidity 1.1.0-alpha.13 → 1.1.0-alpha.15
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/index.js +1 -1
- package/index.mjs +1 -1
- package/package.json +1 -1
- package/reactjs/components/BridgeForm/BridgeForm.js +114 -61
- package/reactjs/components/BridgeForm/BridgeForm.mjs +114 -61
- package/reactjs/components/TokenSelector/TokenSelector.d.ts +2 -1
- package/reactjs/components/TokenSelector/TokenSelector.js +12 -9
- package/reactjs/components/TokenSelector/TokenSelector.mjs +12 -9
- package/reactjs/components/TokenSelector/components/ChainSelect/ChainSelect.d.ts +2 -1
- package/reactjs/components/TokenSelector/components/ChainSelect/ChainSelect.js +4 -0
- package/reactjs/components/TokenSelector/components/ChainSelect/ChainSelect.mjs +4 -0
- package/reactjs/components/TokenSelector/components/SelectContent.d.ts +2 -1
- package/reactjs/components/TokenSelector/components/SelectContent.js +4 -1
- package/reactjs/components/TokenSelector/components/SelectContent.mjs +4 -1
- package/reactjs/components/TokenSelector/components/TokenItem.js +0 -5
- package/reactjs/components/TokenSelector/components/TokenItem.mjs +0 -5
- package/reactjs/hooks/index.js +1 -1
- package/reactjs/hooks/index.mjs +1 -1
- package/reactjs/hooks/useBalances.js +2 -1
- package/reactjs/hooks/useBalances.mjs +2 -1
- package/reactjs/hooks/useSignTransaction.d.ts +80 -67
- package/reactjs/hooks/useSignTransaction.js +40 -4
- package/reactjs/hooks/useSignTransaction.mjs +40 -4
- package/reactjs/index.js +1 -1
- package/reactjs/index.mjs +1 -1
- package/reactjs/init/init.js +0 -10
- package/reactjs/init/init.mjs +0 -10
- package/reactjs/queries/useGetEvmTokensBalances.query.js +3 -1
- package/reactjs/queries/useGetEvmTokensBalances.query.mjs +3 -1
- package/types/transaction.d.ts +19 -0
- package/{useBalances-MNOkt0CT.mjs → useBalances-CvRCOieR.mjs} +1 -2
- package/{useBalances-QuJwkRzs.js → useBalances-Ds5d90Cc.js} +1 -2
package/index.js
CHANGED
|
@@ -53,7 +53,7 @@ const reactjs_hooks_validation_useSecondAmountSchema = require("./reactjs/hooks/
|
|
|
53
53
|
const reactjs_hooks_validation_useTestHasEnoughFunds = require("./reactjs/hooks/validation/useTestHasEnoughFunds.js");
|
|
54
54
|
const reactjs_hooks_validation_useTestIsConnected = require("./reactjs/hooks/validation/useTestIsConnected.js");
|
|
55
55
|
const reactjs_hooks_useAccount = require("./reactjs/hooks/useAccount.js");
|
|
56
|
-
const reactjs_hooks_useBalances = require("./useBalances-
|
|
56
|
+
const reactjs_hooks_useBalances = require("./useBalances-Ds5d90Cc.js");
|
|
57
57
|
const reactjs_hooks_useBridgeFormik = require("./reactjs/hooks/useBridgeFormik.js");
|
|
58
58
|
const reactjs_hooks_useDebounce = require("./reactjs/hooks/useDebounce.js");
|
|
59
59
|
const reactjs_hooks_useFetchBridgeData = require("./reactjs/hooks/useFetchBridgeData.js");
|
package/index.mjs
CHANGED
|
@@ -50,7 +50,7 @@ import { useSecondAmountSchema } from "./reactjs/hooks/validation/useSecondAmoun
|
|
|
50
50
|
import { useTestHasEnoughFunds } from "./reactjs/hooks/validation/useTestHasEnoughFunds.mjs";
|
|
51
51
|
import { useTestIsConnected } from "./reactjs/hooks/validation/useTestIsConnected.mjs";
|
|
52
52
|
import { useAccount } from "./reactjs/hooks/useAccount.mjs";
|
|
53
|
-
import { u } from "./useBalances-
|
|
53
|
+
import { u } from "./useBalances-CvRCOieR.mjs";
|
|
54
54
|
import { BridgeFormikValuesEnum, useBridgeFormik } from "./reactjs/hooks/useBridgeFormik.mjs";
|
|
55
55
|
import { useDebounce } from "./reactjs/hooks/useDebounce.mjs";
|
|
56
56
|
import { useFetchBridgeData } from "./reactjs/hooks/useFetchBridgeData.mjs";
|
package/package.json
CHANGED
|
@@ -9,6 +9,7 @@ const debounce = require("lodash/debounce");
|
|
|
9
9
|
const React = require("react");
|
|
10
10
|
const reactToastify = require("react-toastify");
|
|
11
11
|
const helpers_getApiURL = require("../../../helpers/getApiURL.js");
|
|
12
|
+
const types_chainType = require("../../../types/chainType.js");
|
|
12
13
|
const reactjs_constants_index = require("../../constants/index.js");
|
|
13
14
|
const reactjs_context_useWeb3App = require("../../context/useWeb3App.js");
|
|
14
15
|
const reactjs_hooks_useAccount = require("../../hooks/useAccount.js");
|
|
@@ -43,7 +44,7 @@ const reactjs_components_Connect_MvxAccountDisplay = require("../Connect/MvxAcco
|
|
|
43
44
|
const reactjs_components_TokenSelector_TokenSelector = require("../TokenSelector/TokenSelector.js");
|
|
44
45
|
const viem = require("viem");
|
|
45
46
|
const actions = require("viem/actions");
|
|
46
|
-
const reactjs_hooks_useBalances = require("../../../useBalances-
|
|
47
|
+
const reactjs_hooks_useBalances = require("../../../useBalances-Ds5d90Cc.js");
|
|
47
48
|
function deepEqual(a, b) {
|
|
48
49
|
if (a === b)
|
|
49
50
|
return true;
|
|
@@ -163,7 +164,7 @@ const BridgeForm = ({
|
|
|
163
164
|
(chain) => chain.chainId.toString() === mvxChainId.toString()
|
|
164
165
|
);
|
|
165
166
|
}, [chainId, chains]);
|
|
166
|
-
const {
|
|
167
|
+
const { evm, solana } = reactjs_hooks_useSignTransaction.useSignTransaction();
|
|
167
168
|
const sendTransactions = reactjs_hooks_useSendTransactions.useSendTransactions();
|
|
168
169
|
const {
|
|
169
170
|
mutate: getRate,
|
|
@@ -188,15 +189,30 @@ const BridgeForm = ({
|
|
|
188
189
|
})) ?? [],
|
|
189
190
|
[evmTokensWithBalances]
|
|
190
191
|
);
|
|
192
|
+
const availableTokens = React.useMemo(() => {
|
|
193
|
+
if (!(firstToken == null ? void 0 : firstToken.availableTokens)) {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
const foundTokens = [];
|
|
197
|
+
for (const availableToken of firstToken.availableTokens) {
|
|
198
|
+
const foundToken = mvxTokensWithBalances == null ? void 0 : mvxTokensWithBalances.find(
|
|
199
|
+
(mvxToken) => mvxToken.address === availableToken.address
|
|
200
|
+
);
|
|
201
|
+
if (foundToken) {
|
|
202
|
+
foundTokens.push(foundToken);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return foundTokens;
|
|
206
|
+
}, [mvxTokensWithBalances, firstToken == null ? void 0 : firstToken.availableTokens]);
|
|
191
207
|
const toOptions = React.useMemo(
|
|
192
|
-
() => (
|
|
208
|
+
() => (availableTokens && availableTokens.map((token) => {
|
|
193
209
|
return {
|
|
194
210
|
...token,
|
|
195
211
|
identifier: token.address,
|
|
196
212
|
ticker: token.symbol
|
|
197
213
|
};
|
|
198
214
|
})) ?? [],
|
|
199
|
-
[
|
|
215
|
+
[availableTokens]
|
|
200
216
|
);
|
|
201
217
|
const selectedChainOption = React.useMemo(
|
|
202
218
|
() => (chains == null ? void 0 : chains.find(
|
|
@@ -204,13 +220,9 @@ const BridgeForm = ({
|
|
|
204
220
|
)) ?? (chains == null ? void 0 : chains[0]),
|
|
205
221
|
[activeChain == null ? void 0 : activeChain.id, chains]
|
|
206
222
|
);
|
|
207
|
-
console.log({
|
|
208
|
-
chains,
|
|
209
|
-
selectedChainOption
|
|
210
|
-
});
|
|
211
223
|
const defaultReceivingToken = React.useMemo(
|
|
212
|
-
() => toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
|
|
213
|
-
[toOptions]
|
|
224
|
+
() => (availableTokens == null ? void 0 : availableTokens[0]) ?? toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
|
|
225
|
+
[toOptions, availableTokens]
|
|
214
226
|
);
|
|
215
227
|
const hasAmounts = firstAmount !== "" && secondAmount !== "";
|
|
216
228
|
const fetchRateDebounced = React.useCallback(
|
|
@@ -354,15 +366,18 @@ const BridgeForm = ({
|
|
|
354
366
|
if (hasOptionsSelected) {
|
|
355
367
|
return;
|
|
356
368
|
}
|
|
357
|
-
if (
|
|
358
|
-
|
|
369
|
+
if (firstOption) {
|
|
370
|
+
setFirstToken(firstOption);
|
|
371
|
+
updateUrlParams({
|
|
372
|
+
firstTokenId: firstOption == null ? void 0 : firstOption.address
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
if (secondOption) {
|
|
376
|
+
setSecondToken(secondOption);
|
|
377
|
+
updateUrlParams({
|
|
378
|
+
secondTokenId: secondOption == null ? void 0 : secondOption.address
|
|
379
|
+
});
|
|
359
380
|
}
|
|
360
|
-
setFirstToken(firstOption);
|
|
361
|
-
setSecondToken(secondOption);
|
|
362
|
-
updateUrlParams({
|
|
363
|
-
firstTokenId: firstOption == null ? void 0 : firstOption.address,
|
|
364
|
-
secondTokenId: secondOption == null ? void 0 : secondOption.address
|
|
365
|
-
});
|
|
366
381
|
};
|
|
367
382
|
const onSubmit = React.useCallback(
|
|
368
383
|
async ({
|
|
@@ -373,51 +388,82 @@ const BridgeForm = ({
|
|
|
373
388
|
setPendingSigning(true);
|
|
374
389
|
setSigningTransactionsCount(() => transactions.length);
|
|
375
390
|
try {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
})
|
|
390
|
-
|
|
391
|
-
()
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
391
|
+
switch (selectedChainOption == null ? void 0 : selectedChainOption.chainType) {
|
|
392
|
+
case types_chainType.ChainType.sol:
|
|
393
|
+
try {
|
|
394
|
+
for (const transaction of transactions) {
|
|
395
|
+
if (!transaction.instructions || !transaction.feePayer) {
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
await solana.signTransaction({
|
|
399
|
+
feePayer: transaction.feePayer,
|
|
400
|
+
instructions: transaction.instructions
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
setPendingSigning(false);
|
|
404
|
+
} catch (e) {
|
|
405
|
+
reactToastify.toast.dismiss();
|
|
406
|
+
reactToastify.toast.error("Transaction aborted");
|
|
407
|
+
onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
|
|
408
|
+
setPendingSigning(false);
|
|
409
|
+
return;
|
|
395
410
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
411
|
+
break;
|
|
412
|
+
case types_chainType.ChainType.evm:
|
|
413
|
+
let txIndex = -1;
|
|
414
|
+
for (const transaction of transactions) {
|
|
415
|
+
++txIndex;
|
|
416
|
+
try {
|
|
417
|
+
const txHash = await evm.signTransaction({
|
|
418
|
+
...transaction,
|
|
419
|
+
value: BigInt(transaction.value),
|
|
420
|
+
gas: BigInt(transaction.gasLimit),
|
|
421
|
+
account: bridgeAddress
|
|
422
|
+
});
|
|
423
|
+
signedTransactions.push({
|
|
424
|
+
...transaction,
|
|
425
|
+
txHash
|
|
426
|
+
});
|
|
427
|
+
setSigningTransactionsCount(
|
|
428
|
+
() => transactions.length - 1 - txIndex
|
|
429
|
+
);
|
|
430
|
+
if (txIndex === transactions.length - 1) {
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
const transactionReceipt = await waitForTransactionReceipt(
|
|
434
|
+
config,
|
|
435
|
+
{
|
|
436
|
+
confirmations: 1,
|
|
437
|
+
hash: txHash
|
|
438
|
+
}
|
|
439
|
+
);
|
|
440
|
+
console.info({
|
|
441
|
+
transactionReceipt,
|
|
442
|
+
hash: txHash
|
|
443
|
+
});
|
|
444
|
+
} catch (e) {
|
|
445
|
+
reactToastify.toast.dismiss();
|
|
446
|
+
reactToastify.toast.error("Transaction aborted");
|
|
447
|
+
onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
|
|
448
|
+
setPendingSigning(false);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
await sendTransactions({
|
|
453
|
+
transactions: signedTransactions,
|
|
454
|
+
provider,
|
|
455
|
+
url: helpers_getApiURL.getApiURL() ?? "",
|
|
456
|
+
token: nativeAuthToken ?? ""
|
|
403
457
|
});
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
458
|
+
const txHashes = signedTransactions.map((tx) => tx.txHash);
|
|
459
|
+
onSuccess(txHashes);
|
|
460
|
+
setPendingSigning(false);
|
|
461
|
+
break;
|
|
462
|
+
default:
|
|
463
|
+
reactToastify.toast.error("Provider not supported");
|
|
408
464
|
setPendingSigning(false);
|
|
409
465
|
return;
|
|
410
|
-
}
|
|
411
466
|
}
|
|
412
|
-
await sendTransactions({
|
|
413
|
-
transactions: signedTransactions,
|
|
414
|
-
provider,
|
|
415
|
-
url: helpers_getApiURL.getApiURL() ?? "",
|
|
416
|
-
token: nativeAuthToken ?? ""
|
|
417
|
-
});
|
|
418
|
-
const txHashes = signedTransactions.map((tx) => tx.txHash);
|
|
419
|
-
onSuccess(txHashes);
|
|
420
|
-
setPendingSigning(false);
|
|
421
467
|
} catch (e) {
|
|
422
468
|
console.error(e);
|
|
423
469
|
reactToastify.toast.dismiss();
|
|
@@ -437,7 +483,7 @@ const BridgeForm = ({
|
|
|
437
483
|
nativeAuthToken,
|
|
438
484
|
onSuccess,
|
|
439
485
|
sendTransactions,
|
|
440
|
-
signTransaction
|
|
486
|
+
evm.signTransaction
|
|
441
487
|
]
|
|
442
488
|
);
|
|
443
489
|
const {
|
|
@@ -491,7 +537,12 @@ const BridgeForm = ({
|
|
|
491
537
|
setSecondAmount("0");
|
|
492
538
|
}
|
|
493
539
|
}, [rateValidationError]);
|
|
494
|
-
React.useEffect(setInitialSelectedTokens, [
|
|
540
|
+
React.useEffect(setInitialSelectedTokens, [
|
|
541
|
+
isTokensLoading,
|
|
542
|
+
fromOptions,
|
|
543
|
+
toOptions,
|
|
544
|
+
chainId
|
|
545
|
+
]);
|
|
495
546
|
React.useEffect(() => {
|
|
496
547
|
const selectedTokenOption = evmTokensWithBalances == null ? void 0 : evmTokensWithBalances.find(
|
|
497
548
|
(x) => x.address === (firstToken == null ? void 0 : firstToken.address)
|
|
@@ -577,6 +628,7 @@ const BridgeForm = ({
|
|
|
577
628
|
disabled: isPendingRate,
|
|
578
629
|
options: fromOptions,
|
|
579
630
|
areOptionsLoading: isTokensLoading,
|
|
631
|
+
isMvxSelector: false,
|
|
580
632
|
color: "neutral-850",
|
|
581
633
|
onChange: onChangeFirstSelect,
|
|
582
634
|
onBlur: handleBlur,
|
|
@@ -631,10 +683,11 @@ const BridgeForm = ({
|
|
|
631
683
|
reactjs_components_TokenSelector_TokenSelector.TokenSelector,
|
|
632
684
|
{
|
|
633
685
|
name: "secondToken",
|
|
634
|
-
disabled:
|
|
686
|
+
disabled: isPendingRate,
|
|
635
687
|
omitDisableClass: true,
|
|
636
688
|
options: toOptions,
|
|
637
689
|
areOptionsLoading: isTokensLoading,
|
|
690
|
+
isMvxSelector: true,
|
|
638
691
|
color: "neutral-850",
|
|
639
692
|
onChange: onChangeSecondSelect,
|
|
640
693
|
onBlur: handleBlur,
|
|
@@ -6,6 +6,7 @@ import debounce from "lodash/debounce";
|
|
|
6
6
|
import { useRef, useState, useMemo, useCallback, useEffect } from "react";
|
|
7
7
|
import { toast } from "react-toastify";
|
|
8
8
|
import { getApiURL } from "../../../helpers/getApiURL.mjs";
|
|
9
|
+
import { ChainType } from "../../../types/chainType.mjs";
|
|
9
10
|
import { safeWindow } from "../../constants/index.mjs";
|
|
10
11
|
import { useWeb3App } from "../../context/useWeb3App.mjs";
|
|
11
12
|
import { useAccount } from "../../hooks/useAccount.mjs";
|
|
@@ -40,7 +41,7 @@ import { MvxAccountDisplay } from "../Connect/MvxAccountDisplay.mjs";
|
|
|
40
41
|
import { TokenSelector } from "../TokenSelector/TokenSelector.mjs";
|
|
41
42
|
import { hexToString } from "viem";
|
|
42
43
|
import { waitForTransactionReceipt as waitForTransactionReceipt$1, getTransaction, call } from "viem/actions";
|
|
43
|
-
import { g as getAction } from "../../../useBalances-
|
|
44
|
+
import { g as getAction } from "../../../useBalances-CvRCOieR.mjs";
|
|
44
45
|
function deepEqual(a, b) {
|
|
45
46
|
if (a === b)
|
|
46
47
|
return true;
|
|
@@ -160,7 +161,7 @@ const BridgeForm = ({
|
|
|
160
161
|
(chain) => chain.chainId.toString() === mvxChainId.toString()
|
|
161
162
|
);
|
|
162
163
|
}, [chainId, chains]);
|
|
163
|
-
const {
|
|
164
|
+
const { evm, solana } = useSignTransaction();
|
|
164
165
|
const sendTransactions = useSendTransactions();
|
|
165
166
|
const {
|
|
166
167
|
mutate: getRate,
|
|
@@ -185,15 +186,30 @@ const BridgeForm = ({
|
|
|
185
186
|
})) ?? [],
|
|
186
187
|
[evmTokensWithBalances]
|
|
187
188
|
);
|
|
189
|
+
const availableTokens = useMemo(() => {
|
|
190
|
+
if (!(firstToken == null ? void 0 : firstToken.availableTokens)) {
|
|
191
|
+
return [];
|
|
192
|
+
}
|
|
193
|
+
const foundTokens = [];
|
|
194
|
+
for (const availableToken of firstToken.availableTokens) {
|
|
195
|
+
const foundToken = mvxTokensWithBalances == null ? void 0 : mvxTokensWithBalances.find(
|
|
196
|
+
(mvxToken) => mvxToken.address === availableToken.address
|
|
197
|
+
);
|
|
198
|
+
if (foundToken) {
|
|
199
|
+
foundTokens.push(foundToken);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return foundTokens;
|
|
203
|
+
}, [mvxTokensWithBalances, firstToken == null ? void 0 : firstToken.availableTokens]);
|
|
188
204
|
const toOptions = useMemo(
|
|
189
|
-
() => (
|
|
205
|
+
() => (availableTokens && availableTokens.map((token) => {
|
|
190
206
|
return {
|
|
191
207
|
...token,
|
|
192
208
|
identifier: token.address,
|
|
193
209
|
ticker: token.symbol
|
|
194
210
|
};
|
|
195
211
|
})) ?? [],
|
|
196
|
-
[
|
|
212
|
+
[availableTokens]
|
|
197
213
|
);
|
|
198
214
|
const selectedChainOption = useMemo(
|
|
199
215
|
() => (chains == null ? void 0 : chains.find(
|
|
@@ -201,13 +217,9 @@ const BridgeForm = ({
|
|
|
201
217
|
)) ?? (chains == null ? void 0 : chains[0]),
|
|
202
218
|
[activeChain == null ? void 0 : activeChain.id, chains]
|
|
203
219
|
);
|
|
204
|
-
console.log({
|
|
205
|
-
chains,
|
|
206
|
-
selectedChainOption
|
|
207
|
-
});
|
|
208
220
|
const defaultReceivingToken = useMemo(
|
|
209
|
-
() => toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
|
|
210
|
-
[toOptions]
|
|
221
|
+
() => (availableTokens == null ? void 0 : availableTokens[0]) ?? toOptions.find((x) => x.symbol.toLowerCase().includes("usdc")),
|
|
222
|
+
[toOptions, availableTokens]
|
|
211
223
|
);
|
|
212
224
|
const hasAmounts = firstAmount !== "" && secondAmount !== "";
|
|
213
225
|
const fetchRateDebounced = useCallback(
|
|
@@ -351,15 +363,18 @@ const BridgeForm = ({
|
|
|
351
363
|
if (hasOptionsSelected) {
|
|
352
364
|
return;
|
|
353
365
|
}
|
|
354
|
-
if (
|
|
355
|
-
|
|
366
|
+
if (firstOption) {
|
|
367
|
+
setFirstToken(firstOption);
|
|
368
|
+
updateUrlParams({
|
|
369
|
+
firstTokenId: firstOption == null ? void 0 : firstOption.address
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
if (secondOption) {
|
|
373
|
+
setSecondToken(secondOption);
|
|
374
|
+
updateUrlParams({
|
|
375
|
+
secondTokenId: secondOption == null ? void 0 : secondOption.address
|
|
376
|
+
});
|
|
356
377
|
}
|
|
357
|
-
setFirstToken(firstOption);
|
|
358
|
-
setSecondToken(secondOption);
|
|
359
|
-
updateUrlParams({
|
|
360
|
-
firstTokenId: firstOption == null ? void 0 : firstOption.address,
|
|
361
|
-
secondTokenId: secondOption == null ? void 0 : secondOption.address
|
|
362
|
-
});
|
|
363
378
|
};
|
|
364
379
|
const onSubmit = useCallback(
|
|
365
380
|
async ({
|
|
@@ -370,51 +385,82 @@ const BridgeForm = ({
|
|
|
370
385
|
setPendingSigning(true);
|
|
371
386
|
setSigningTransactionsCount(() => transactions.length);
|
|
372
387
|
try {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
})
|
|
387
|
-
|
|
388
|
-
()
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
388
|
+
switch (selectedChainOption == null ? void 0 : selectedChainOption.chainType) {
|
|
389
|
+
case ChainType.sol:
|
|
390
|
+
try {
|
|
391
|
+
for (const transaction of transactions) {
|
|
392
|
+
if (!transaction.instructions || !transaction.feePayer) {
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
await solana.signTransaction({
|
|
396
|
+
feePayer: transaction.feePayer,
|
|
397
|
+
instructions: transaction.instructions
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
setPendingSigning(false);
|
|
401
|
+
} catch (e) {
|
|
402
|
+
toast.dismiss();
|
|
403
|
+
toast.error("Transaction aborted");
|
|
404
|
+
onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
|
|
405
|
+
setPendingSigning(false);
|
|
406
|
+
return;
|
|
392
407
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
408
|
+
break;
|
|
409
|
+
case ChainType.evm:
|
|
410
|
+
let txIndex = -1;
|
|
411
|
+
for (const transaction of transactions) {
|
|
412
|
+
++txIndex;
|
|
413
|
+
try {
|
|
414
|
+
const txHash = await evm.signTransaction({
|
|
415
|
+
...transaction,
|
|
416
|
+
value: BigInt(transaction.value),
|
|
417
|
+
gas: BigInt(transaction.gasLimit),
|
|
418
|
+
account: bridgeAddress
|
|
419
|
+
});
|
|
420
|
+
signedTransactions.push({
|
|
421
|
+
...transaction,
|
|
422
|
+
txHash
|
|
423
|
+
});
|
|
424
|
+
setSigningTransactionsCount(
|
|
425
|
+
() => transactions.length - 1 - txIndex
|
|
426
|
+
);
|
|
427
|
+
if (txIndex === transactions.length - 1) {
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
const transactionReceipt = await waitForTransactionReceipt(
|
|
431
|
+
config,
|
|
432
|
+
{
|
|
433
|
+
confirmations: 1,
|
|
434
|
+
hash: txHash
|
|
435
|
+
}
|
|
436
|
+
);
|
|
437
|
+
console.info({
|
|
438
|
+
transactionReceipt,
|
|
439
|
+
hash: txHash
|
|
440
|
+
});
|
|
441
|
+
} catch (e) {
|
|
442
|
+
toast.dismiss();
|
|
443
|
+
toast.error("Transaction aborted");
|
|
444
|
+
onFailedSentTransaction == null ? void 0 : onFailedSentTransaction("Transaction aborted");
|
|
445
|
+
setPendingSigning(false);
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
await sendTransactions({
|
|
450
|
+
transactions: signedTransactions,
|
|
451
|
+
provider,
|
|
452
|
+
url: getApiURL() ?? "",
|
|
453
|
+
token: nativeAuthToken ?? ""
|
|
400
454
|
});
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
455
|
+
const txHashes = signedTransactions.map((tx) => tx.txHash);
|
|
456
|
+
onSuccess(txHashes);
|
|
457
|
+
setPendingSigning(false);
|
|
458
|
+
break;
|
|
459
|
+
default:
|
|
460
|
+
toast.error("Provider not supported");
|
|
405
461
|
setPendingSigning(false);
|
|
406
462
|
return;
|
|
407
|
-
}
|
|
408
463
|
}
|
|
409
|
-
await sendTransactions({
|
|
410
|
-
transactions: signedTransactions,
|
|
411
|
-
provider,
|
|
412
|
-
url: getApiURL() ?? "",
|
|
413
|
-
token: nativeAuthToken ?? ""
|
|
414
|
-
});
|
|
415
|
-
const txHashes = signedTransactions.map((tx) => tx.txHash);
|
|
416
|
-
onSuccess(txHashes);
|
|
417
|
-
setPendingSigning(false);
|
|
418
464
|
} catch (e) {
|
|
419
465
|
console.error(e);
|
|
420
466
|
toast.dismiss();
|
|
@@ -434,7 +480,7 @@ const BridgeForm = ({
|
|
|
434
480
|
nativeAuthToken,
|
|
435
481
|
onSuccess,
|
|
436
482
|
sendTransactions,
|
|
437
|
-
signTransaction
|
|
483
|
+
evm.signTransaction
|
|
438
484
|
]
|
|
439
485
|
);
|
|
440
486
|
const {
|
|
@@ -488,7 +534,12 @@ const BridgeForm = ({
|
|
|
488
534
|
setSecondAmount("0");
|
|
489
535
|
}
|
|
490
536
|
}, [rateValidationError]);
|
|
491
|
-
useEffect(setInitialSelectedTokens, [
|
|
537
|
+
useEffect(setInitialSelectedTokens, [
|
|
538
|
+
isTokensLoading,
|
|
539
|
+
fromOptions,
|
|
540
|
+
toOptions,
|
|
541
|
+
chainId
|
|
542
|
+
]);
|
|
492
543
|
useEffect(() => {
|
|
493
544
|
const selectedTokenOption = evmTokensWithBalances == null ? void 0 : evmTokensWithBalances.find(
|
|
494
545
|
(x) => x.address === (firstToken == null ? void 0 : firstToken.address)
|
|
@@ -574,6 +625,7 @@ const BridgeForm = ({
|
|
|
574
625
|
disabled: isPendingRate,
|
|
575
626
|
options: fromOptions,
|
|
576
627
|
areOptionsLoading: isTokensLoading,
|
|
628
|
+
isMvxSelector: false,
|
|
577
629
|
color: "neutral-850",
|
|
578
630
|
onChange: onChangeFirstSelect,
|
|
579
631
|
onBlur: handleBlur,
|
|
@@ -628,10 +680,11 @@ const BridgeForm = ({
|
|
|
628
680
|
TokenSelector,
|
|
629
681
|
{
|
|
630
682
|
name: "secondToken",
|
|
631
|
-
disabled:
|
|
683
|
+
disabled: isPendingRate,
|
|
632
684
|
omitDisableClass: true,
|
|
633
685
|
options: toOptions,
|
|
634
686
|
areOptionsLoading: isTokensLoading,
|
|
687
|
+
isMvxSelector: true,
|
|
635
688
|
color: "neutral-850",
|
|
636
689
|
onChange: onChangeSecondSelect,
|
|
637
690
|
onBlur: handleBlur,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { TokenType } from '../../../types/token';
|
|
2
2
|
|
|
3
|
-
export declare const TokenSelector: ({ name, options, selectedOption, areOptionsLoading, className, disabled, omitDisableClass, color, onBlur, onChange, onMaxBtnClick, onTokenSelectorDisplay }: {
|
|
3
|
+
export declare const TokenSelector: ({ name, options, selectedOption, areOptionsLoading, className, disabled, isMvxSelector, omitDisableClass, color, onBlur, onChange, onMaxBtnClick, onTokenSelectorDisplay }: {
|
|
4
4
|
name: string;
|
|
5
5
|
options: TokenType[];
|
|
6
6
|
selectedOption?: TokenType;
|
|
7
7
|
areOptionsLoading?: boolean;
|
|
8
8
|
disabled?: boolean;
|
|
9
|
+
isMvxSelector?: boolean;
|
|
9
10
|
omitDisableClass?: boolean;
|
|
10
11
|
className?: string;
|
|
11
12
|
color?: "neutral-750" | "neutral-850";
|
|
@@ -22,6 +22,7 @@ const TokenSelector = ({
|
|
|
22
22
|
areOptionsLoading = false,
|
|
23
23
|
className = "",
|
|
24
24
|
disabled = false,
|
|
25
|
+
isMvxSelector = false,
|
|
25
26
|
omitDisableClass = false,
|
|
26
27
|
color = "neutral-750",
|
|
27
28
|
onBlur,
|
|
@@ -35,15 +36,16 @@ const TokenSelector = ({
|
|
|
35
36
|
token: selectedOption
|
|
36
37
|
});
|
|
37
38
|
const chains = React.useMemo(() => {
|
|
39
|
+
if (isMvxSelector) {
|
|
40
|
+
return (data == null ? void 0 : data.filter(
|
|
41
|
+
(chain) => constants_index.MVX_CHAIN_IDS.includes(chain.chainId.toString())
|
|
42
|
+
)) ?? [];
|
|
43
|
+
}
|
|
38
44
|
return (data == null ? void 0 : data.filter(
|
|
39
45
|
(chain) => !constants_index.MVX_CHAIN_IDS.includes(chain.chainId.toString())
|
|
40
46
|
)) ?? [];
|
|
41
47
|
}, [data]);
|
|
42
|
-
|
|
43
|
-
chains,
|
|
44
|
-
options,
|
|
45
|
-
selectedOption
|
|
46
|
-
});
|
|
48
|
+
const isVisuallyDisabled = disabled || chains.length < 2;
|
|
47
49
|
const handleOnClick = () => setShow(true);
|
|
48
50
|
React.useEffect(() => {
|
|
49
51
|
onTokenSelectorDisplay == null ? void 0 : onTokenSelectorDisplay(show);
|
|
@@ -77,6 +79,7 @@ const TokenSelector = ({
|
|
|
77
79
|
},
|
|
78
80
|
tokens: options,
|
|
79
81
|
chains,
|
|
82
|
+
isMvxSelector,
|
|
80
83
|
areChainsLoading,
|
|
81
84
|
selectedToken: selectedOption
|
|
82
85
|
}
|
|
@@ -98,19 +101,19 @@ const TokenSelector = ({
|
|
|
98
101
|
"liq-bg-neutral-900/50 liq-outline liq-outline-1 liq-outline-neutral-700/20 hover:enabled:liq-bg-neutral-600/50 hover:enabled:liq-outline-neutral-600": color === "neutral-850"
|
|
99
102
|
},
|
|
100
103
|
{
|
|
101
|
-
"disabled:!liq-opacity-70":
|
|
104
|
+
"disabled:!liq-opacity-70": isVisuallyDisabled && !omitDisableClass
|
|
102
105
|
},
|
|
103
106
|
{
|
|
104
|
-
"!liq-cursor-not-allowed !liq-bg-transparent !liq-outline-transparent":
|
|
107
|
+
"!liq-cursor-not-allowed !liq-bg-transparent !liq-outline-transparent": isVisuallyDisabled
|
|
105
108
|
},
|
|
106
109
|
className
|
|
107
110
|
),
|
|
108
111
|
onBlur,
|
|
109
112
|
onClick: handleOnClick,
|
|
110
|
-
disabled,
|
|
113
|
+
disabled: isVisuallyDisabled,
|
|
111
114
|
children: [
|
|
112
115
|
/* @__PURE__ */ jsxRuntime.jsx(reactjs_components_TokenSelector_components_SelectedOption.SelectedOption, { value: selectedOption }),
|
|
113
|
-
!
|
|
116
|
+
!isVisuallyDisabled && /* @__PURE__ */ jsxRuntime.jsx(
|
|
114
117
|
reactFontawesome.FontAwesomeIcon,
|
|
115
118
|
{
|
|
116
119
|
icon: faChevronDown.faChevronDown,
|