Skip to content

Commit

Permalink
fix: correct low vault withdraw error logic (#704)
Browse files Browse the repository at this point in the history
  • Loading branch information
tyleroooo authored Oct 4, 2024
1 parent f5155ef commit 7651662
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 6 deletions.
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ allprojects {
}

group = "exchange.dydx.abacus"
version = "1.12.20"
version = "1.12.21"

repositories {
google()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import indexer.models.chain.OnChainVaultDepositWithdrawSlippageResponse
import kollections.toIList
import kotlinx.serialization.Serializable
import kotlin.js.JsExport
import kotlin.math.abs
import kotlin.math.floor

@JsExport
Expand Down Expand Up @@ -349,10 +350,15 @@ object VaultDepositWithdrawFormValidator {
if (postOpVaultBalance != null && postOpVaultBalance < 0) {
errors.add(vaultFormValidationErrors.withdrawTooHigh())
}
if (amount > 0 && amount < MIN_DEPOSIT_FE_THRESHOLD &&
vaultAccount?.withdrawableUsdc != null && vaultAccount.withdrawableUsdc >= MIN_DEPOSIT_FE_THRESHOLD
) {
errors.add(vaultFormValidationErrors.withdrawTooLow())
if (amount > 0 && amount < MIN_DEPOSIT_FE_THRESHOLD) {
// only allowed if withdrawing entire balance
if (!(
vaultAccount?.withdrawableUsdc != null &&
abs(vaultAccount.withdrawableUsdc - amount) <= 0.01
)
) {
errors.add(vaultFormValidationErrors.withdrawTooLow())
}
}
if (postOpVaultBalance != null && postOpVaultBalance >= 0 && amount > 0 &&
vaultAccount?.withdrawableUsdc != null && amount > vaultAccount.withdrawableUsdc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,51 @@ class VaultFormTests {
)
}

@Test
fun testLowWithdrawNonFull() {
val result = VaultDepositWithdrawFormValidator.validateVaultForm(
formData = VaultFormData(
action = VaultFormAction.WITHDRAW,
amount = 6.0,
acknowledgedSlippage = false,
inConfirmationStep = false,
),
accountData = VaultFormAccountData(
marginUsage = 0.5,
freeCollateral = 1000.0,
canViewAccount = true,
),
vaultAccount = makeVaultAccount(
balanceUsdc = 1000.0,
withdrawableUsdc = 10.0,
balanceShares = 500.0,
),
slippageResponse = OnChainVaultDepositWithdrawSlippageResponse(
sharesToWithdraw = OnChainNumShares(numShares = 3.0),
expectedQuoteQuantums = 6.0 * 1_000_000,
),
)

assertEquals(
VaultFormValidationResult(
errors = iListOf(
VaultFormValidationErrors().withdrawTooLow(),
),
submissionData = null,
summaryData = VaultFormSummaryData(
needSlippageAck = false,
marginUsage = 0.4985044865403788,
freeCollateral = 1006.0,
vaultBalance = 994.0,
withdrawableVaultBalance = 4.0,
estimatedSlippage = 0.0,
estimatedAmountReceived = 6.0,
),
),
result,
)
}

@Test
fun testValidHighSlippageWithdrawWithAck() {
val result = VaultDepositWithdrawFormValidator.validateVaultForm(
Expand Down
2 changes: 1 addition & 1 deletion v4_abacus.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |spec|
spec.name = 'v4_abacus'
spec.version = '1.12.20'
spec.version = '1.12.21'
spec.homepage = 'https://github.com/dydxprotocol/v4-abacus'
spec.source = { :http=> ''}
spec.authors = ''
Expand Down

0 comments on commit 7651662

Please sign in to comment.