chainfee: method to round up the fee for a given transaction weight

This commit is contained in:
Slyghtning
2025-06-24 22:13:55 +02:00
parent 4335d9cfb7
commit ab8ae542d0
2 changed files with 19 additions and 0 deletions

View File

@@ -71,6 +71,14 @@ func (s SatPerKWeight) FeeForWeight(wu lntypes.WeightUnit) btcutil.Amount {
return btcutil.Amount(s) * btcutil.Amount(wu) / 1000
}
// FeeForWeightRoundUp calculates the fee resulting from this fee rate and the
// given weight in weight units (wu), rounding up to the nearest satoshi.
func (s SatPerKWeight) FeeForWeightRoundUp(
wu lntypes.WeightUnit) btcutil.Amount {
return (btcutil.Amount(s)*btcutil.Amount(wu) + 999) / 1000
}
// FeeForVByte calculates the fee resulting from this fee rate and the given
// size in vbytes (vb).
func (s SatPerKWeight) FeeForVByte(vb lntypes.VByte) btcutil.Amount {

View File

@@ -3,6 +3,7 @@ package chainfee
import (
"testing"
"github.com/lightningnetwork/lnd/lntypes"
"github.com/stretchr/testify/require"
)
@@ -20,3 +21,13 @@ func TestSatPerVByteConversion(t *testing.T) {
// 1 sat/vb should be equal to 250 sat/kw.
require.Equal(t, SatPerKWeight(250), rate.FeePerKWeight())
}
// TestFeeForWeightRoundUp checks that the FeeForWeightRoundUp method correctly
// rounds up the fee for a given weight.
func TestFeeForWeightRoundUp(t *testing.T) {
feeRate := SatPerVByte(1).FeePerKWeight()
txWeight := lntypes.WeightUnit(674) // 674 weight units is 168.5 vb.
require.EqualValues(t, 168, feeRate.FeeForWeight(txWeight))
require.EqualValues(t, 169, feeRate.FeeForWeightRoundUp(txWeight))
}