From 94168c3fe521cabdcaee6d693e872dd40925bf41 Mon Sep 17 00:00:00 2001 From: Slyghtning Date: Thu, 17 Jul 2025 15:08:11 +0200 Subject: [PATCH] utils: function to get dust limit for a pkscript. --- utils/dust_limit.go | 15 +++++++++++++++ utils/dust_limit_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 utils/dust_limit.go create mode 100644 utils/dust_limit_test.go diff --git a/utils/dust_limit.go b/utils/dust_limit.go new file mode 100644 index 00000000..ba9b567a --- /dev/null +++ b/utils/dust_limit.go @@ -0,0 +1,15 @@ +package utils + +import ( + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/mempool" + "github.com/btcsuite/btcd/wire" +) + +// DustLimitForPkScript returns the dust limit for a given pkScript. An output +// must be greater or equal to this value. +func DustLimitForPkScript(pkscript []byte) btcutil.Amount { + return btcutil.Amount(mempool.GetDustThreshold(&wire.TxOut{ + PkScript: pkscript, + })) +} diff --git a/utils/dust_limit_test.go b/utils/dust_limit_test.go new file mode 100644 index 00000000..be6d84bb --- /dev/null +++ b/utils/dust_limit_test.go @@ -0,0 +1,32 @@ +package utils + +import ( + "testing" + + "github.com/lightningnetwork/lnd/input" + "github.com/lightningnetwork/lnd/lnwallet" + "github.com/stretchr/testify/require" +) + +type pkScriptGetter func([]byte) ([]byte, error) + +// TestDustLimitForPkScript checks that the dust limit for a given script size +// matches the calculation in lnwallet.DustLimitForSize. +func TestDustLimitForPkScript(t *testing.T) { + getScripts := map[int]pkScriptGetter{ + input.P2WPKHSize: input.WitnessPubKeyHash, + input.P2WSHSize: input.WitnessScriptHash, + input.P2SHSize: input.GenerateP2SH, + input.P2PKHSize: input.GenerateP2PKH, + } + + for scriptSize, getPkScript := range getScripts { + pkScript, err := getPkScript([]byte{}) + require.NoError(t, err, "failed to generate pkScript") + + require.Equal( + t, lnwallet.DustLimitForSize(scriptSize), + DustLimitForPkScript(pkScript), + ) + } +}