Files
lspd/lsps2/fee.go
2023-11-06 14:12:37 +01:00

43 lines
764 B
Go

package lsps2
import "fmt"
var ErrOverflow = fmt.Errorf("integer overflow detected")
func computeOpeningFee(paymentSizeMsat uint64, proportional uint32, minFeeMsat uint64) (uint64, error) {
tmp, err := safeMultiply(paymentSizeMsat, uint64(proportional))
if err != nil {
return 0, err
}
tmp, err = safeAdd(tmp, 999_999)
if err != nil {
return 0, err
}
openingFee := tmp / 1_000_000
if openingFee < minFeeMsat {
openingFee = minFeeMsat
}
return openingFee, nil
}
func safeAdd(a uint64, b uint64) (uint64, error) {
sum := a + b
if sum < a {
return 0, ErrOverflow
}
return sum, nil
}
func safeMultiply(a uint64, b uint64) (uint64, error) {
prod := a * b
if a != 0 && ((prod / a) != b) {
return 0, ErrOverflow
}
return prod, nil
}