fix slippage

This commit is contained in:
thloyi
2026-04-20 12:31:30 +08:00
parent 1dd843c393
commit fe94888b14
6 changed files with 116 additions and 36 deletions

View File

@@ -9,6 +9,16 @@ import (
var maxSlippageBps = decimal.NewFromInt(10000)
func normalizeSlippageBps(value decimal.Decimal) decimal.Decimal {
//if value.IsNegative() {
// return decimal.Zero
//}
//if value.GreaterThan(maxSlippageBps) {
// return maxSlippageBps
//}
return value
}
type SwapMode uint8
type SwapAmountSide uint8
type SwapLimitType uint8
@@ -141,29 +151,36 @@ func limitSwapAmountType(swapMode SwapMode) SwapLimitType {
}
func calculateLimitSlippageBps(limitType SwapLimitType, limitAmount, actualAmount decimal.Decimal) decimal.Decimal {
var value decimal.Decimal
switch limitType {
case SwapLimitTypeMinOut:
if !actualAmount.IsPositive() {
if !limitAmount.IsPositive() {
return maxSlippageBps
value = maxSlippageBps
break
}
return maxSlippageBps.Neg()
value = maxSlippageBps.Neg()
break
}
if !limitAmount.IsPositive() {
return maxSlippageBps
value = maxSlippageBps
break
}
return actualAmount.Sub(limitAmount).Mul(maxSlippageBps).Div(actualAmount)
value = actualAmount.Sub(limitAmount).Mul(maxSlippageBps).Div(actualAmount)
case SwapLimitTypeMaxIn:
if !limitAmount.IsPositive() {
if !actualAmount.IsPositive() {
return maxSlippageBps
value = maxSlippageBps
break
}
return maxSlippageBps.Neg()
value = maxSlippageBps.Neg()
break
}
return limitAmount.Sub(actualAmount).Mul(maxSlippageBps).Div(limitAmount)
value = limitAmount.Sub(actualAmount).Mul(maxSlippageBps).Div(limitAmount)
default:
return decimal.Zero
value = decimal.Zero
}
return normalizeSlippageBps(value)
}
func (s *Swap) SetSwapAmountInfoDetailed(