mirror of
https://github.com/aljazceru/lspd.git
synced 2025-12-18 14:24:21 +01:00
43 lines
764 B
Go
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
|
|
}
|