github.com/InjectiveLabs/sdk-go@v1.53.0/chain/exchange/types/fee_validation.go (about) 1 package types 2 3 import ( 4 "fmt" 5 6 "cosmossdk.io/errors" 7 "cosmossdk.io/math" 8 ) 9 10 func ValidateMakerWithTakerFee(makerFeeRate, takerFeeRate, relayerFeeShareRate, minimalProtocolFeeRate math.LegacyDec) error { 11 if makerFeeRate.GT(takerFeeRate) { 12 return ErrFeeRatesRelation 13 } 14 15 if !makerFeeRate.IsNegative() { 16 // if makerFeeRate is positive, must hold: (takerFeeRate + makerFeeRate) * (1 - relayerFeeShareRate) > minimalProtocolFeeRate 17 if takerFeeRate.Add(makerFeeRate).Mul(math.LegacyOneDec().Sub(relayerFeeShareRate)).LT(minimalProtocolFeeRate) { 18 errMsg := fmt.Sprintf("if makerFeeRate (%v) is positive, (takerFeeRate = %v + makerFeeRate = %v) * (1 - relayerFeeShareRate = %v) > %v", makerFeeRate.String(), takerFeeRate.String(), makerFeeRate.String(), relayerFeeShareRate.String(), minimalProtocolFeeRate.String()) 19 return errors.Wrap(ErrFeeRatesRelation, errMsg) 20 } 21 } else { 22 // if makerFeeRate is negative, must hold: takerFeeRate * (1 - relayerFeeShareRate) + makerFeeRate > minimalProtocolFeeRate 23 if takerFeeRate.Mul(math.LegacyOneDec().Sub(relayerFeeShareRate)).Add(makerFeeRate).LT(minimalProtocolFeeRate) { 24 errMsg := fmt.Sprintf("if makerFeeRate (%v) is negative, (takerFeeRate = %v) * (1 - relayerFeeShareRate = %v) + makerFeeRate < %v", makerFeeRate.String(), takerFeeRate.String(), relayerFeeShareRate.String(), minimalProtocolFeeRate.String()) 25 return errors.Wrap(ErrFeeRatesRelation, errMsg) 26 } 27 } 28 29 return nil 30 } 31 32 func ValidateMakerWithTakerFeeAndDiscounts(makerFeeRate, takerFeeRate, relayerFeeShareRate, minimalProtocolFeeRate math.LegacyDec, discountSchedule *FeeDiscountSchedule) error { 33 smallestTakerFeeRate := takerFeeRate 34 35 if makerFeeRate.IsNegative() && discountSchedule != nil && len(discountSchedule.TierInfos) > 0 { 36 maxTakerDiscount := discountSchedule.TierInfos[len(discountSchedule.TierInfos)-1].TakerDiscountRate 37 smallestTakerFeeRate = smallestTakerFeeRate.Mul(math.LegacyOneDec().Sub(maxTakerDiscount)) 38 } 39 40 return ValidateMakerWithTakerFee(makerFeeRate, smallestTakerFeeRate, relayerFeeShareRate, minimalProtocolFeeRate) 41 }