diff --git a/chain-registry b/chain-registry index 5d701e5a..f98ec1eb 160000 --- a/chain-registry +++ b/chain-registry @@ -1 +1 @@ -Subproject commit 5d701e5adc29a3a07ec4a405ef81741c7c69f9ca +Subproject commit f98ec1ebedab7228ab2f7694c3892d2033bdb0f3 diff --git a/initia-registry b/initia-registry index 5027f21d..a85bd790 160000 --- a/initia-registry +++ b/initia-registry @@ -1 +1 @@ -Subproject commit 5027f21d76f73ce00d4a508fa706bb2c156a2973 +Subproject commit a85bd790639facf7ebe1c88f872245276cce692c diff --git a/package-lock.json b/package-lock.json index 9c0378b3..1e2903dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tooltip": "^1.0.7", "@sentry/nextjs": "^7.99.0", - "@skip-router/core": "4.1.1", + "@skip-router/core": "5.0.2", "@solana/spl-token": "^0.4.1", "@solana/wallet-adapter-react": "^0.15.35", "@solana/wallet-adapter-wallets": "^0.19.31", @@ -13484,9 +13484,9 @@ } }, "node_modules/@skip-router/core": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@skip-router/core/-/core-4.1.1.tgz", - "integrity": "sha512-N/H9V6XlWxWX4L8MwIkSyjBno+0zqkVeHG/vwB/PCMlK2HFBrY15CcpJPj8iuHB3aMho2kGIiOyFvnIeU/15pw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@skip-router/core/-/core-5.0.2.tgz", + "integrity": "sha512-6sGQbb6CDXjV8OwKvQ6SqWJw/FtJ7Uw6oVpe1bmRKCu1TwYvwisG3FYowJQ3SjAli/1RzQwtIOr7njf+QM8ghA==", "dependencies": { "@cosmjs/amino": "0.32.3", "@cosmjs/cosmwasm-stargate": "0.32.3", diff --git a/package.json b/package.json index b3026ab9..e10f1c7d 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tooltip": "^1.0.7", "@sentry/nextjs": "^7.99.0", - "@skip-router/core": "4.1.1", + "@skip-router/core": "5.0.2", "@solana/spl-token": "^0.4.1", "@solana/wallet-adapter-react": "^0.15.35", "@solana/wallet-adapter-wallets": "^0.19.31", diff --git a/src/components/SwapWidget/SwapDetails.tsx b/src/components/SwapWidget/SwapDetails.tsx index 1047a680..309270e8 100644 --- a/src/components/SwapWidget/SwapDetails.tsx +++ b/src/components/SwapWidget/SwapDetails.tsx @@ -201,9 +201,13 @@ export const SwapDetails = ({ {sourceFeeAsset && ( <>
Estimated Transaction Fee
-
- {gasRequired ?? "-"} {sourceFeeAsset.recommendedSymbol} -
+ {sourceChain.chainID !== "stride-1" ? ( +
+ {gasRequired ?? "-"} {sourceFeeAsset.recommendedSymbol} +
+ ) : ( +
--
+ )} )} {/*
Gas Amount
diff --git a/src/components/SwapWidget/useSwapWidget.ts b/src/components/SwapWidget/useSwapWidget.ts index 993d381d..7eb9240c 100644 --- a/src/components/SwapWidget/useSwapWidget.ts +++ b/src/components/SwapWidget/useSwapWidget.ts @@ -46,7 +46,7 @@ export function useSwapWidget() { const skipClient = useSkipClient(); - const { assetsByChainID, getFeeAsset, isReady: isAssetsReady } = useAssets(); + const { assetsByChainID, getFeeAsset, isReady: isAssetsReady, getAsset } = useAssets(); const { data: chains } = useChains(); const { getWalletRepo } = useCosmosManager(); @@ -149,7 +149,39 @@ export function useSwapWidget() { if (srcFeeAsset) { const parsedFeeBalance = BigNumber(balances[srcFeeAsset.denom] ?? "0").shiftedBy(-(srcFeeAsset.decimals ?? 6)); const parsedGasRequired = BigNumber(gasRequired || "0"); + if (srcChain?.chainID === "stride-1") { + const tiaIbcToken = "ibc/BF3B4F53F3694B66E13C23107C84B6485BD2B96296BB7EC680EA77BBA75B4801"; + const tiaOnStride = getAsset(tiaIbcToken, "stride-1"); + const parsedTiaOnStrideBalance = BigNumber(balances[tiaIbcToken] ?? "0").shiftedBy( + -(tiaOnStride?.decimals ?? 6), + ); + + const needTia = parsedTiaOnStrideBalance.minus(parsedGasRequired).isLessThanOrEqualTo(0); + const needFeeToken = parsedFeeBalance.minus(parsedGasRequired).isLessThanOrEqualTo(0); + const assetIsFeeDenom = srcFeeAsset.denom === srcAsset.denom; + const assetIsTiaDenom = srcAsset.denom === tiaIbcToken; + + if ( + parsedGasRequired.gt(0) && + (assetIsFeeDenom + ? parsedAmount.isGreaterThan(parsedBalance.minus(parsedGasRequired)) && needTia + : assetIsTiaDenom + ? parsedAmount.isGreaterThan(parsedTiaOnStrideBalance.minus(parsedGasRequired)) && needFeeToken + : needFeeToken + ? needTia + : needTia + ? needFeeToken + : false) + ) { + if (parsedAmount.isGreaterThan(parsedBalance)) { + return `Insufficient balance.`; + } + return `Insufficient balance. You need ≈${gasRequired} ${srcFeeAsset.recommendedSymbol} or ${tiaOnStride?.recommendedSymbol} to accomodate gas fees.`; + } + } + if ( + srcChain?.chainID !== "stride-1" && parsedGasRequired.gt(0) && (srcFeeAsset.denom === srcAsset.denom ? parsedAmount.isGreaterThan(parsedBalance.minus(parsedGasRequired)) @@ -164,7 +196,7 @@ export function useSwapWidget() { } return false; - }, [amountIn, balances, gasRequired, srcAsset, srcFeeAsset]); + }, [amountIn, balances, gasRequired, getAsset, srcAsset, srcChain?.chainID, srcFeeAsset]); const swapPriceImpactPercent = useMemo(() => { if (!route?.swapPriceImpactPercent) return undefined; diff --git a/src/hooks/useChains.ts b/src/hooks/useChains.ts index 94f25289..5b4e0388 100644 --- a/src/hooks/useChains.ts +++ b/src/hooks/useChains.ts @@ -24,7 +24,7 @@ export function useChains(args: UseChainsQueryArgs = {}) { const chains = await skipClient.chains({ includeEVM: true, includeSVM: true, - includeTestnets: process.env.NEXT_PUBLIC_IS_TESTNET ? true : false, + onlyTestnets: process.env.NEXT_PUBLIC_IS_TESTNET ? true : false, }); return chains