From 5d03256baf72ed5c0e4f0ebdf19e75ef403be19a Mon Sep 17 00:00:00 2001 From: "Johan T. Halseth" Date: Thu, 7 Sep 2017 15:04:07 +0200 Subject: [PATCH] htlcswith/link: resend fundingLocked from channelLink when numUpdates == 0. In the case where the channelLink get started and the number of updates on this channel is zero, this means no paymenys has been done using this channel. This might mean that the fundingLocked never was sent successfully, so we resend to make sure this channel gets opened correctly. --- htlcswitch/link.go | 21 ++++++++++++++++++++- htlcswitch/mock.go | 3 +++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/htlcswitch/link.go b/htlcswitch/link.go index bd3bdf69..516b8243 100644 --- a/htlcswitch/link.go +++ b/htlcswitch/link.go @@ -322,7 +322,26 @@ func (l *channelLink) htlcManager() { // TODO(roasbeef): fail chan in case of protocol violation - // TODO(roasbeef): resend funding locked if state zero + // If the number of updates on this channel has been zero, we should + // resend the fundingLocked message. This is because in this case we + // cannot be sure if the peer really received the last fundingLocked we + // sent, so resend now. + if l.channel.StateSnapshot().NumUpdates == 0 { + log.Debugf("Resending fundingLocked message to peer.") + + nextRevocation, err := l.channel.NextRevocationKey() + if err != nil { + log.Errorf("unable to create next revocation: %v", err) + } + + fundingLockedMsg := lnwire.NewFundingLocked(l.ChanID(), + nextRevocation) + err = l.cfg.Peer.SendMessage(fundingLockedMsg) + if err != nil { + log.Errorf("failed resending fundingLocked to peer: %v", + err) + } + } out: for { diff --git a/htlcswitch/mock.go b/htlcswitch/mock.go index 47b3e24a..c437cc57 100644 --- a/htlcswitch/mock.go +++ b/htlcswitch/mock.go @@ -280,6 +280,9 @@ func (s *mockServer) readHandler(message lnwire.Message) error { targetChan = msg.ChanID case *lnwire.CommitSig: targetChan = msg.ChanID + case *lnwire.FundingLocked: + // Ignore + return nil default: return errors.New("unknown message type") }