fix slippage
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user