diff --git a/lnrpc/marshall_utils.go b/lnrpc/marshall_utils.go new file mode 100644 index 00000000..37e33c54 --- /dev/null +++ b/lnrpc/marshall_utils.go @@ -0,0 +1,30 @@ +package lnrpc + +import ( + "github.com/btcsuite/btcutil" + "github.com/lightningnetwork/lnd/lnwire" +) + +// CalculateFeeLimit returns the fee limit in millisatoshis. If a percentage +// based fee limit has been requested, we'll factor in the ratio provided with +// the amount of the payment. +func CalculateFeeLimit(feeLimit *FeeLimit, + amount lnwire.MilliSatoshi) lnwire.MilliSatoshi { + + switch feeLimit.GetLimit().(type) { + + case *FeeLimit_Fixed: + return lnwire.NewMSatFromSatoshis( + btcutil.Amount(feeLimit.GetFixed()), + ) + + case *FeeLimit_Percent: + return amount * lnwire.MilliSatoshi(feeLimit.GetPercent()) / 100 + + default: + // If a fee limit was not specified, we'll use the payment's + // amount as an upper bound in order to avoid payment attempts + // from incurring fees higher than the payment amount itself. + return amount + } +} diff --git a/lnrpc/routerrpc/router_backend.go b/lnrpc/routerrpc/router_backend.go index c90e5513..b485f124 100644 --- a/lnrpc/routerrpc/router_backend.go +++ b/lnrpc/routerrpc/router_backend.go @@ -136,7 +136,7 @@ func (r *RouterBackend) QueryRoutes(ctx context.Context, } // Unmarshall restrictions from request. - feeLimit := calculateFeeLimit(in.FeeLimit, amtMSat) + feeLimit := lnrpc.CalculateFeeLimit(in.FeeLimit, amtMSat) ignoredNodes := make(map[route.Vertex]struct{}) for _, ignorePubKey := range in.IgnoredNodes { @@ -308,27 +308,6 @@ func (r *RouterBackend) rpcEdgeToPair(e *lnrpc.EdgeLocator) ( return pair, nil } -// calculateFeeLimit returns the fee limit in millisatoshis. If a percentage -// based fee limit has been requested, we'll factor in the ratio provided with -// the amount of the payment. -func calculateFeeLimit(feeLimit *lnrpc.FeeLimit, - amount lnwire.MilliSatoshi) lnwire.MilliSatoshi { - - switch feeLimit.GetLimit().(type) { - case *lnrpc.FeeLimit_Fixed: - return lnwire.NewMSatFromSatoshis( - btcutil.Amount(feeLimit.GetFixed()), - ) - case *lnrpc.FeeLimit_Percent: - return amount * lnwire.MilliSatoshi(feeLimit.GetPercent()) / 100 - default: - // If a fee limit was not specified, we'll use the payment's - // amount as an upper bound in order to avoid payment attempts - // from incurring fees higher than the payment amount itself. - return amount - } -} - // MarshallRoute marshalls an internal route to an rpc route struct. func (r *RouterBackend) MarshallRoute(route *route.Route) (*lnrpc.Route, error) { resp := &lnrpc.Route{ diff --git a/rpcserver.go b/rpcserver.go index 4833eb71..d670d009 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -2908,27 +2908,6 @@ type rpcPaymentRequest struct { route *route.Route } -// calculateFeeLimit returns the fee limit in millisatoshis. If a percentage -// based fee limit has been requested, we'll factor in the ratio provided with -// the amount of the payment. -func calculateFeeLimit(feeLimit *lnrpc.FeeLimit, - amount lnwire.MilliSatoshi) lnwire.MilliSatoshi { - - switch feeLimit.GetLimit().(type) { - case *lnrpc.FeeLimit_Fixed: - return lnwire.NewMSatFromSatoshis( - btcutil.Amount(feeLimit.GetFixed()), - ) - case *lnrpc.FeeLimit_Percent: - return amount * lnwire.MilliSatoshi(feeLimit.GetPercent()) / 100 - default: - // If a fee limit was not specified, we'll use the payment's - // amount as an upper bound in order to avoid payment attempts - // from incurring fees higher than the payment amount itself. - return amount - } -} - // SendPayment dispatches a bi-directional streaming RPC for sending payments // through the Lightning Network. A single RPC invocation creates a persistent // bi-directional stream allowing clients to rapidly send payments through the @@ -3114,7 +3093,7 @@ func extractPaymentIntent(rpcPayReq *rpcPaymentRequest) (rpcPaymentIntent, error } // Calculate the fee limit that should be used for this payment. - payIntent.feeLimit = calculateFeeLimit( + payIntent.feeLimit = lnrpc.CalculateFeeLimit( rpcPayReq.FeeLimit, payIntent.msat, ) @@ -3154,7 +3133,7 @@ func extractPaymentIntent(rpcPayReq *rpcPaymentRequest) (rpcPaymentIntent, error ) // Calculate the fee limit that should be used for this payment. - payIntent.feeLimit = calculateFeeLimit( + payIntent.feeLimit = lnrpc.CalculateFeeLimit( rpcPayReq.FeeLimit, payIntent.msat, )