diff --git a/lnrpc/rpc_utils.go b/lnrpc/rpc_utils.go index 32899c506..9d9dea320 100644 --- a/lnrpc/rpc_utils.go +++ b/lnrpc/rpc_utils.go @@ -3,10 +3,13 @@ package lnrpc import ( "encoding/hex" "errors" + "fmt" "sort" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/lightningnetwork/lnd/lnwallet" + "github.com/lightningnetwork/lnd/lnwallet/chainfee" + "github.com/lightningnetwork/lnd/sweep" "google.golang.org/protobuf/encoding/protojson" ) @@ -193,3 +196,41 @@ func GetChanPointFundingTxid(chanPoint *ChannelPoint) (*chainhash.Hash, error) { return chainhash.NewHash(txid) } + +// CalculateFeeRate uses either satPerByte or satPerVByte, but not both, from a +// request to calculate the fee rate. It provides compatibility for the +// deprecated field, satPerByte. Once the field is safe to be removed, the +// check can then be deleted. +func CalculateFeeRate(satPerByte, satPerVByte uint64, targetConf uint32, + estimator chainfee.Estimator) (chainfee.SatPerKWeight, error) { + + var feeRate chainfee.SatPerKWeight + + // We only allow using either the deprecated field or the new field. + if satPerByte != 0 && satPerVByte != 0 { + return feeRate, fmt.Errorf("either SatPerByte or " + + "SatPerVByte should be set, but not both") + } + + // Default to satPerVByte, and overwrite it if satPerByte is set. + satPerKw := chainfee.SatPerKVByte(satPerVByte * 1000).FeePerKWeight() + if satPerByte != 0 { + satPerKw = chainfee.SatPerKVByte( + satPerByte * 1000, + ).FeePerKWeight() + } + + // Based on the passed fee related parameters, we'll determine an + // appropriate fee rate for this transaction. + feeRate, err := sweep.DetermineFeePerKw( + estimator, sweep.FeePreference{ + ConfTarget: targetConf, + FeeRate: satPerKw, + }, + ) + if err != nil { + return feeRate, err + } + + return feeRate, nil +} diff --git a/rpcserver.go b/rpcserver.go index 952b769ec..96e11a288 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -222,44 +222,6 @@ func stringInSlice(a string, slice []string) bool { return false } -// calculateFeeRate uses either satPerByte or satPerVByte, but not both, from a -// request to calculate the fee rate. It provides compatibility for the -// deprecated field, satPerByte. Once the field is safe to be removed, the -// check can then be deleted. -func calculateFeeRate(satPerByte, satPerVByte uint64, targetConf uint32, - estimator chainfee.Estimator) (chainfee.SatPerKWeight, error) { - - var feeRate chainfee.SatPerKWeight - - // We only allow using either the deprecated field or the new field. - if satPerByte != 0 && satPerVByte != 0 { - return feeRate, fmt.Errorf("either SatPerByte or " + - "SatPerVByte should be set, but not both") - } - - // Default to satPerVByte, and overwrite it if satPerByte is set. - satPerKw := chainfee.SatPerKVByte(satPerVByte * 1000).FeePerKWeight() - if satPerByte != 0 { - satPerKw = chainfee.SatPerKVByte( - satPerByte * 1000, - ).FeePerKWeight() - } - - // Based on the passed fee related parameters, we'll determine an - // appropriate fee rate for this transaction. - feeRate, err := sweep.DetermineFeePerKw( - estimator, sweep.FeePreference{ - ConfTarget: targetConf, - FeeRate: satPerKw, - }, - ) - if err != nil { - return feeRate, err - } - - return feeRate, nil -} - // GetAllPermissions returns all the permissions required to interact with lnd. func GetAllPermissions() []bakery.Op { allPerms := make([]bakery.Op, 0) @@ -1239,7 +1201,7 @@ func (r *rpcServer) SendCoins(ctx context.Context, in *lnrpc.SendCoinsRequest) (*lnrpc.SendCoinsResponse, error) { // Calculate an appropriate fee rate for this transaction. - feePerKw, err := calculateFeeRate( + feePerKw, err := lnrpc.CalculateFeeRate( uint64(in.SatPerByte), in.SatPerVbyte, // nolint:staticcheck uint32(in.TargetConf), r.server.cc.FeeEstimator, ) @@ -1452,7 +1414,7 @@ func (r *rpcServer) SendMany(ctx context.Context, in *lnrpc.SendManyRequest) (*lnrpc.SendManyResponse, error) { // Calculate an appropriate fee rate for this transaction. - feePerKw, err := calculateFeeRate( + feePerKw, err := lnrpc.CalculateFeeRate( uint64(in.SatPerByte), in.SatPerVbyte, // nolint:staticcheck uint32(in.TargetConf), r.server.cc.FeeEstimator, ) @@ -2093,7 +2055,7 @@ func (r *rpcServer) parseOpenChannelReq(in *lnrpc.OpenChannelRequest, } // Calculate an appropriate fee rate for this transaction. - feeRate, err := calculateFeeRate( + feeRate, err := lnrpc.CalculateFeeRate( uint64(in.SatPerByte), in.SatPerVbyte, // nolint:staticcheck uint32(in.TargetConf), r.server.cc.FeeEstimator, ) @@ -2574,7 +2536,7 @@ func (r *rpcServer) CloseChannel(in *lnrpc.CloseChannelRequest, // Based on the passed fee related parameters, we'll determine // an appropriate fee rate for the cooperative closure // transaction. - feeRate, err := calculateFeeRate( + feeRate, err := lnrpc.CalculateFeeRate( uint64(in.SatPerByte), in.SatPerVbyte, // nolint:staticcheck uint32(in.TargetConf), r.server.cc.FeeEstimator, )