lnwallet/channel: correct dust calculation on incoming HTLC
Similar to the previous commit, we fix a bug resulting in the wrong commit weight being calculated when an HTLC just above the remote's duslimit was added from the remote. This was a result of using the successFee instead of the timeoutFee when checking whether it was dust, making us consider it dust when it shouldn't have been.
This commit is contained in:
parent
e0b133297d
commit
953443e10c
@ -4031,7 +4031,7 @@ func (lc *LightningChannel) computeView(view *htlcView, remoteChain bool,
|
|||||||
}
|
}
|
||||||
for _, htlc := range filteredHTLCView.theirUpdates {
|
for _, htlc := range filteredHTLCView.theirUpdates {
|
||||||
if htlcIsDust(
|
if htlcIsDust(
|
||||||
lc.channelState.ChanType, !remoteChain, !remoteChain,
|
lc.channelState.ChanType, true, !remoteChain,
|
||||||
feePerKw, htlc.Amount.ToSatoshis(), dustLimit,
|
feePerKw, htlc.Amount.ToSatoshis(), dustLimit,
|
||||||
) {
|
) {
|
||||||
continue
|
continue
|
||||||
|
@ -5347,6 +5347,9 @@ func TestChanCommitWeightDustHtlcs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer cleanUp()
|
defer cleanUp()
|
||||||
|
|
||||||
|
aliceDustlimit := lnwire.NewMSatFromSatoshis(
|
||||||
|
aliceChannel.channelState.LocalChanCfg.DustLimit,
|
||||||
|
)
|
||||||
bobDustlimit := lnwire.NewMSatFromSatoshis(
|
bobDustlimit := lnwire.NewMSatFromSatoshis(
|
||||||
bobChannel.channelState.LocalChanCfg.DustLimit,
|
bobChannel.channelState.LocalChanCfg.DustLimit,
|
||||||
)
|
)
|
||||||
@ -5354,6 +5357,9 @@ func TestChanCommitWeightDustHtlcs(t *testing.T) {
|
|||||||
feeRate := chainfee.SatPerKWeight(
|
feeRate := chainfee.SatPerKWeight(
|
||||||
aliceChannel.channelState.LocalCommitment.FeePerKw,
|
aliceChannel.channelState.LocalCommitment.FeePerKw,
|
||||||
)
|
)
|
||||||
|
htlcTimeoutFee := lnwire.NewMSatFromSatoshis(
|
||||||
|
HtlcTimeoutFee(aliceChannel.channelState.ChanType, feeRate),
|
||||||
|
)
|
||||||
htlcSuccessFee := lnwire.NewMSatFromSatoshis(
|
htlcSuccessFee := lnwire.NewMSatFromSatoshis(
|
||||||
HtlcSuccessFee(aliceChannel.channelState.ChanType, feeRate),
|
HtlcSuccessFee(aliceChannel.channelState.ChanType, feeRate),
|
||||||
)
|
)
|
||||||
@ -5436,6 +5442,27 @@ func TestChanCommitWeightDustHtlcs(t *testing.T) {
|
|||||||
|
|
||||||
// Settle the HTLC, bringing commitment weight back to base.
|
// Settle the HTLC, bringing commitment weight back to base.
|
||||||
settleHtlc(preimg)
|
settleHtlc(preimg)
|
||||||
|
|
||||||
|
// Now we do a similar check from Bob's POV. Start with getting his
|
||||||
|
// current view of Alice's commitment weight.
|
||||||
|
weight1 = remoteCommitWeight(bobChannel)
|
||||||
|
|
||||||
|
// We'll add an HTLC from Alice to Bob, that is just above dust on
|
||||||
|
// Alice's commitment. Now we'll use the timeout fee.
|
||||||
|
aliceDustHtlc := aliceDustlimit + htlcTimeoutFee
|
||||||
|
preimg = addHtlc(aliceDustHtlc)
|
||||||
|
|
||||||
|
// Get the current remote commitment weight from Bob's POV, and ensure
|
||||||
|
// it is now heavier, since Alice added a non-dust HTLC.
|
||||||
|
weight2 = remoteCommitWeight(bobChannel)
|
||||||
|
require.Greater(t, weight2, weight1)
|
||||||
|
|
||||||
|
// Ensure the current remote commit has the expected commitfee.
|
||||||
|
calcFee = feeRate.FeeForWeight(weight2)
|
||||||
|
remoteCommitFee = bobChannel.channelState.RemoteCommitment.CommitFee
|
||||||
|
require.Equal(t, calcFee, remoteCommitFee)
|
||||||
|
|
||||||
|
settleHtlc(preimg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSignCommitmentFailNotLockedIn tests that a channel will not attempt to
|
// TestSignCommitmentFailNotLockedIn tests that a channel will not attempt to
|
||||||
|
Loading…
Reference in New Issue
Block a user