From 97c7d3db5a70b21734ed5c4d8de75640e23905df Mon Sep 17 00:00:00 2001 From: kemuru <102478601+kemuru@users.noreply.github.com> Date: Fri, 22 Aug 2025 18:41:52 +0200 Subject: [PATCH 1/2] fix: withdraw amounts fix --- .../CourtDetails/StakePanel/InputDisplay.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx index c8bca450e..e7021c238 100644 --- a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx +++ b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx @@ -81,7 +81,10 @@ const InputDisplay: React.FC = ({ action, amount, setAmount }) => const parsedBalance = formatPNK(balance ?? 0n, 0, true); - const parsedStake = formatPNK(jurorBalance?.[2] ?? 0n, 0, true); + const maxWithdrawAmount = jurorBalance + ? BigInt(Math.min(Number(jurorBalance[2]), Number(jurorBalance[0] - jurorBalance[1]))) + : 0n; + const parsedMaxWithdrawAmount = formatPNK(maxWithdrawAmount, 0, true); const isStaking = useMemo(() => action === ActionType.stake, [action]); useEffect(() => { @@ -89,8 +92,8 @@ const InputDisplay: React.FC = ({ action, amount, setAmount }) => setErrorMsg("You need a non-zero PNK balance to stake"); } else if (isStaking && balance && parsedAmount > balance) { setErrorMsg("Insufficient balance to stake this amount"); - } else if (!isStaking && jurorBalance && parsedAmount > jurorBalance[2]) { - setErrorMsg("Insufficient staked amount to withdraw this amount"); + } else if (!isStaking && jurorBalance && parsedAmount > maxWithdrawAmount) { + setErrorMsg("Insufficient available amount to withdraw this amount"); } else if ( action === ActionType.stake && courtDetails && @@ -102,15 +105,15 @@ const InputDisplay: React.FC = ({ action, amount, setAmount }) => } else { setErrorMsg(undefined); } - }, [parsedAmount, isStaking, balance, jurorBalance, action, courtDetails]); + }, [parsedAmount, isStaking, balance, jurorBalance, action, courtDetails, maxWithdrawAmount]); return ( <> - + { - const amount = isStaking ? parsedBalance : parsedStake; + const amount = isStaking ? parsedBalance : parsedMaxWithdrawAmount; setAmount(amount); }} > From 378c2b043f9c217e11a76d1d02c447eed36b5787 Mon Sep 17 00:00:00 2001 From: kemuru <102478601+kemuru@users.noreply.github.com> Date: Fri, 22 Aug 2025 18:56:15 +0200 Subject: [PATCH 2/2] chore: dont cast to number to avoid losing precision --- web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx index e7021c238..7062cf435 100644 --- a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx +++ b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx @@ -82,7 +82,9 @@ const InputDisplay: React.FC = ({ action, amount, setAmount }) => const parsedBalance = formatPNK(balance ?? 0n, 0, true); const maxWithdrawAmount = jurorBalance - ? BigInt(Math.min(Number(jurorBalance[2]), Number(jurorBalance[0] - jurorBalance[1]))) + ? jurorBalance[2] < jurorBalance[0] - jurorBalance[1] + ? jurorBalance[2] + : jurorBalance[0] - jurorBalance[1] : 0n; const parsedMaxWithdrawAmount = formatPNK(maxWithdrawAmount, 0, true); const isStaking = useMemo(() => action === ActionType.stake, [action]);