@0xsquid/react-hooks 8.12.1-beta-arc.0 → 8.12.1-beta-arc.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.
Files changed (36) hide show
  1. package/dist/hooks/transaction/send/useEstimateSendTransactionGas.d.ts +0 -3
  2. package/dist/hooks/transaction/useArcFeeCheck.d.ts +5 -0
  3. package/dist/{index-BBJD55XX.js → index-8RIq6GyB.js} +127 -368
  4. package/dist/index-8RIq6GyB.js.map +1 -0
  5. package/dist/{index-CLzjMzS_.js → index-BVneqIL5.js} +128 -367
  6. package/dist/index-BVneqIL5.js.map +1 -0
  7. package/dist/{index.es-BiK_wjSb.js → index.es-Bm5GQH70.js} +2 -2
  8. package/dist/{index.es-BiK_wjSb.js.map → index.es-Bm5GQH70.js.map} +1 -1
  9. package/dist/{index.es-BVCh4tlV.js → index.es-CnV3EYrQ.js} +2 -2
  10. package/dist/{index.es-BVCh4tlV.js.map → index.es-CnV3EYrQ.js.map} +1 -1
  11. package/dist/index.esm.js +1 -1
  12. package/dist/index.js +1 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/{secretService-BZ06HTOJ.js → secretService-C6GiPeC8.js} +2 -2
  15. package/dist/{secretService-BZ06HTOJ.js.map → secretService-C6GiPeC8.js.map} +1 -1
  16. package/dist/{secretService-DkE9yz1o.js → secretService-D8ySaXvX.js} +2 -2
  17. package/dist/{secretService-DkE9yz1o.js.map → secretService-D8ySaXvX.js.map} +1 -1
  18. package/dist/services/internal/arcService.d.ts +5 -3
  19. package/dist/services/internal/assetsService.d.ts +2 -8
  20. package/dist/services/internal/configService.d.ts +3 -14
  21. package/dist/services/internal/estimateService.d.ts +2 -12
  22. package/dist/services/internal/tempoService.d.ts +0 -2
  23. package/dist/services/internal/walletService.d.ts +1 -1
  24. package/dist/{stellarService.client-fnyXRadt.js → stellarService.client-DkBWS3eX.js} +2 -2
  25. package/dist/{stellarService.client-fnyXRadt.js.map → stellarService.client-DkBWS3eX.js.map} +1 -1
  26. package/dist/{stellarService.client-DtA9zkRt.js → stellarService.client-IiUZ6NO6.js} +2 -2
  27. package/dist/{stellarService.client-DtA9zkRt.js.map → stellarService.client-IiUZ6NO6.js.map} +1 -1
  28. package/package.json +1 -1
  29. package/dist/index-BBJD55XX.js.map +0 -1
  30. package/dist/index-CLzjMzS_.js.map +0 -1
  31. package/dist/tests/arcWalletService.test.d.ts +0 -1
  32. package/dist/tests/useArcApproval.test.d.ts +0 -1
  33. package/dist/tests/useArcSendEstimate.test.d.ts +0 -1
  34. package/dist/tests/useNativeTokenForChain.test.d.ts +0 -1
  35. package/dist/tests/useSwapArcSelection.test.d.ts +0 -1
  36. /package/dist/tests/{arcConfigService.test.d.ts → sourceChainGas.test.d.ts} +0 -0
@@ -20944,24 +20944,6 @@ const isBitcoinAddressValid = (address$1) => {
20944
20944
  }
20945
20945
  };
20946
20946
 
20947
- const arcUsdcTokenAddress = "0x3600000000000000000000000000000000000000";
20948
- const isArcChain = (chainId) => chainId === CHAIN_IDS.ARC;
20949
- const isArcUsdcToken = (token) => isArcChain(token?.chainId) &&
20950
- token?.address.toLowerCase() === arcUsdcTokenAddress;
20951
- const isArcNativeToken = (token) => isArcChain(token?.chainId) &&
20952
- token?.address.toLowerCase() === nativeEvmTokenAddress;
20953
- const normalizeArcTokenAddress = (chainId, address) => isArcChain(chainId) && address?.toLowerCase() === nativeEvmTokenAddress
20954
- ? arcUsdcTokenAddress
20955
- : address;
20956
- const deduplicateArcBalances = (tokens) => {
20957
- const canonicalChains = new Set(tokens
20958
- .filter((token) => isArcChain(token.chainId) &&
20959
- token.address?.toLowerCase() === arcUsdcTokenAddress)
20960
- .map((token) => token.chainId));
20961
- return tokens.filter((token) => !(canonicalChains.has(token.chainId) &&
20962
- token.address?.toLowerCase() === nativeEvmTokenAddress));
20963
- };
20964
-
20965
20947
  function getCantonCommandId(memo) {
20966
20948
  return `canton-${memo}`;
20967
20949
  }
@@ -22198,7 +22180,7 @@ function sortAddressBook(a, b, selectedAddress) {
22198
22180
  return 0;
22199
22181
  }
22200
22182
  const calculateTotalUsdBalanceUSD = (tokens) => {
22201
- const totalUsd = deduplicateArcBalances(tokens).reduce((total, token) => {
22183
+ const totalUsd = tokens.reduce((total, token) => {
22202
22184
  const balance = parseFloat(token.balance);
22203
22185
  const usdPrice = token.usdPrice ?? 0;
22204
22186
  const balanceUsd = balance * usdPrice;
@@ -23010,36 +22992,22 @@ const getFirstAvailableChainId = (config, direction, chains = []) => {
23010
22992
  // if no initial chain ID is found in config, return the first available chain ID
23011
22993
  return availableChains.length > 0 ? availableChains[0].chainId : undefined;
23012
22994
  };
23013
- const fetchHighestBalanceToken = (fetchCachedBalance, chainId, selectableTokens, direction) => {
22995
+ const fetchHighestBalanceToken = (fetchCachedBalance, chainId) => {
23014
22996
  let address = undefined;
23015
22997
  if (fetchCachedBalance) {
23016
22998
  const queryCache = fetchCachedBalance?.queryClient?.getQueryCache();
23017
- const directionCache = isArcChain(chainId) && direction
23018
- ? queryCache?.find(keys().allTokensBalance(fetchCachedBalance.address, ChainType.EVM, direction))
23019
- : undefined;
23020
22999
  // get cached balance from key
23021
- const cache = directionCache?.state.data !== undefined
23022
- ? directionCache
23023
- : queryCache?.find(keys().allTokensBalance(fetchCachedBalance?.address, !isNaN(Number(chainId)) ? ChainType.EVM : ChainType.COSMOS));
23024
- const cacheData = cache?.state.data;
23025
- const cacheResult = Array.isArray(cacheData)
23026
- ? cacheData
23027
- : isArcChain(chainId)
23028
- ? (cacheData?.tokens ?? [])
23029
- : [];
23000
+ const cache = queryCache?.find(keys().allTokensBalance(fetchCachedBalance?.address, !isNaN(Number(chainId)) ? ChainType.EVM : ChainType.COSMOS));
23001
+ // Parse result to TokenWithBalance[]
23002
+ const cacheResult = cache?.state.data ?? [];
23030
23003
  if (cacheResult.length > 0) {
23031
- const tokensWithBalance = deduplicateArcBalances(cacheResult).filter((t) => t.chainId === chainId &&
23032
- Number(t.balance) > 0 &&
23033
- (!selectableTokens ||
23034
- selectableTokens.some((token) => token.chainId === t.chainId &&
23035
- token.address.toLowerCase() ===
23036
- normalizeArcTokenAddress(t.chainId, t.address)?.toLowerCase())));
23004
+ const tokensWithBalance = cacheResult.filter((t) => t.chainId === chainId && Number(t.balance) > 0);
23037
23005
  if (tokensWithBalance.length > 0) {
23038
23006
  // Return the token with the highest balance
23039
23007
  // TODO: At the moment we're not taking into account usd price
23040
23008
  const tokenWithHighestBalance = tokensWithBalance.reduce((prev, current) => Number(prev.balance) > Number(current.balance) ? prev : current);
23041
23009
  if (tokenWithHighestBalance) {
23042
- address = normalizeArcTokenAddress(tokenWithHighestBalance.chainId, tokenWithHighestBalance.address);
23010
+ address = tokenWithHighestBalance.address;
23043
23011
  }
23044
23012
  }
23045
23013
  }
@@ -23050,21 +23018,6 @@ const findNativeTokenForChainType = (tokens) => {
23050
23018
  return tokens.find((t) => t.address.toLowerCase() ===
23051
23019
  chainTypeToNativeTokenAddressMap[t.type].toLowerCase());
23052
23020
  };
23053
- const getTokenAddressForSelection = ({ tokens, config, chainId, address, direction, excludeToken, }) => {
23054
- if (!isArcChain(chainId))
23055
- return address;
23056
- const normalizedAddress = normalizeArcTokenAddress(chainId, address);
23057
- const excludedAddress = normalizeArcTokenAddress(excludeToken?.chainId, excludeToken?.address);
23058
- if (!chainId ||
23059
- !normalizedAddress ||
23060
- (excludeToken?.chainId === chainId &&
23061
- normalizedAddress.toLowerCase() === excludedAddress?.toLowerCase()) ||
23062
- !getSupportedChainIdsForDirection([chainId], config, direction).includes(chainId)) {
23063
- return undefined;
23064
- }
23065
- return filterViewableTokens(tokens, config, direction).find((token) => token.chainId === chainId &&
23066
- token.address.toLowerCase() === normalizedAddress.toLowerCase())?.address;
23067
- };
23068
23021
  /**
23069
23022
  * Returns the default token address for a specific chain and direction based on config.
23070
23023
  * If no default tokens are set in config, returns the native token for the specified chain
@@ -23082,25 +23035,6 @@ const getInitialOrDefaultTokenAddressForChain = ({ tokens, config, chainId, dire
23082
23035
  const supportedChainIds = getSupportedChainIdsForDirection([chainId], config, direction);
23083
23036
  if (!supportedChainIds.includes(chainId))
23084
23037
  return;
23085
- if (isArcChain(chainId)) {
23086
- const selectAddress = (address) => getTokenAddressForSelection({
23087
- tokens,
23088
- config,
23089
- chainId,
23090
- address,
23091
- direction,
23092
- excludeToken,
23093
- });
23094
- const selectableTokens = tokens.filter((token) => token.chainId === chainId &&
23095
- !isArcNativeToken(token) &&
23096
- selectAddress(token.address) !== undefined);
23097
- return (selectAddress(config.defaultTokensPerChain?.find((token) => token.chainId === chainId)
23098
- ?.address) ??
23099
- selectAddress(getInitialTokenAddressForChain({ tokens, config, chainId, direction })) ??
23100
- selectAddress(fetchHighestBalanceToken(fetchCachedBalance, chainId, selectableTokens, direction)) ??
23101
- selectAddress(arcUsdcTokenAddress) ??
23102
- selectableTokens[0]?.address);
23103
- }
23104
23038
  const configDefaultTokenForChain = config.defaultTokensPerChain?.find((token) => token.chainId == chainId);
23105
23039
  // get default token from config
23106
23040
  if (configDefaultTokenForChain &&
@@ -23144,23 +23078,6 @@ const getInitialTokenAddressForChain = ({ chainId, config, direction, tokens, un
23144
23078
  const initialAsset = config.initialAssets?.[direction];
23145
23079
  if (!initialAsset)
23146
23080
  return undefined;
23147
- if (isArcChain(chainId)) {
23148
- const address = isNamedTokenConfig(initialAsset)
23149
- ? tokens.find((token) => token.chainId === chainId &&
23150
- !isArcNativeToken(token) &&
23151
- token.symbol.toLowerCase() === initialAsset.symbol?.toLowerCase())?.address
23152
- : initialAsset.chainId === chainId
23153
- ? initialAsset.address
23154
- : undefined;
23155
- return getTokenAddressForSelection({
23156
- tokens,
23157
- config,
23158
- chainId,
23159
- address,
23160
- direction,
23161
- excludeToken: { chainId, address: unavailableTokenAddress },
23162
- });
23163
- }
23164
23081
  if (isNamedTokenConfig(initialAsset)) {
23165
23082
  if (!initialAsset.symbol)
23166
23083
  return undefined;
@@ -23375,39 +23292,7 @@ const handleDestinationAddressOnSwapChange = ({ fromChainId, fromTokenAddress, t
23375
23292
  if (destinationTokensFiltered.find((t) => t.address === lowerCaseDestinationTokenAddress) === undefined) {
23376
23293
  destinationTokenAddress = defaultToAddress;
23377
23294
  }
23378
- return isArcChain(toChainId ?? swapRoute?.toChainId)
23379
- ? destinationTokenAddress?.toLowerCase()
23380
- : lowerCaseDestinationTokenAddress;
23381
- };
23382
- const normalizeSwapParamsForSelection = ({ swapParams, tokens, chains, config, }) => {
23383
- const fromTokenAddress = getTokenAddressForSelection({
23384
- tokens,
23385
- config,
23386
- chainId: swapParams.fromChainId,
23387
- address: swapParams.fromTokenAddress,
23388
- direction: "from",
23389
- });
23390
- const fromToken = tokens.find((token) => token.chainId === swapParams.fromChainId &&
23391
- token.address.toLowerCase() === fromTokenAddress?.toLowerCase());
23392
- const toTokenAddress = getTokenAddressForSelection({
23393
- tokens: isArcChain(swapParams.toChainId)
23394
- ? filterTokensForDestination({
23395
- tokens,
23396
- selectedDestinationChain: chains.find((chain) => chain.chainId === swapParams.toChainId),
23397
- selectedSourceToken: fromToken,
23398
- removeSourceToken: true,
23399
- })
23400
- : tokens,
23401
- config,
23402
- chainId: swapParams.toChainId,
23403
- address: swapParams.toTokenAddress,
23404
- direction: "to",
23405
- excludeToken: {
23406
- chainId: swapParams.fromChainId,
23407
- address: fromTokenAddress,
23408
- },
23409
- });
23410
- return { ...swapParams, fromTokenAddress, toTokenAddress };
23295
+ return lowerCaseDestinationTokenAddress;
23411
23296
  };
23412
23297
  /**
23413
23298
  * When user changes something from the SwapView
@@ -23419,19 +23304,10 @@ const normalizeSwapParamsForSelection = ({ swapParams, tokens, chains, config, }
23419
23304
  * If only destination token is changed but source is not, and they were the same, then source token updates to something else
23420
23305
  *
23421
23306
  */
23422
- const getNewSwapParamsFromInput = ({ inputParams, initialSwapRoute: storedSwapRoute, tokens, chains, config, queryClient, connectedSourceAddress, }) => {
23423
- const initialSwapRoute = storedSwapRoute
23424
- ? {
23425
- ...storedSwapRoute,
23426
- fromTokenAddress: normalizeArcTokenAddress(storedSwapRoute.fromChainId, storedSwapRoute.fromTokenAddress),
23427
- toTokenAddress: normalizeArcTokenAddress(storedSwapRoute.toChainId, storedSwapRoute.toTokenAddress),
23428
- }
23429
- : undefined;
23430
- const { fromChainId, toChainId, destinationAddress, fallbackAddress, depositRefundAddress, } = inputParams;
23307
+ const getNewSwapParamsFromInput = ({ inputParams, initialSwapRoute, tokens, chains, config, queryClient, connectedSourceAddress, }) => {
23308
+ const { fromChainId, fromTokenAddress, toChainId, toTokenAddress, destinationAddress, fallbackAddress, depositRefundAddress, } = inputParams;
23431
23309
  const srcChainId = fromChainId ?? initialSwapRoute?.fromChainId;
23432
23310
  const destinationChainId = toChainId ?? initialSwapRoute?.toChainId;
23433
- const fromTokenAddress = normalizeArcTokenAddress(srcChainId, inputParams.fromTokenAddress);
23434
- const toTokenAddress = normalizeArcTokenAddress(destinationChainId, inputParams.toTokenAddress);
23435
23311
  const defaultFromAddress = getInitialOrDefaultTokenAddressForChain({
23436
23312
  tokens,
23437
23313
  config,
@@ -23507,20 +23383,15 @@ const getNewSwapParamsFromInput = ({ inputParams, initialSwapRoute: storedSwapRo
23507
23383
  const newDepositRefundAddress = sourceChainChanged
23508
23384
  ? undefined
23509
23385
  : depositRefundAddress || initialSwapRoute?.depositRefundAddress;
23510
- return normalizeSwapParamsForSelection({
23511
- swapParams: {
23512
- fromChainId: srcChainId,
23513
- fromTokenAddress: sourceTokenAddress,
23514
- toChainId: destinationChainId,
23515
- toTokenAddress: destinationTokenAddress,
23516
- destinationAddress: newDestinationAddress,
23517
- fallbackAddress: newFallbackAddress,
23518
- depositRefundAddress: newDepositRefundAddress,
23519
- },
23520
- tokens,
23521
- chains,
23522
- config,
23523
- });
23386
+ return {
23387
+ fromChainId: srcChainId,
23388
+ fromTokenAddress: sourceTokenAddress,
23389
+ toChainId: destinationChainId,
23390
+ toTokenAddress: destinationTokenAddress,
23391
+ destinationAddress: newDestinationAddress,
23392
+ fallbackAddress: newFallbackAddress,
23393
+ depositRefundAddress: newDepositRefundAddress,
23394
+ };
23524
23395
  };
23525
23396
  /* Sorts tokens based on the following order:
23526
23397
  * 1. Native token on chain ID "1" (Ethereum) comes first.
@@ -23578,10 +23449,8 @@ const sortAllTokens = (tokenA, tokenB) => {
23578
23449
  return 0;
23579
23450
  };
23580
23451
  const findToken = (tokens, chainId, address) => tokens.find((t) => t.chainId === chainId && t.address === address);
23581
- const findNativeToken = (tokens, chain) => tokens.find((t) => t.chainId === chain.chainId &&
23582
- (isArcChain(chain.chainId)
23583
- ? isArcNativeToken(t)
23584
- : t.symbol.toUpperCase() === chain.nativeCurrency.symbol.toUpperCase()));
23452
+ const findNativeToken = (tokens, chain) => tokens.find((t) => t.symbol.toUpperCase() === chain.nativeCurrency.symbol.toUpperCase() &&
23453
+ t.chainId == chain.chainId);
23585
23454
  const normalizeIbcAddress = (address) => {
23586
23455
  if (!address.toLowerCase().startsWith("ibc/")) {
23587
23456
  return address;
@@ -23651,7 +23520,9 @@ function selectGroupDefaultInfo(tokens) {
23651
23520
  const groupTokensBySymbol = (tokens, chainType) => {
23652
23521
  const groups = {};
23653
23522
  // Filter tokens by chain type if specified
23654
- const filteredTokens = deduplicateArcBalances(chainType ? tokens.filter((token) => token.type === chainType) : tokens);
23523
+ const filteredTokens = chainType
23524
+ ? tokens.filter((token) => token.type === chainType)
23525
+ : tokens;
23655
23526
  // First pass: group by coingeckoId or symbol
23656
23527
  filteredTokens.forEach((token) => {
23657
23528
  const groupKey = token.coingeckoId || token.symbol.split(".")[0];
@@ -23727,7 +23598,7 @@ const groupTokensBySymbol = (tokens, chainType) => {
23727
23598
  */
23728
23599
  const groupTokensByChainId = (tokens, chains) => {
23729
23600
  const groups = {};
23730
- deduplicateArcBalances(tokens).forEach((token) => {
23601
+ tokens.forEach((token) => {
23731
23602
  const chainData = chains.find((chain) => chain.chainId === token.chainId);
23732
23603
  const groupKey = token.chainId;
23733
23604
  if (!groups[groupKey]) {
@@ -23767,16 +23638,14 @@ const groupTokensByChainId = (tokens, chains) => {
23767
23638
  */
23768
23639
  const filterViewableTokens = (tokens, config, direction) => {
23769
23640
  const disabledTokens = [
23770
- // On Celo, native token & custom address tokens are returned
23771
- // so we should hide the native one but keep receiving it to use gas balance
23641
+ // Both interfaces share one balance; show only the ERC20 token.
23772
23642
  { chainId: CHAIN_IDS.CELO, address: nativeEvmTokenAddress },
23643
+ { chainId: CHAIN_IDS.ARC, address: nativeEvmTokenAddress },
23773
23644
  // SagaEVM is gasless, so the native token is not used
23774
23645
  { chainId: CHAIN_IDS.SAGA_EVM, address: nativeEvmTokenAddress },
23775
23646
  { chainId: CHAIN_IDS.DCHAIN, address: nativeEvmTokenAddress },
23776
23647
  ];
23777
23648
  return (tokens.filter((token) => {
23778
- if (isArcNativeToken(token))
23779
- return false;
23780
23649
  if (direction) {
23781
23650
  const parsedDirection = getParsedDirection(direction);
23782
23651
  const availableTokensForDirection = config.availableTokens?.[parsedDirection];
@@ -23792,7 +23661,7 @@ const filterViewableTokens = (tokens, config, direction) => {
23792
23661
  };
23793
23662
  const getSecretNetworkBalances = async (chainData, cosmosAddress, squidTokens, keplrTypeWallet) => {
23794
23663
  const squidSecretTokens = squidTokens.filter((t) => t.chainId === CHAIN_IDS.SECRET);
23795
- const { fetchAllSecretBalances } = await import('./secretService-DkE9yz1o.js');
23664
+ const { fetchAllSecretBalances } = await import('./secretService-D8ySaXvX.js');
23796
23665
  return fetchAllSecretBalances(chainData, cosmosAddress, squidSecretTokens, keplrTypeWallet);
23797
23666
  };
23798
23667
  function getTokenAssetsKey(token) {
@@ -28219,7 +28088,7 @@ function useStellarWallets() {
28219
28088
  try {
28220
28089
  const { allowAllModules: initializeAllModules } = await import('@creit.tech/stellar-wallets-kit');
28221
28090
  const { LedgerModule } = await import('@creit.tech/stellar-wallets-kit/modules/ledger.module.mjs');
28222
- const { formatStellarWallet } = await import('./stellarService.client-DtA9zkRt.js');
28091
+ const { formatStellarWallet } = await import('./stellarService.client-IiUZ6NO6.js');
28223
28092
  const modules = [...initializeAllModules(), new LedgerModule()];
28224
28093
  const promises = modules.map(async (module) => {
28225
28094
  const isAvailable = await module.isAvailable();
@@ -29147,27 +29016,12 @@ const useMultiChainWallet = (chain) => {
29147
29016
  };
29148
29017
 
29149
29018
  const useSwap = () => {
29150
- const { initialAssets, defaultTokensPerChain, disabledChains, availableChains, availableTokens, } = useConfigStore((state) => state.config);
29019
+ const { initialAssets, defaultTokensPerChain, disabledChains, availableChains, } = useConfigStore((state) => state.config);
29151
29020
  const fromPrice = useTransactionStore((state) => state.fromPrice);
29152
- const { swapRoute: storedSwapRoute } = useSwapRoutePersistStore();
29021
+ const { swapRoute } = useSwapRoutePersistStore();
29153
29022
  const { tokens } = useSquidTokens();
29154
29023
  const queryClient = useQueryClient();
29155
29024
  const { chains, supportedDestinationChains, supportedSourceChains } = useSquidChains();
29156
- const swapRoute = useMemo(() => storedSwapRoute
29157
- ? normalizeSwapParamsForSelection({
29158
- swapParams: storedSwapRoute,
29159
- tokens,
29160
- chains,
29161
- config: { disabledChains, availableChains, availableTokens },
29162
- })
29163
- : undefined, [
29164
- storedSwapRoute,
29165
- tokens,
29166
- chains,
29167
- disabledChains,
29168
- availableChains,
29169
- availableTokens,
29170
- ]);
29171
29025
  const sourceChainId = useMemo(() => swapRoute?.fromChainId ??
29172
29026
  (initialAssets?.from
29173
29027
  ? resolveChainIdFromAsset(initialAssets.from, supportedSourceChains)
@@ -29178,23 +29032,13 @@ const useSwap = () => {
29178
29032
  : undefined), [swapRoute?.toChainId, supportedDestinationChains, initialAssets?.to]);
29179
29033
  const fromChain = useMemo(() => supportedSourceChains.find((c) => c.chainId === swapRoute?.fromChainId), [swapRoute?.fromChainId, supportedSourceChains]);
29180
29034
  const toChain = useMemo(() => supportedDestinationChains.find((c) => c.chainId === swapRoute?.toChainId), [swapRoute?.toChainId, supportedDestinationChains]);
29181
- const fromTokens = useMemo(() => {
29182
- const chainTokens = getTokensForChain(tokens, sourceChainId);
29183
- return isArcChain(sourceChainId)
29184
- ? filterViewableTokens(chainTokens, { availableTokens }, "from")
29185
- : chainTokens;
29186
- }, [tokens, sourceChainId, availableTokens]);
29035
+ const fromTokens = useMemo(() => getTokensForChain(tokens, sourceChainId), [tokens, sourceChainId]);
29187
29036
  const fromToken = useMemo(() => fromTokens.find((t) => t.address.toLowerCase() === swapRoute?.fromTokenAddress?.toLowerCase()), [fromTokens, swapRoute?.fromTokenAddress]);
29188
- const toTokens = useMemo(() => {
29189
- const destinationTokens = filterTokensForDestination({
29190
- tokens: getTokensForChain(tokens, destChainId),
29191
- selectedDestinationChain: toChain,
29192
- selectedSourceToken: fromToken,
29193
- });
29194
- return isArcChain(destChainId)
29195
- ? filterViewableTokens(destinationTokens, { availableTokens }, "to")
29196
- : destinationTokens;
29197
- }, [destChainId, toChain, fromToken, tokens, availableTokens]);
29037
+ const toTokens = useMemo(() => filterTokensForDestination({
29038
+ tokens: getTokensForChain(tokens, destChainId),
29039
+ selectedDestinationChain: toChain,
29040
+ selectedSourceToken: fromToken,
29041
+ }), [destChainId, toChain, fromToken, tokens]);
29198
29042
  const toToken = useMemo(() => toTokens.find((t) => t.address.toLowerCase() === swapRoute?.toTokenAddress?.toLowerCase()), [toTokens, swapRoute?.toTokenAddress]);
29199
29043
  const isSameChain = sourceChainId === destChainId;
29200
29044
  const tokenItems = useMemo(() => ({ from: fromTokens, to: toTokens }), [fromTokens, toTokens]);
@@ -29242,7 +29086,6 @@ const useSwap = () => {
29242
29086
  defaultTokensPerChain,
29243
29087
  disabledChains,
29244
29088
  availableChains,
29245
- availableTokens,
29246
29089
  },
29247
29090
  queryClient,
29248
29091
  connectedSourceAddress: connectedSourceAddress.address,
@@ -29282,7 +29125,6 @@ const useSwap = () => {
29282
29125
  defaultTokensPerChain,
29283
29126
  disabledChains,
29284
29127
  availableChains,
29285
- availableTokens,
29286
29128
  initialAssets,
29287
29129
  queryClient,
29288
29130
  swapRoute,
@@ -29338,10 +29180,6 @@ const useSwap = () => {
29338
29180
  },
29339
29181
  direction: "to",
29340
29182
  });
29341
- if ([defaultFromChainId, defaultToChainId].some((chainId) => isArcChain(chainId) &&
29342
- !tokens.some((token) => token.chainId === chainId && !isArcNativeToken(token)))) {
29343
- return;
29344
- }
29345
29183
  const fromTokenAddress = getInitialOrDefaultTokenAddressForChain({
29346
29184
  tokens,
29347
29185
  config: {
@@ -29349,7 +29187,6 @@ const useSwap = () => {
29349
29187
  defaultTokensPerChain,
29350
29188
  disabledChains,
29351
29189
  availableChains,
29352
- availableTokens,
29353
29190
  },
29354
29191
  chainId: defaultFromChainId,
29355
29192
  direction: "from",
@@ -29361,7 +29198,6 @@ const useSwap = () => {
29361
29198
  defaultTokensPerChain,
29362
29199
  disabledChains,
29363
29200
  availableChains,
29364
- availableTokens,
29365
29201
  },
29366
29202
  chainId: defaultToChainId,
29367
29203
  direction: "to",
@@ -29386,7 +29222,6 @@ const useSwap = () => {
29386
29222
  initialAssets,
29387
29223
  disabledChains,
29388
29224
  availableChains,
29389
- availableTokens,
29390
29225
  defaultTokensPerChain,
29391
29226
  tokens,
29392
29227
  ]);
@@ -31178,18 +31013,17 @@ function useNativeTokenForChain(chain) {
31178
31013
  return cantonTokens;
31179
31014
  }
31180
31015
  };
31181
- const tokens = getTokensForChainType();
31182
31016
  const nativeTokenForChainType = useMemo(() => {
31183
31017
  if (!chain)
31184
31018
  return undefined;
31185
- return findNativeToken(tokens, chain);
31186
- }, [chain, tokens]);
31019
+ return findNativeToken(getTokensForChainType(), chain);
31020
+ }, [chain]);
31187
31021
  return { nativeToken: nativeTokenForChainType };
31188
31022
  }
31189
31023
 
31190
31024
  const useEvmNativeBalance = ({ address, chain, }) => {
31191
31025
  const { isChainTypeConnected } = useWallet();
31192
- const { data: nativeEvmBalance, isLoading, isError, } = useBalance({
31026
+ const { data: nativeEvmBalance, isLoading } = useBalance({
31193
31027
  address: address,
31194
31028
  chainId: Number(chain?.chainId),
31195
31029
  query: {
@@ -31201,8 +31035,6 @@ const useEvmNativeBalance = ({ address, chain, }) => {
31201
31035
  },
31202
31036
  });
31203
31037
  const balance = useMemo(() => {
31204
- if (isArcChain(chain?.chainId) && isError)
31205
- return undefined;
31206
31038
  if (nativeEvmBalance?.decimals != null && nativeEvmBalance?.value != null) {
31207
31039
  if (chain?.chainId === CHAIN_IDS.HEDERA) {
31208
31040
  return {
@@ -31216,12 +31048,7 @@ const useEvmNativeBalance = ({ address, chain, }) => {
31216
31048
  };
31217
31049
  }
31218
31050
  return;
31219
- }, [
31220
- nativeEvmBalance?.decimals,
31221
- nativeEvmBalance?.value,
31222
- chain?.chainId,
31223
- isError,
31224
- ]);
31051
+ }, [nativeEvmBalance?.decimals, nativeEvmBalance?.value, chain?.chainId]);
31225
31052
  return {
31226
31053
  balance,
31227
31054
  isLoading,
@@ -31708,7 +31535,7 @@ function hederaWalletConnect(parameters) {
31708
31535
  const optionalChains = config.chains.map((x) => x.id);
31709
31536
  if (!optionalChains.length)
31710
31537
  return;
31711
- const { EthereumProvider } = await import('./index.es-BiK_wjSb.js');
31538
+ const { EthereumProvider } = await import('./index.es-Bm5GQH70.js');
31712
31539
  const rawProvider = await EthereumProvider.init({
31713
31540
  ...restParameters,
31714
31541
  disableProviderPing: true,
@@ -32932,6 +32759,12 @@ const isTempoChain = (chainId) => chainId === CHAIN_IDS.TEMPO;
32932
32759
  */
32933
32760
  const convertTempoFeeToStablecoinUnits = (feeIn18Dec) => feeIn18Dec / BigInt(10 ** 12);
32934
32761
 
32762
+ const arcUsdcTokenAddress = "0x3600000000000000000000000000000000000000";
32763
+ const isArcChain = (chainId) => chainId === CHAIN_IDS.ARC;
32764
+ const isArcUsdcToken = (token) => isArcChain(token?.chainId) &&
32765
+ token?.address.toLowerCase() === arcUsdcTokenAddress;
32766
+ const convertArcGasToUsdcUnits = (fee) => (fee + 10n ** 12n - 1n) / 10n ** 12n;
32767
+
32935
32768
  const DEFAULT_REFRESH_INTERVAL_MS = 15000;
32936
32769
  /**
32937
32770
  * Returns raw on-chain gas token data for Tempo chains, or null when the source
@@ -32998,6 +32831,30 @@ const useTempoFeeCheck = ({ fromChain, fromToken, }) => {
32998
32831
  };
32999
32832
  };
33000
32833
 
32834
+ const useArcFeeCheck = ({ fromChain, }) => {
32835
+ const { connectedAddresses } = useWallet();
32836
+ const { evmTokens } = useSquidTokens();
32837
+ const isArc = isArcChain(fromChain?.chainId);
32838
+ const gasToken = useMemo(() => {
32839
+ if (!isArc)
32840
+ return undefined;
32841
+ return evmTokens.find(isArcUsdcToken);
32842
+ }, [isArc, evmTokens]);
32843
+ const userAddress = connectedAddresses[ChainType.EVM];
32844
+ const { balance, isLoading } = useEvmBalance({
32845
+ chain: fromChain,
32846
+ token: gasToken,
32847
+ userAddress,
32848
+ enabled: isArc && !!gasToken,
32849
+ });
32850
+ if (!isArc || !gasToken || !userAddress || isLoading)
32851
+ return null;
32852
+ return {
32853
+ gasTokenAddress: gasToken.address,
32854
+ gasBalance: parseToBigInt(balance, gasToken.decimals),
32855
+ };
32856
+ };
32857
+
33001
32858
  /**
33002
32859
  * Hook that returns the gas token and chain fee params for a given source chain and token.
33003
32860
  */
@@ -33006,6 +32863,7 @@ function useSourceChainGasToken({ fromChain, fromToken, }) {
33006
32863
  const { evmTokens } = useSquidTokens();
33007
32864
  const { nativeBalance } = useNativeBalance(fromChain);
33008
32865
  const tempoFeeData = useTempoFeeCheck({ fromChain, fromToken });
32866
+ const arcFeeData = useArcFeeCheck({ fromChain });
33009
32867
  const chainFeeParams = useMemo(() => {
33010
32868
  if (fromToken?.address == null ||
33011
32869
  fromChain?.chainId == null ||
@@ -33024,24 +32882,14 @@ function useSourceChainGasToken({ fromChain, fromToken, }) {
33024
32882
  };
33025
32883
  }
33026
32884
  if (isArcChain(fromChain.chainId)) {
33027
- const isUsdc = isArcUsdcToken(fromToken);
33028
- const isNative = isArcNativeToken(fromToken);
33029
- if (fromToken.chainId !== fromChain.chainId ||
33030
- nativeBalance.decimals !== 18 ||
33031
- (isUsdc && fromToken.decimals !== 6) ||
33032
- (isNative && fromToken.decimals !== 18)) {
32885
+ if (!arcFeeData)
33033
32886
  return null;
33034
- }
32887
+ const fromTokenPaysGasFees = arcFeeData.gasTokenAddress.toLowerCase() ===
32888
+ fromToken.address.toLowerCase();
33035
32889
  return {
33036
- fromTokenPaysGasFees: isUsdc || isNative,
33037
- gasTokenBalanceWei: nativeBalance.value,
32890
+ fromTokenPaysGasFees,
32891
+ gasTokenBalanceWei: arcFeeData.gasBalance,
33038
32892
  normalizeFee: (fee) => fee,
33039
- fromAmountToGasUnits: isUsdc
33040
- ? (amount) => amount * 10n ** 12n
33041
- : undefined,
33042
- gasUnitsToFromAmount: isUsdc
33043
- ? (amount) => amount / 10n ** 12n
33044
- : undefined,
33045
32893
  };
33046
32894
  }
33047
32895
  return {
@@ -33051,11 +32899,12 @@ function useSourceChainGasToken({ fromChain, fromToken, }) {
33051
32899
  normalizeFee: (fee) => fee,
33052
32900
  };
33053
32901
  }, [
33054
- fromToken,
32902
+ fromToken?.address,
32903
+ fromToken?.type,
33055
32904
  fromChain?.chainId,
33056
32905
  nativeBalance?.value,
33057
- nativeBalance?.decimals,
33058
32906
  tempoFeeData,
32907
+ arcFeeData,
33059
32908
  ]);
33060
32909
  /**
33061
32910
  * The token to pay for gas on the source chain.
@@ -33070,22 +32919,18 @@ function useSourceChainGasToken({ fromChain, fromToken, }) {
33070
32919
  t.address.toLowerCase() === tempoFeeData.gasTokenAddress.toLowerCase());
33071
32920
  }
33072
32921
  if (isArcChain(fromChain.chainId)) {
33073
- return nativeToken?.decimals === 18
33074
- ? {
33075
- ...nativeToken,
33076
- symbol: fromChain.nativeCurrency.symbol,
33077
- name: fromChain.nativeCurrency.name,
33078
- }
33079
- : undefined;
32922
+ if (!arcFeeData)
32923
+ return undefined;
32924
+ return evmTokens.find((t) => t.chainId === fromChain.chainId &&
32925
+ t.address.toLowerCase() === arcFeeData.gasTokenAddress.toLowerCase());
33080
32926
  }
33081
32927
  return nativeToken;
33082
32928
  }, [
33083
32929
  fromChain?.chainId,
33084
- fromChain?.nativeCurrency.symbol,
33085
- fromChain?.nativeCurrency.name,
33086
32930
  fromToken?.address,
33087
32931
  nativeToken,
33088
32932
  tempoFeeData,
32933
+ arcFeeData,
33089
32934
  evmTokens,
33090
32935
  ]);
33091
32936
  return { gasToken, chainFeeParams };
@@ -33241,57 +33086,22 @@ const calculateTotalNativeFees = ({ expressFeeCost, firstFeeCost, firstGasCost,
33241
33086
  (sameTokenBetweenFees
33242
33087
  ? BigInt(firstFeeCost?.amount ?? "0") + BigInt(firstGasCost?.amount ?? "0")
33243
33088
  : BigInt(firstGasCost?.amount ?? "0"));
33244
- const addGasReserve = (fee) => (fee * 110n + 99n) / 100n;
33245
- const calculateArcGasCosts = (gasCosts) => {
33246
- const sourceGasCosts = gasCosts.filter((cost) => isArcChain(cost.token.chainId));
33247
- if (sourceGasCosts.length === 0)
33248
- return undefined;
33249
- let total = 0n;
33250
- for (const { amount, token } of sourceGasCosts) {
33251
- const fee = BigInt(amount);
33252
- if (fee <= 0n)
33253
- return undefined;
33254
- if (isArcUsdcToken(token) && token.decimals === 6) {
33255
- total += fee * 10n ** 12n;
33256
- }
33257
- else if (isArcNativeToken(token) && token.decimals === 18) {
33258
- total += fee;
33259
- }
33260
- else {
33261
- return undefined;
33262
- }
33263
- }
33264
- return total;
33265
- };
33266
- const calculateTotalGasBalanceNeeded = ({ fromAmount, networkFeesWei, chainFeeParams, }) => {
33267
- if (!chainFeeParams || networkFeesWei == null)
33268
- return undefined;
33269
- if (!chainFeeParams.fromTokenPaysGasFees)
33270
- return networkFeesWei;
33271
- const amount = BigInt(fromAmount ?? "0");
33272
- const amountInGasUnits = chainFeeParams.fromAmountToGasUnits?.(amount) ?? amount;
33273
- return amountInGasUnits + networkFeesWei;
33274
- };
33275
33089
  const checkIsGasBalanceEnough = ({ fromAmount, networkFeesWei, chainFeeParams, }) => {
33276
33090
  if (!chainFeeParams)
33277
33091
  return false;
33278
- const total = calculateTotalGasBalanceNeeded({
33279
- fromAmount,
33280
- networkFeesWei,
33281
- chainFeeParams,
33282
- });
33283
- return total != null && total <= chainFeeParams.gasTokenBalanceWei;
33092
+ if (chainFeeParams.fromTokenPaysGasFees) {
33093
+ return (BigInt(fromAmount ?? "0") + networkFeesWei <=
33094
+ chainFeeParams.gasTokenBalanceWei);
33095
+ }
33096
+ return networkFeesWei <= chainFeeParams.gasTokenBalanceWei;
33284
33097
  };
33285
33098
  const calculateMinAmountValueWarnMsg = ({ networkFeesWei, chainFeeParams, fromTokenDecimals, }) => {
33286
- if (!chainFeeParams?.fromTokenPaysGasFees || networkFeesWei == null)
33099
+ if (!chainFeeParams?.fromTokenPaysGasFees)
33287
33100
  return undefined;
33288
33101
  const minAmount = chainFeeParams.gasTokenBalanceWei - networkFeesWei;
33289
33102
  if (minAmount <= BigInt(0))
33290
33103
  return undefined;
33291
- const amountInTokenUnits = chainFeeParams.gasUnitsToFromAmount?.(minAmount) ?? minAmount;
33292
- if (amountInTokenUnits <= 0n)
33293
- return undefined;
33294
- return formatBNToReadable(amountInTokenUnits, fromTokenDecimals);
33104
+ return formatBNToReadable(minAmount, fromTokenDecimals);
33295
33105
  };
33296
33106
  /**
33297
33107
  * Calculates the estimated duration of a route
@@ -33340,22 +33150,14 @@ const calculateEstimateResults = ({ squidRoute, tokens, fromChain, toChain, coll
33340
33150
  const expectedGasRefundCostUSD = convertTokenAmountToUSD(formatBNToReadable(expectedGasRefundCost, firstFeeCost?.token.decimals ?? 18), firstFeeCost?.token.usdPrice ?? "0");
33341
33151
  const sameTokenBetweenFees = firstFeeCost?.token.address === firstGasCost?.token.address &&
33342
33152
  firstFeeCost?.token.chainId === firstGasCost?.token.chainId;
33343
- const totalNativeFees = isArcChain(fromChain?.chainId)
33344
- ? calculateArcGasCosts(allGasCosts)
33345
- : calculateTotalNativeFees({
33346
- expressFeeCost,
33347
- firstFeeCost,
33348
- firstGasCost,
33349
- sameTokenBetweenFees,
33350
- });
33351
- const totalFeesInNativeTokenPlusRatio = totalNativeFees == null
33352
- ? undefined
33353
- : isArcChain(fromChain?.chainId)
33354
- ? addGasReserve(totalNativeFees)
33355
- : (totalNativeFees * BigInt(110)) / BigInt(100);
33356
- const networkFeesWei = totalFeesInNativeTokenPlusRatio == null
33357
- ? undefined
33358
- : chainFeeParams?.normalizeFee(totalFeesInNativeTokenPlusRatio);
33153
+ const totalNativeFees = calculateTotalNativeFees({
33154
+ expressFeeCost,
33155
+ firstFeeCost,
33156
+ firstGasCost,
33157
+ sameTokenBetweenFees,
33158
+ });
33159
+ const totalFeesInNativeTokenPlusRatio = (totalNativeFees * BigInt(110)) / BigInt(100);
33160
+ const networkFeesWei = chainFeeParams?.normalizeFee(totalFeesInNativeTokenPlusRatio) ?? BigInt(0);
33359
33161
  const isGasBalanceEnough = checkIsGasBalanceEnough({
33360
33162
  chainFeeParams,
33361
33163
  fromAmount,
@@ -33371,12 +33173,10 @@ const calculateEstimateResults = ({ squidRoute, tokens, fromChain, toChain, coll
33371
33173
  estimatedRouteDuration: squidRoute?.estimate?.estimatedRouteDuration,
33372
33174
  isSingleChainRoute,
33373
33175
  });
33374
- const totalGasBalanceNeeded = calculateTotalGasBalanceNeeded({
33375
- fromAmount,
33376
- networkFeesWei,
33377
- chainFeeParams,
33378
- });
33379
- const gasBalanceNeeded = gasToken && totalGasBalanceNeeded != null
33176
+ // gas fees + fromAmount (if fromToken is gas token)
33177
+ const totalGasBalanceNeeded = networkFeesWei +
33178
+ BigInt(chainFeeParams?.fromTokenPaysGasFees ? (fromAmount ?? 0) : 0);
33179
+ const gasBalanceNeeded = gasToken
33380
33180
  ? formatBNToReadable(totalGasBalanceNeeded, gasToken.decimals)
33381
33181
  : undefined;
33382
33182
  return {
@@ -33398,7 +33198,7 @@ const calculateEstimateResults = ({ squidRoute, tokens, fromChain, toChain, coll
33398
33198
  expectedGasRefundCostUSD,
33399
33199
  sameTokenBetweenFees,
33400
33200
  fromTokenPaysGasFees: chainFeeParams?.fromTokenPaysGasFees ?? false,
33401
- totalNativeFees: totalNativeFees ?? 0n,
33201
+ totalNativeFees,
33402
33202
  isGasBalanceEnough,
33403
33203
  minAmountValueWarnMsg,
33404
33204
  estimatedRouteDuration,
@@ -33447,12 +33247,8 @@ function useSendTransactionGas({ chain, token, from, }) {
33447
33247
  case ChainType.EVM: {
33448
33248
  const client = await getClient(chain);
33449
33249
  const feeData = await client.getFeeData();
33450
- if (!feeData.maxFeePerGas) {
33451
- if (isArcChain(chain.chainId)) {
33452
- throw new Error("Gas price is unavailable");
33453
- }
33250
+ if (!feeData.maxFeePerGas)
33454
33251
  return BigInt(0);
33455
- }
33456
33252
  let maxFeePerGas = feeData.maxFeePerGas;
33457
33253
  if (token.chainId === CHAIN_IDS.HEDERA) {
33458
33254
  maxFeePerGas = scaleWeiToHbar(BigInt(feeData.maxFeePerGas));
@@ -33472,9 +33268,6 @@ function useSendTransactionGas({ chain, token, from, }) {
33472
33268
  value: 1,
33473
33269
  chainId: chain.chainId,
33474
33270
  });
33475
- if (isArcChain(chain.chainId) && gas <= 0n) {
33476
- throw new Error("Gas estimate is unavailable");
33477
- }
33478
33271
  return gas * maxFeePerGas;
33479
33272
  }
33480
33273
  const erc20Interface = new Interface(erc20Abi);
@@ -33489,14 +33282,14 @@ function useSendTransactionGas({ chain, token, from, }) {
33489
33282
  chainId: chain.chainId,
33490
33283
  });
33491
33284
  const feeWei = gas * maxFeePerGas;
33492
- if (isArcChain(chain.chainId) && feeWei <= 0n) {
33493
- throw new Error("Gas estimate is unavailable");
33494
- }
33495
33285
  // Tempo gas fees are denominated 18 units,
33496
33286
  // this value needs to be scaled to 6 decimals
33497
33287
  if (chain.chainId === CHAIN_IDS.TEMPO) {
33498
33288
  return convertTempoFeeToStablecoinUnits(feeWei);
33499
33289
  }
33290
+ if (isArcChain(chain.chainId)) {
33291
+ return convertArcGasToUsdcUnits(feeWei);
33292
+ }
33500
33293
  return feeWei;
33501
33294
  }
33502
33295
  case ChainType.COSMOS: {
@@ -33539,45 +33332,35 @@ function useSendTransactionGas({ chain, token, from, }) {
33539
33332
  }
33540
33333
 
33541
33334
  function useEstimateSendTransaction({ chain, token, amount, balance, from, }) {
33542
- const { data, isLoading, isFetching, isError, refetch } = useSendTransactionGas({
33335
+ const { data: estimatedGas = BigInt(0), isLoading } = useSendTransactionGas({
33543
33336
  chain,
33544
33337
  token,
33545
33338
  from,
33546
33339
  });
33547
- const estimatedGas = isError || isFetching ? undefined : data;
33548
- const networkFeesWei = estimatedGas == null
33549
- ? undefined
33550
- : isArcChain(chain?.chainId)
33551
- ? addGasReserve(estimatedGas)
33552
- : estimatedGas;
33553
33340
  const { chainFeeParams, gasToken } = useSourceChainGasToken({
33554
33341
  fromChain: chain,
33555
33342
  fromToken: token,
33556
33343
  });
33557
33344
  const isGasBalanceEnough = useMemo(() => {
33558
- if (!amount || token?.decimals == null || !gasToken)
33345
+ if (!amount || !token?.decimals)
33559
33346
  return false;
33560
33347
  return checkIsGasBalanceEnough({
33561
33348
  fromAmount: parseToBigInt(amount, token.decimals).toString(),
33562
- networkFeesWei,
33349
+ networkFeesWei: estimatedGas,
33563
33350
  chainFeeParams,
33564
33351
  });
33565
- }, [amount, networkFeesWei, token, chainFeeParams, gasToken]);
33352
+ }, [amount, estimatedGas, token, chainFeeParams]);
33566
33353
  const gasBalanceNeeded = useMemo(() => {
33567
- if (!amount || token?.decimals == null || gasToken?.decimals == null)
33568
- return undefined;
33569
- const totalGasBalanceNeeded = calculateTotalGasBalanceNeeded({
33570
- fromAmount: parseToBigInt(amount, token.decimals).toString(),
33571
- networkFeesWei,
33572
- chainFeeParams,
33573
- });
33574
- if (totalGasBalanceNeeded == null)
33354
+ if (!amount || !token?.decimals || !gasToken?.decimals)
33575
33355
  return undefined;
33356
+ // gas fees + fromAmount (if fromToken is gas token)
33357
+ const totalGasBalanceNeeded = estimatedGas +
33358
+ parseToBigInt(chainFeeParams?.fromTokenPaysGasFees ? (amount ?? "0") : "0", token.decimals);
33576
33359
  return formatBNToReadable(totalGasBalanceNeeded, gasToken.decimals);
33577
33360
  }, [
33578
33361
  amount,
33579
- chainFeeParams,
33580
- networkFeesWei,
33362
+ chainFeeParams?.fromTokenPaysGasFees,
33363
+ estimatedGas,
33581
33364
  gasToken?.decimals,
33582
33365
  token?.decimals,
33583
33366
  ]);
@@ -33588,22 +33371,20 @@ function useEstimateSendTransaction({ chain, token, amount, balance, from, }) {
33588
33371
  parseToBigInt(amount, token.decimals));
33589
33372
  }, [amount, balance, token?.decimals]);
33590
33373
  const minAmountValueWarnMsg = useMemo(() => {
33591
- if (!token?.address || !gasToken || !chainFeeParams)
33374
+ if (!token?.address || !estimatedGas || !chainFeeParams)
33592
33375
  return undefined;
33593
33376
  return calculateMinAmountValueWarnMsg({
33594
33377
  chainFeeParams,
33595
- networkFeesWei,
33378
+ networkFeesWei: estimatedGas,
33596
33379
  fromTokenDecimals: token.decimals,
33597
33380
  });
33598
- }, [networkFeesWei, token, chainFeeParams, gasToken]);
33381
+ }, [estimatedGas, token, chainFeeParams]);
33599
33382
  return {
33600
33383
  estimatedGas,
33601
33384
  gasBalanceNeeded,
33602
33385
  isBalanceEnough,
33603
33386
  tokenPaysGasFees: chainFeeParams?.fromTokenPaysGasFees ?? false,
33604
- isLoading: isLoading || isFetching,
33605
- isError,
33606
- refetchGasEstimate: refetch,
33387
+ isLoading,
33607
33388
  isGasBalanceEnough,
33608
33389
  minAmountValueWarnMsg,
33609
33390
  };
@@ -34504,19 +34285,6 @@ const useApproval = ({ squidRoute, }) => {
34504
34285
  const { getChainType } = useSquidChains();
34505
34286
  const { switchChainAsync } = useSwitchChain();
34506
34287
  const { connectedAddress: { address: sourceUserAddress }, } = useMultiChainWallet(fromChain);
34507
- const arcNativeBalanceQuery = useBalance({
34508
- address: sourceUserAddress,
34509
- chainId: Number(fromChain?.chainId),
34510
- query: { enabled: false },
34511
- });
34512
- const arcTokenBalanceQuery = useReadContract({
34513
- address: fromToken?.address,
34514
- abi: erc20Abi,
34515
- functionName: "balanceOf",
34516
- args: [sourceUserAddress],
34517
- chainId: Number(fromChain?.chainId),
34518
- query: { enabled: false },
34519
- });
34520
34288
  const isSagaEvmSameChainSwap = isSameChain &&
34521
34289
  fromChain?.chainId.toString() === CHAIN_IDS.SAGA_EVM.toString();
34522
34290
  // Swaps on SagaEVM are regular EVM transactions, following the standard ERC20 approve/allowance mechanism.
@@ -34677,20 +34445,13 @@ const useApproval = ({ squidRoute, }) => {
34677
34445
  return false;
34678
34446
  }
34679
34447
  }, {
34680
- onSuccess: async (approved) => {
34681
- if (approved && isArcChain(fromChain?.chainId)) {
34682
- await Promise.all([
34683
- arcNativeBalanceQuery.refetch({ throwOnError: true }),
34684
- arcTokenBalanceQuery.refetch({ throwOnError: true }),
34685
- ]);
34686
- queryClient.invalidateQueries(getPrefixKey(QueryKeys.AllTokensBalance));
34687
- }
34448
+ onSuccess: async () => {
34688
34449
  await allowanceQuery?.refetch();
34689
34450
  queryClient.invalidateQueries(getPrefixKey(QueryKeys.RouteApproved));
34690
34451
  // After an approval, we refetch the transaction query with all required parameters
34691
34452
  // This is to ensure we're using the latest expiry timestamp
34692
34453
  if (squidRoute) {
34693
- await queryClient.refetchQueries({
34454
+ queryClient.refetchQueries({
34694
34455
  queryKey: keys().transaction(squidRoute.params.fromChain, squidRoute.params.toChain, squidRoute.params.toToken, squidRoute.params.fromToken, fromPrice, squidRoute.params.slippage, squidRoute.params.fromAddress, squidRoute.params.bypassGuardrails, squidRoute.params.toAddress, squidRoute.params.fallbackAddresses?.[0]?.address, squidRoute.params.quoteOnly, getChainType(squidRoute.params.fromChain), squidRoute.params.preHook, squidRoute.params.postHook,
34695
34456
  // TODO: update types
34696
34457
  squidRoute.params?.overrideGasRefundAddress),
@@ -39466,5 +39227,5 @@ const SquidProvider = ({ children, config, placeholder, }) => {
39466
39227
  React.createElement(CosmosProvider, null, children))))))))))) : (placeholder);
39467
39228
  };
39468
39229
 
39469
- export { useWalletStore as $, AxelarStatusResponseType as A, useHederaAccountActivation as B, CHAIN_IDS as C, DEFAULT_LOCALE as D, useHederaTokenAssociations as E, useKeyboardNavigation as F, useSquidQueryClient as G, HistoryTxType as H, useSquid as I, useStellarAccountActivation as J, useStellarTrustLine as K, useAddressBookStore as L, useAssetsColorsStore as M, Nr as N, useFavoriteTokensStore as O, useHistoryStore as P, QueryKeys as Q, useSendTransactionStore as R, SquidStatusErrorType as S, TransactionErrorType as T, useConfigStore as U, useSquidStore as V, Wo as W, XamanXrplNetwork as X, useSwapRoutePersistStore as Y, useTransactionStore as Z, ConnectingWalletStatus as _, WindowWalletFlag as a, useAvailableQuotes as a$, useDepositAddress as a0, useSwap as a1, buildUrlSearchParamsFromSwapEvent as a2, parseInitialAssetsFromUrl as a3, useUrlSwapParams as a4, useAllConnectedWalletBalances as a5, useAllTokensWithBalanceForChainType as a6, useCosmosBalance as a7, useEvmBalance as a8, useMultiChainBalance as a9, useRouteWarnings as aA, useSendTransactionStatus as aB, useSwapTransactionStatus as aC, useAvatar as aD, useHistory as aE, useDebouncedValue as aF, useAddToken as aG, useAutoConnect as aH, useEnsDataForAddress as aI, useEnsSearch as aJ, useGnosisContext as aK, useIsSameAddressAndGnosisContext as aL, useIntegratorContext as aM, useMultiChainWallet as aN, useSigner as aO, useWallet as aP, useWallets as aQ, useXrplTrustLine as aR, TX_STATUS_CONSTANTS as aS, FINAL_TRANSACTION_STATUSES as aT, useGetFiatQuote as aU, useGetOnRampConfig as aV, useExecuteFiatQuote as aW, useFiatOnRampTxStatus as aX, useFiatTransactions as aY, useCurrencyDetails as aZ, useCountryDetails as a_, useMultipleTokenPrices as aa, useBitcoinNativeBalance as ab, useCosmosNativeBalance as ac, useEvmNativeBalance as ad, useNativeBalance as ae, useSolanaNativeBalance as af, useStellarNativeBalance as ag, useSuiNativeBalance as ah, useXrplNativeBalance as ai, useNativeTokenForChain as aj, useSingleTokenPrice as ak, useSourceChainGasToken as al, useSquidTokens as am, useHistoricalData as an, useTokensData as ao, useEstimateSendTransaction as ap, useSendTransaction as aq, useSendTransactionGas as ar, useAllTransactionsStatus as as, useApproval as at, useDepositTransactionStatus as au, useEstimate as av, useEstimatePriceImpact as aw, useExecuteTransaction as ax, useGetRoute as ay, useGetRouteWrapper as az, DEFAULT_ROUTE_REFETCH_INTERVAL as b, WidgetEvents as b$, useRecommendedQuote as b0, useGetOnrampPaymentTypes as b1, useSuggestedFiatAmounts as b2, SquidProvider as b3, EnsService as b4, getXummClient as b5, isXamanXAppContext as b6, getQueryHeaders as b7, getStatusCode as b8, is404Error as b9, getConfigWithDefaults as bA, randomIntFromInterval as bB, getTokensForChain as bC, getFirstAvailableChainId as bD, fetchHighestBalanceToken as bE, getTokenAddressForSelection as bF, getInitialOrDefaultTokenAddressForChain as bG, getInitialTokenAddressForChain as bH, filterTokensForDestination as bI, getInitialChainIdFromConfig as bJ, getCosmosKey as bK, getKeysSettled as bL, getAllKeysForSupportedCosmosChains as bM, isCosmosAddressValid as bN, getCosmosSigningClient as bO, getCosmosChainInfosObject as bP, connectCosmosWallet as bQ, isFallbackAddressNeeded as bR, suggestChainOrThrow as bS, normalizeError as bT, transactionErrorCode as bU, isUserRejectionError as bV, getTransactionError as bW, handleTransactionErrorEvents as bX, isSwapRouteError as bY, isStatusError as bZ, createQuoteRequestParamsHash as b_, assetsBaseUrl as ba, shareSubgraphId as bb, sortTokensBySharedSubgraphIds as bc, getSupportedChainIdsForDirection as bd, filterChains as be, filterTokens as bf, getTokenImage as bg, normalizeSwapParamsForSelection as bh, getNewSwapParamsFromInput as bi, sortAllTokens as bj, findToken as bk, findNativeToken as bl, normalizeIbcAddress as bm, groupTokensBySymbol as bn, groupTokensByChainId as bo, filterViewableTokens as bp, getSecretNetworkBalances as bq, getTokenAssetsKey as br, fetchAssetsColors as bs, isSupportedChainType as bt, initializeSquidData as bu, isEmptyObject as bv, normalizeTokenSymbol as bw, areTokenSymbolsCompatible as bx, isEvmosChain as by, resolveChainIdFromAsset as bz, chainTypeToNativeTokenAddressMap as c, getSwapTxStatusRefetchInterval as c$, EvmNetworkNotSupportedErrorCode as c0, addEthereumChain as c1, parseEvmAddress as c2, formatEvmWallet as c3, filterWagmiConnector as c4, waitForReceiptWithRetry as c5, getUserCountry as c6, getCountryData as c7, getCurrencyData as c8, adaptiveRound as c9, getStellarTrustLineAsset as cA, isStellarToken as cB, isStellarIssuedToken as cC, getStellarHorizonApiUrl as cD, isValidIssuedAsset as cE, isValidHorizonAsset as cF, formatTransactionHistoryDate as cG, getAxelarExplorerTxUrl as cH, getSourceExplorerTxUrl as cI, getMainExplorerUrl as cJ, formatDistance as cK, formatSeconds as cL, formatSwapTxStatusResponseForStorage as cM, simplifyRouteAction as cN, fetchSwapTransactionStatus as cO, compareTransactionIds as cP, isCoralBridgeAction as cQ, isActionCompletedOnSourceTx as cR, sleep as cS, isChainflipDepositRoute as cT, isChainflipBridgeTransaction as cU, isOnChainTxData as cV, isDepositAddressDirectTransferRoute as cW, getHistoryTransactionId as cX, getStepStatuses as cY, getHalfSuccessState as cZ, getStepsInfos as c_, getSuggestedAmountsForCurrency as ca, HederaExtensionHelper as cb, convertHederaAccountIdToEvmAddress as cc, convertEvmAddressToHederaAccountId as cd, scaleHbarToWei as ce, scaleWeiToHbar as cf, parseToBigInt as cg, roundNumericValue as ch, formatUnitsRounded as ci, formatTokenAmount as cj, formatUsdAmount as ck, trimExtraDecimals as cl, getNumericValue as cm, cleanAmount as cn, convertTokenAmountToUSD as co, convertUSDToTokenAmount as cp, calculateTotal24hChange as cq, getRouteExpiry as cr, searchTokens as cs, filterSolanaWallets as ct, isSolanaAddressValid as cu, executeSolanaSwap as cv, executeSolanaTransfer as cw, isStellarAddressValid as cx, getStellarNetwork as cy, stellarAddressToScVal as cz, definedInWindow as d, getSendTxStatusRefetchInterval as d0, chainflipMultihopBridgeType as d1, getBridgeType as d2, getTransactionStatus as d3, getTransactionEndStatus as d4, isHistoryTransactionPending as d5, isHistoryTransactionFailed as d6, isHistoryTransactionWarning as d7, isHistoryTransactionEnded as d8, formatHash as d9, isWalletAddressValid as da, redirectToExtensionsStore as db, populateWallets as dc, buildFallbackWallets as dd, getDefaultChain as de, sortWallets as df, areSameAddress as dg, sortAddressBook as dh, calculateTotalUsdBalanceUSD as di, addTokenToWallet as dj, isEvmChainNotSupportedError as dk, getWalletSupportedChainTypes as dl, getConnectorForChainType as dm, walletSupportsChainType as dn, connectWallet as dp, cancelConnectWallet as dq, isProblematicConnector as dr, mergeWallets as ds, isXionSmartContractAddress as dt, isXrplAddressValid as du, buildXrplTrustSetTx as dv, getXrplNetwork as dw, parseXrplPaymentTx as dx, parseXrplTokenAddress as dy, er as e, formatBNToReadable as f, chainTypeToZeroAddressMap as g, destinationAddressResetValue as h, fallbackAddressResetValue as i, nativeCantonTokenAddress as j, nativeCosmosTokenAddress as k, nativeEvmTokenAddress as l, nativeSolanaTokenAddress as m, nativeBitcoinTokenAddress as n, nativeStellarTokenAddress as o, nativeSuiTokenAddress as p, nativeXrplTokenAddress as q, CosmosProvider as r, SendTransactionStatus as s, TransactionStatus as t, useCosmosContext as u, useTrackSearchEmpty as v, walletIconBaseUrl as w, useSquidChains as x, useClient as y, useCosmosForChain as z };
39470
- //# sourceMappingURL=index-CLzjMzS_.js.map
39230
+ export { useWalletStore as $, AxelarStatusResponseType as A, useHederaAccountActivation as B, CHAIN_IDS as C, DEFAULT_LOCALE as D, useHederaTokenAssociations as E, useKeyboardNavigation as F, useSquidQueryClient as G, HistoryTxType as H, useSquid as I, useStellarAccountActivation as J, useStellarTrustLine as K, useAddressBookStore as L, useAssetsColorsStore as M, Nr as N, useFavoriteTokensStore as O, useHistoryStore as P, QueryKeys as Q, useSendTransactionStore as R, SquidStatusErrorType as S, TransactionErrorType as T, useConfigStore as U, useSquidStore as V, Wo as W, XamanXrplNetwork as X, useSwapRoutePersistStore as Y, useTransactionStore as Z, ConnectingWalletStatus as _, WindowWalletFlag as a, useAvailableQuotes as a$, useDepositAddress as a0, useSwap as a1, buildUrlSearchParamsFromSwapEvent as a2, parseInitialAssetsFromUrl as a3, useUrlSwapParams as a4, useAllConnectedWalletBalances as a5, useAllTokensWithBalanceForChainType as a6, useCosmosBalance as a7, useEvmBalance as a8, useMultiChainBalance as a9, useRouteWarnings as aA, useSendTransactionStatus as aB, useSwapTransactionStatus as aC, useAvatar as aD, useHistory as aE, useDebouncedValue as aF, useAddToken as aG, useAutoConnect as aH, useEnsDataForAddress as aI, useEnsSearch as aJ, useGnosisContext as aK, useIsSameAddressAndGnosisContext as aL, useIntegratorContext as aM, useMultiChainWallet as aN, useSigner as aO, useWallet as aP, useWallets as aQ, useXrplTrustLine as aR, TX_STATUS_CONSTANTS as aS, FINAL_TRANSACTION_STATUSES as aT, useGetFiatQuote as aU, useGetOnRampConfig as aV, useExecuteFiatQuote as aW, useFiatOnRampTxStatus as aX, useFiatTransactions as aY, useCurrencyDetails as aZ, useCountryDetails as a_, useMultipleTokenPrices as aa, useBitcoinNativeBalance as ab, useCosmosNativeBalance as ac, useEvmNativeBalance as ad, useNativeBalance as ae, useSolanaNativeBalance as af, useStellarNativeBalance as ag, useSuiNativeBalance as ah, useXrplNativeBalance as ai, useNativeTokenForChain as aj, useSingleTokenPrice as ak, useSourceChainGasToken as al, useSquidTokens as am, useHistoricalData as an, useTokensData as ao, useEstimateSendTransaction as ap, useSendTransaction as aq, useSendTransactionGas as ar, useAllTransactionsStatus as as, useApproval as at, useDepositTransactionStatus as au, useEstimate as av, useEstimatePriceImpact as aw, useExecuteTransaction as ax, useGetRoute as ay, useGetRouteWrapper as az, DEFAULT_ROUTE_REFETCH_INTERVAL as b, addEthereumChain as b$, useRecommendedQuote as b0, useGetOnrampPaymentTypes as b1, useSuggestedFiatAmounts as b2, SquidProvider as b3, EnsService as b4, getXummClient as b5, isXamanXAppContext as b6, getQueryHeaders as b7, getStatusCode as b8, is404Error as b9, randomIntFromInterval as bA, getTokensForChain as bB, getFirstAvailableChainId as bC, fetchHighestBalanceToken as bD, getInitialOrDefaultTokenAddressForChain as bE, getInitialTokenAddressForChain as bF, filterTokensForDestination as bG, getInitialChainIdFromConfig as bH, getCosmosKey as bI, getKeysSettled as bJ, getAllKeysForSupportedCosmosChains as bK, isCosmosAddressValid as bL, getCosmosSigningClient as bM, getCosmosChainInfosObject as bN, connectCosmosWallet as bO, isFallbackAddressNeeded as bP, suggestChainOrThrow as bQ, normalizeError as bR, transactionErrorCode as bS, isUserRejectionError as bT, getTransactionError as bU, handleTransactionErrorEvents as bV, isSwapRouteError as bW, isStatusError as bX, createQuoteRequestParamsHash as bY, WidgetEvents as bZ, EvmNetworkNotSupportedErrorCode as b_, assetsBaseUrl as ba, shareSubgraphId as bb, sortTokensBySharedSubgraphIds as bc, getSupportedChainIdsForDirection as bd, filterChains as be, filterTokens as bf, getTokenImage as bg, getNewSwapParamsFromInput as bh, sortAllTokens as bi, findToken as bj, findNativeToken as bk, normalizeIbcAddress as bl, groupTokensBySymbol as bm, groupTokensByChainId as bn, filterViewableTokens as bo, getSecretNetworkBalances as bp, getTokenAssetsKey as bq, fetchAssetsColors as br, isSupportedChainType as bs, initializeSquidData as bt, isEmptyObject as bu, normalizeTokenSymbol as bv, areTokenSymbolsCompatible as bw, isEvmosChain as bx, resolveChainIdFromAsset as by, getConfigWithDefaults as bz, chainTypeToNativeTokenAddressMap as c, chainflipMultihopBridgeType as c$, parseEvmAddress as c0, formatEvmWallet as c1, filterWagmiConnector as c2, waitForReceiptWithRetry as c3, getUserCountry as c4, getCountryData as c5, getCurrencyData as c6, adaptiveRound as c7, getSuggestedAmountsForCurrency as c8, HederaExtensionHelper as c9, isStellarIssuedToken as cA, getStellarHorizonApiUrl as cB, isValidIssuedAsset as cC, isValidHorizonAsset as cD, formatTransactionHistoryDate as cE, getAxelarExplorerTxUrl as cF, getSourceExplorerTxUrl as cG, getMainExplorerUrl as cH, formatDistance as cI, formatSeconds as cJ, formatSwapTxStatusResponseForStorage as cK, simplifyRouteAction as cL, fetchSwapTransactionStatus as cM, compareTransactionIds as cN, isCoralBridgeAction as cO, isActionCompletedOnSourceTx as cP, sleep as cQ, isChainflipDepositRoute as cR, isChainflipBridgeTransaction as cS, isOnChainTxData as cT, isDepositAddressDirectTransferRoute as cU, getHistoryTransactionId as cV, getStepStatuses as cW, getHalfSuccessState as cX, getStepsInfos as cY, getSwapTxStatusRefetchInterval as cZ, getSendTxStatusRefetchInterval as c_, convertHederaAccountIdToEvmAddress as ca, convertEvmAddressToHederaAccountId as cb, scaleHbarToWei as cc, scaleWeiToHbar as cd, parseToBigInt as ce, roundNumericValue as cf, formatUnitsRounded as cg, formatTokenAmount as ch, formatUsdAmount as ci, trimExtraDecimals as cj, getNumericValue as ck, cleanAmount as cl, convertTokenAmountToUSD as cm, convertUSDToTokenAmount as cn, calculateTotal24hChange as co, getRouteExpiry as cp, searchTokens as cq, filterSolanaWallets as cr, isSolanaAddressValid as cs, executeSolanaSwap as ct, executeSolanaTransfer as cu, isStellarAddressValid as cv, getStellarNetwork as cw, stellarAddressToScVal as cx, getStellarTrustLineAsset as cy, isStellarToken as cz, definedInWindow as d, getBridgeType as d0, getTransactionStatus as d1, getTransactionEndStatus as d2, isHistoryTransactionPending as d3, isHistoryTransactionFailed as d4, isHistoryTransactionWarning as d5, isHistoryTransactionEnded as d6, formatHash as d7, isWalletAddressValid as d8, redirectToExtensionsStore as d9, populateWallets as da, buildFallbackWallets as db, getDefaultChain as dc, sortWallets as dd, areSameAddress as de, sortAddressBook as df, calculateTotalUsdBalanceUSD as dg, addTokenToWallet as dh, isEvmChainNotSupportedError as di, getWalletSupportedChainTypes as dj, getConnectorForChainType as dk, walletSupportsChainType as dl, connectWallet as dm, cancelConnectWallet as dn, isProblematicConnector as dp, mergeWallets as dq, isXionSmartContractAddress as dr, isXrplAddressValid as ds, buildXrplTrustSetTx as dt, getXrplNetwork as du, parseXrplPaymentTx as dv, parseXrplTokenAddress as dw, er as e, formatBNToReadable as f, chainTypeToZeroAddressMap as g, destinationAddressResetValue as h, fallbackAddressResetValue as i, nativeCantonTokenAddress as j, nativeCosmosTokenAddress as k, nativeEvmTokenAddress as l, nativeSolanaTokenAddress as m, nativeBitcoinTokenAddress as n, nativeStellarTokenAddress as o, nativeSuiTokenAddress as p, nativeXrplTokenAddress as q, CosmosProvider as r, SendTransactionStatus as s, TransactionStatus as t, useCosmosContext as u, useTrackSearchEmpty as v, walletIconBaseUrl as w, useSquidChains as x, useClient as y, useCosmosForChain as z };
39231
+ //# sourceMappingURL=index-BVneqIL5.js.map