func CalcRequestAmount(fromAmount uint64, contractArg *vmutil.MagneticContractArgs) uint64 {
res := big.NewInt(0).SetUint64(fromAmount)
- res.Mul(res, big.NewInt(contractArg.RatioNumerator)).Div(res, big.NewInt(contractArg.RatioDenominator))
+ res.Mul(res, big.NewInt(contractArg.RatioNumerator)).Quo(res, big.NewInt(contractArg.RatioDenominator))
if !res.IsUint64() {
return 0
}
}
func calcShouldPayAmount(receiveAmount uint64, contractArg *vmutil.MagneticContractArgs) uint64 {
- return uint64(math.Floor(float64(receiveAmount) * float64(contractArg.RatioDenominator) / float64(contractArg.RatioNumerator)))
+ res := big.NewInt(0).SetUint64(receiveAmount)
+ res.Mul(res, big.NewInt(contractArg.RatioDenominator)).Quo(res, big.NewInt(contractArg.RatioNumerator))
+ if !res.IsUint64() {
+ return 0
+ }
+ return res.Uint64()
}
func calcMaxFeeAmount(shouldPayAmount uint64, maxFeeRate float64) int64 {
func isMatched(orders []*common.Order) bool {
for i, order := range orders {
- if opposisteOrder := orders[calcOppositeIndex(len(orders), i)]; 1/order.Rate < opposisteOrder.Rate {
+ if oppositeOrder := orders[calcOppositeIndex(len(orders), i)]; 1/order.Rate < oppositeOrder.Rate {
return false
}
}
}
res := big.NewInt(x)
- res.Mul(res, big.NewInt(y)).Div(res, big.NewInt(z))
+ res.Mul(res, big.NewInt(y)).Quo(res, big.NewInt(z))
if !res.IsInt64() {
return ErrRange
}