Skip to content

Commit

Permalink
feat: auto estimating optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
naturexie committed Jan 23, 2025
1 parent 701b6ee commit 3c0dab6
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 30 deletions.
27 changes: 16 additions & 11 deletions hooks/useEstimateSwap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,38 +37,43 @@ export const useEstimateSwap = ({
forceUpdate,
});
useEffect(() => {
if (dclEstimateResult?.tag && v1EstimateResult?.tag && validator()) {
if (
dclEstimateResult?.tag &&
v1EstimateResult?.tag &&
validator() &&
!v1Loading &&
!dclLoading
) {
getBestEstimateResult();
setEstimateLoading(false);
}
if (tokenIn_amount == "0" || !tokenIn_amount) {
setEstimateResult((prev: any) => {
if (prev?.amount_out !== "0" || !prev?.loadingComplete) {
return { ...prev, amount_out: "0", loadingComplete: true };
}
return prev;
});
if (!Number(tokenIn_amount || 0)) {
setEstimateLoading(false);
}
}, [
dclEstimateResult?.tag,
v1EstimateResult?.tag,
dclEstimateResult?.amount_out,
v1EstimateResult?.amount_out,
tokenIn_amount,
v1Loading,
dclLoading,
]);
useEffect(() => {
setEstimateLoading(v1Loading || dclLoading);
if (v1Loading || dclLoading) {
setEstimateLoading(true);
}
}, [v1Loading, dclLoading]);
function getBestEstimateResult() {
const { amount_out: dcl_amount_out } = dclEstimateResult!;
const { amount_out: v1_amount_out } = v1EstimateResult!;
console.log(dcl_amount_out, v1_amount_out, "dcl_amount_out, v1_amount_out");
// best is v1
if (new Decimal(v1_amount_out || 0).gt(dcl_amount_out || 0)) {
setEstimateResult({ ...v1EstimateResult, loadingComplete: true });
setEstimateResult(v1EstimateResult);
} else if (new Decimal(dcl_amount_out || 0).gt(v1_amount_out || 0)) {
// best is dcl
setEstimateResult({ ...dclEstimateResult, loadingComplete: true });
setEstimateResult(dclEstimateResult);
}
}
function validator() {
Expand Down
1 change: 0 additions & 1 deletion interfaces/margin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ export interface IEstimateResult {
fee: number;
tag: string;
from: "v1" | "dcl";
loadingComplete?: boolean;
}
export interface IPool {
amount_in?: string;
Expand Down
29 changes: 14 additions & 15 deletions screens/Trading/components/TradingOperate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
const [warnTip, setWarnTip] = useState<React.ReactElement | string>("");
const [LiqPrice, setLiqPrice] = useState<string>("");
const [forceUpdate, setForceUpdate] = useState<number>(0);
const [lastTokenInAmount, setLastTokenInAmount] = useState(0);
const customInputRef = useRef<HTMLInputElement>(null);
const accountId = useAppSelector(getAccountId);
const { filteredTokenTypeMap } = useRegisterTokenType();
Expand Down Expand Up @@ -129,14 +128,17 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
/**
* longInput shortInput deal start
* */
// TODOXX
useEffect(() => {
const inputUsdCharcate1 = getAssetPrice(ReduxcategoryAssets1);
const inputUsdCharcate2 = getAssetPrice(ReduxcategoryAssets2);
if (inputUsdCharcate1 && estimateData) {
// out put input
updateOutput(activeTab, inputUsdCharcate1);
}

if (inputUsdCharcate2) {
// swap token in amount
updateInputAmounts(activeTab, inputUsdCharcate2, inputUsdCharcate1);
}
}, [
Expand All @@ -145,10 +147,9 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
rangeMount,
estimateData,
slippageTolerance,
forceUpdate,
tokenInAmount,
activeTab, // Add activeTab to dependencies if needed
ReduxcategoryAssets1,
ReduxcategoryAssets2,
]);
// update liq price for long
useDebounce(
Expand Down Expand Up @@ -176,7 +177,7 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
}
},
200,
[activeTab, longOutput, longInput],
[activeTab, estimateData],
);
// update liq price for short
useDebounce(
Expand Down Expand Up @@ -213,31 +214,29 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
setLiqPrice(liq_price || "0");
}
}
setForceUpdateLoading(!estimateData?.loadingComplete);
},
200,
[estimateData, activeTab],
);
// update price and make refresh icon spin
// force estimating
useEffect(() => {
const interval = setInterval(() => {
if (tokenInAmount === lastTokenInAmount && longInput) {
setTokenInAmount((prev) => prev);
// TODOXX
if (tokenInAmount) {
setForceUpdate((prev) => prev + 1);
setForceUpdateLoading(true);
} else {
setLastTokenInAmount(tokenInAmount);
}
}, 20_000);

return () => clearInterval(interval);
}, [tokenInAmount, lastTokenInAmount]);
}, [tokenInAmount]);
// TODOXX
// for same input, forceUpdateLoading is true
useEffect(() => {
if (forceUpdateLoading) {
const timer = setTimeout(() => {
setForceUpdateLoading(false);
}, 4000);
}, 1000);

return () => clearTimeout(timer);
}
Expand Down Expand Up @@ -384,7 +383,6 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
dispatch(setReduxActiveTab(tabString));
setActiveTab(tabString);
initCateState(tabString);
setForceUpdate((prev) => prev + 1);
};
const getTabClassName = (tabName: string) => {
return activeTab === tabName
Expand Down Expand Up @@ -479,6 +477,7 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
function getAssetPrice(categoryId) {
return categoryId ? combinedAssetsData[categoryId["token_id"]]?.price?.usd : 0;
}
// TODOXX
function updateOutput(tab: string, inputUsdCharcate: number) {
/**
* @param inputUsdCharcate category1 current price
Expand All @@ -502,6 +501,7 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
outputUsdSetter(inputUsdCharcate * tokenInAmount);
}
}
// TODOXX
function updateInputAmounts(tab, inputUsdCharcate2, inputUsdCharcate1) {
/**
* @param inputUsdCharcate2 category2 current price
Expand Down Expand Up @@ -596,6 +596,7 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
if (!tokenInAmount || forceUpdateLoading) {
return;
}
// TODOXX
setForceUpdate((prev) => prev + 1);
setForceUpdateLoading(true);
}}
Expand Down Expand Up @@ -674,7 +675,6 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
tokenList={isMainStream ? categoryAssets2 : categoryAssets2MEME}
type="cate2"
isMemeCategory={!isMainStream}
setForceUpdate={() => setForceUpdate((prev) => prev + 1)}
/>
</div>
<p className="text-gray-300 mt-2 text-xs">${longInputUsd.toFixed(2)}</p>
Expand Down Expand Up @@ -812,7 +812,6 @@ const TradingOperate: React.FC<TradingOperateProps> = ({ onMobileClose, id }) =>
tokenList={isMainStream ? categoryAssets2 : categoryAssets2MEME}
type="cate2"
isMemeCategory={!isMainStream}
setForceUpdate={() => setForceUpdate((prev) => prev + 1)}
/>
</div>
<p className="text-gray-300 mt-2 text-xs">${shortInputUsd.toFixed(2)}</p>
Expand Down
3 changes: 0 additions & 3 deletions screens/Trading/components/tokenbox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,12 @@ interface TradingTokenInter {
tokenList: Array<any>;
type: string;
setMaxInputBanlance?: (key: string) => void;
setForceUpdate?: () => void;
isMemeCategory?: boolean;
}
const TradingToken: React.FC<TradingTokenInter> = ({
tokenList,
type,
setMaxInputBanlance,
setForceUpdate,
isMemeCategory,
}) => {
let timer: NodeJS.Timeout;
Expand Down Expand Up @@ -86,7 +84,6 @@ const TradingToken: React.FC<TradingTokenInter> = ({
} else {
console.warn(`Unsupported type: ${type}`);
}
setForceUpdate && setForceUpdate();
setShowModal(false);
};

Expand Down

0 comments on commit 3c0dab6

Please sign in to comment.