htlcswitch: if we detect an InvalidCommitSigError, send over detailed error

In this commit, we add an additional case when handling a failed
commitment signature. If we detect that it’s a InvalidCommitSigError,
then we’ll send over an lnwire.Error message with the full details. We
don’t yet properly dispatch this error on the reciting side, but that
will be done in a follow up a commit.
This commit is contained in:
Olaoluwa Osuntokun 2018-01-08 18:56:52 -08:00
parent ae1731da27
commit dbf6a511fc
No known key found for this signature in database
GPG Key ID: 964EA263DD637C21

@ -893,11 +893,26 @@ func (l *channelLink) handleUpstreamMsg(msg lnwire.Message) {
}
case *lnwire.CommitSig:
// We just received a new updates to our local commitment chain,
// validate this new commitment, closing the link if invalid.
// We just received a new updates to our local commitment
// chain, validate this new commitment, closing the link if
// invalid.
err := l.channel.ReceiveNewCommitment(msg.CommitSig, msg.HtlcSigs)
if err != nil {
l.fail("unable to accept new commitment: %v", err)
// If we were unable to reconstruct their proposed
// commitment, then we'll examine the type of error. If
// it's an InvalidCommitSigError, then we'll send a
// direct error.
//
// TODO(roasbeef): force close chan
if _, ok := err.(*lnwallet.InvalidCommitSigError); ok {
l.cfg.Peer.SendMessage(&lnwire.Error{
ChanID: l.ChanID(),
Data: []byte(err.Error()),
})
}
l.fail("ChannelPoint(%v): unable to accept new "+
"commitment: %v", l.channel.ChannelPoint(), err)
return
}