From 6b1ca9d7e27ff1022b45ae69ccfafb8de8392bc6 Mon Sep 17 00:00:00 2001 From: naturexie <786281870@qq.com> Date: Mon, 10 Feb 2025 07:56:30 +0800 Subject: [PATCH] feat: add extra estimate for tip --- hooks/useV1EstimateSwap.ts | 2 +- screens/Trading/components/TradingOperate.tsx | 66 +++++++++++++++---- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/hooks/useV1EstimateSwap.ts b/hooks/useV1EstimateSwap.ts index da974931..3875502e 100644 --- a/hooks/useV1EstimateSwap.ts +++ b/hooks/useV1EstimateSwap.ts @@ -59,7 +59,7 @@ export const useV1EstimateSwap = ({ return []; }, [tokenIn_id, tokenOut_id]); useEffect(() => { - if (!isEmpty(combinedAssetsData) && Number(tokenIn_amount) > 0) { + if (!isEmpty(combinedAssetsData) && Number(tokenIn_amount) > 0 && tokenIn_id && tokenOut_id) { getEstimateSwapData(); } }, [combinedAssetsData, tokenIn_id, tokenOut_id, tokenIn_amount, slippageTolerance, forceUpdate]); diff --git a/screens/Trading/components/TradingOperate.tsx b/screens/Trading/components/TradingOperate.tsx index d8f4a7b3..22e21ff2 100644 --- a/screens/Trading/components/TradingOperate.tsx +++ b/screens/Trading/components/TradingOperate.tsx @@ -104,6 +104,21 @@ const TradingOperate: React.FC = ({ onMobileClose, id }) => slippageTolerance: slippageTolerance / 100, forceUpdate, }); + // Long for tip to get max borrow amount TODO According to market conditions, if there is a real need, add + // const { estimateResult: estimateDataBurrowLimit, estimateLoading: estimateLoadingBurrowLimt } = + // useEstimateSwap({ + // tokenIn_id: ReduxcategoryAssets2?.token_id, + // tokenOut_id: ReduxcategoryAssets1?.token_id, + // tokenIn_amount: toDecimal( + // getAvailableLiquidityForMargin({ + // assetDebt: ReduxcategoryAssets2, + // marginConfig: config, + // }), + // ), + // account_id: accountId, + // slippageTolerance: slippageTolerance / 100, + // forceUpdate, + // }); // slippageTolerance change ecent useEffect(() => { dispatch(setSlippageToleranceFromRedux(0.5)); @@ -287,6 +302,18 @@ const TradingOperate: React.FC = ({ onMobileClose, id }) => {ReduxcategoryAssets1?.metadata?.symbol} , ); + // const max_position = estimateDataBurrowLimit?.amount_out || 0; + // setWarnTip( + // + // {tip_max_available_debt}{" "} + // {estimateLoadingBurrowLimt ? ( + // + // ) : ( + // beautifyPrice(Number(max_position || 0)) + // )}{" "} + // {ReduxcategoryAssets1?.metadata?.symbol} + // , + // ); } } else if (borrowLimit?.lowLoanLimit) { if (Number(price_1 || 0) > 0) { @@ -535,18 +562,10 @@ const TradingOperate: React.FC = ({ onMobileClose, id }) => function getBorrowLimit(assetDebt: Asset, debt_amount: number, marginConfig: IMarginConfigState) { const assetsMap = isMainStream ? assets.data : assetsMEME.data; const asset = assetsMap[assetDebt.token_id]; - const temp1 = new Decimal(asset.supplied.balance) - .plus(new Decimal(asset.reserved)) - .plus(asset.prot_fee) - .minus(new Decimal(asset.borrowed.balance || 0)) - .minus(new Decimal(asset.margin_debt.balance || 0)) - .minus(new Decimal(asset.margin_pending_debt || 0)); - const temp2 = temp1.minus(temp1.mul(0.001)).toFixed(0); - const availableLiquidity = Number( - shrinkToken(temp2, asset.metadata.decimals + asset.config.extra_decimals), - ); - const scale = marginConfig.pending_debt_scale / 10000; - const availableLiquidityForMargin = availableLiquidity * scale; + const availableLiquidityForMargin = getAvailableLiquidityForMargin({ + assetDebt, + marginConfig, + }); // asset.config.min_borrowed_amount; if (new Decimal(debt_amount || 0).gte(availableLiquidityForMargin || 0)) { return { @@ -565,6 +584,29 @@ const TradingOperate: React.FC = ({ onMobileClose, id }) => } } } + function getAvailableLiquidityForMargin({ + assetDebt, + marginConfig, + }: { + assetDebt: Asset; + marginConfig: IMarginConfigState; + }) { + const assetsMap = isMainStream ? assets.data : assetsMEME.data; + const asset = assetsMap[assetDebt.token_id]; + const temp1 = new Decimal(asset.supplied.balance) + .plus(new Decimal(asset.reserved)) + .plus(asset.prot_fee) + .minus(new Decimal(asset.borrowed.balance || 0)) + .minus(new Decimal(asset.margin_debt.balance || 0)) + .minus(new Decimal(asset.margin_pending_debt || 0)); + const temp2 = temp1.minus(temp1.mul(0.001)).toFixed(0); + const availableLiquidity = Number( + shrinkToken(temp2, asset.metadata.decimals + asset.config.extra_decimals), + ); + const scale = marginConfig.pending_debt_scale / 10000; + const availableLiquidityForMargin = availableLiquidity * scale; + return availableLiquidityForMargin; + } const buttonLoading = estimateLoading || forceUpdateLoading; return (