cnct: do not create an action for incoming dust htlcs

This commit fixes the 'unable to find incoming resolution' error that
occured when trying to resolve incoming htlcs below the dust limit that
are not actually present on the commitment tx.
This commit is contained in:
Joost Jager 2019-09-12 15:31:48 +02:00
parent 3131bc4d64
commit be7fc9dd3e
No known key found for this signature in database
GPG Key ID: A61B9D4C393C59C7
2 changed files with 17 additions and 1 deletions

@ -1316,6 +1316,15 @@ func (c *ChannelArbitrator) checkCommitChainActions(height uint32,
// either learn of it eventually from the outgoing HTLC, or the sender // either learn of it eventually from the outgoing HTLC, or the sender
// will timeout the HTLC. // will timeout the HTLC.
for _, htlc := range htlcs.incomingHTLCs { for _, htlc := range htlcs.incomingHTLCs {
// If the HTLC is dust, there is no action to be taken.
if htlc.OutputIndex < 0 {
log.Debugf("ChannelArbitrator(%v): no resolution "+
"needed for incoming dust htlc=%x",
c.cfg.ChanPoint, htlc.RHash[:])
continue
}
log.Tracef("ChannelArbitrator(%v): watching chain to decide "+ log.Tracef("ChannelArbitrator(%v): watching chain to decide "+
"action for incoming htlc=%x", c.cfg.ChanPoint, "action for incoming htlc=%x", c.cfg.ChanPoint,
htlc.RHash[:]) htlc.RHash[:])

@ -527,8 +527,15 @@ func TestChannelArbitratorLocalForceClosePendingHtlc(t *testing.T) {
OutputIndex: -1, OutputIndex: -1,
} }
incomingDustHtlc := channeldb.HTLC{
Incoming: true,
Amt: 105,
HtlcIndex: 101,
OutputIndex: -1,
}
htlcSet := []channeldb.HTLC{ htlcSet := []channeldb.HTLC{
htlc, outgoingDustHtlc, htlc, outgoingDustHtlc, incomingDustHtlc,
} }
htlcUpdates <- &ContractUpdate{ htlcUpdates <- &ContractUpdate{