Skip to content

Commit

Permalink
transfer dialog: enable withdraw full amount even if < min_transfer
Browse files Browse the repository at this point in the history
  • Loading branch information
sehyunc committed Sep 19, 2024
1 parent 6e88c30 commit 862e04c
Showing 1 changed file with 42 additions and 7 deletions.
49 changes: 42 additions & 7 deletions components/dialogs/transfer/transfer-dialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -342,14 +342,14 @@ function TransferForm({
values.amount,
baseToken,
)
if (!isAmountSufficient) {
form.setError("amount", {
message: `Amount must be greater than or equal to ${MIN_DEPOSIT_AMOUNT} USDC`,
})
return
}

if (direction === ExternalTransferDirection.Deposit) {
if (!isAmountSufficient) {
form.setError("amount", {
message: `Amount must be greater than or equal to ${MIN_DEPOSIT_AMOUNT} USDC`,
})
return
}
await checkChain()
const isBalanceSufficient = checkBalance({
amount: values.amount,
Expand Down Expand Up @@ -398,11 +398,28 @@ function TransferForm({
})
}
} else {
const renegadeBalance = renegadeBalances.get(
values.mint as `0x${string}`,
)?.amount
// User is allowed to withdraw whole balance even if amount is < MIN_TRANSFER_AMOUNT
if (
!isAmountSufficient &&
!isMaxBalance({
amount: values.amount,
mint: values.mint,
balance: renegadeBalance,
})
) {
form.setError("amount", {
message: `Amount must be greater than or equal to ${MIN_DEPOSIT_AMOUNT} USDC`,
})
return
}
// TODO: Check if balance is sufficient
const isBalanceSufficient = checkBalance({
amount: values.amount,
mint: values.mint,
balance: renegadeBalances.get(values.mint as `0x${string}`)?.amount,
balance: renegadeBalance,
})
if (!isBalanceSufficient) {
form.setError("amount", {
Expand Down Expand Up @@ -586,3 +603,21 @@ function checkBalance({
return false
}
}

// Returns true iff the amount is equal to the balance
function isMaxBalance({
amount,
mint,
balance,
}: z.infer<typeof formSchema> & { balance?: bigint }) {
if (!balance) {
return false
}
try {
const token = Token.findByAddress(mint as `0x${string}`)
const formattedAmount = formatUnits(balance, token.decimals)
return amount === formattedAmount
} catch (error) {
return false
}
}

0 comments on commit 862e04c

Please sign in to comment.