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