peer+lnwire: add LinkUpdater iface and impl on relevant msgs

Removes longstanding TODO to simplify parsing of target chanid.
This commit is contained in:
Conner Fromknecht
2019-09-25 12:00:59 -07:00
parent 9b1ecbd3fa
commit 2df5a36048
8 changed files with 84 additions and 30 deletions

View File

@ -1,6 +1,8 @@
package lnwire package lnwire
import "io" import (
"io"
)
// CommitSig is sent by either side to stage any pending HTLC's in the // CommitSig is sent by either side to stage any pending HTLC's in the
// receiver's pending set into a new commitment state. Implicitly, the new // receiver's pending set into a new commitment state. Implicitly, the new
@ -83,3 +85,11 @@ func (c *CommitSig) MaxPayloadLength(uint32) uint32 {
// 32 + 64 + 2 + max_allowed_htlcs // 32 + 64 + 2 + max_allowed_htlcs
return MaxMessagePayload return MaxMessagePayload
} }
// TargetChanID returns the channel id of the link for which this message is
// intended.
//
// NOTE: Part of lnd.LinkUpdater interface.
func (c *CommitSig) TargetChanID() ChannelID {
return c.ChanID
}

View File

@ -81,3 +81,11 @@ func (c *RevokeAndAck) MaxPayloadLength(uint32) uint32 {
// 32 + 32 + 33 // 32 + 32 + 33
return 97 return 97
} }
// TargetChanID returns the channel id of the link for which this message is
// intended.
//
// NOTE: Part of lnd.LinkUpdater interface.
func (c *RevokeAndAck) TargetChanID() ChannelID {
return c.ChanID
}

View File

@ -1,6 +1,8 @@
package lnwire package lnwire
import "io" import (
"io"
)
// OnionPacketSize is the size of the serialized Sphinx onion packet included // OnionPacketSize is the size of the serialized Sphinx onion packet included
// in each UpdateAddHTLC message. The breakdown of the onion packet is as // in each UpdateAddHTLC message. The breakdown of the onion packet is as
@ -107,3 +109,11 @@ func (c *UpdateAddHTLC) MaxPayloadLength(uint32) uint32 {
// 1450 // 1450
return 32 + 8 + 4 + 8 + 32 + 1366 return 32 + 8 + 4 + 8 + 32 + 1366
} }
// TargetChanID returns the channel id of the link for which this message is
// intended.
//
// NOTE: Part of lnd.LinkUpdater interface.
func (c *UpdateAddHTLC) TargetChanID() ChannelID {
return c.ChanID
}

View File

@ -1,6 +1,8 @@
package lnwire package lnwire
import "io" import (
"io"
)
// OpaqueReason is an opaque encrypted byte slice that encodes the exact // OpaqueReason is an opaque encrypted byte slice that encodes the exact
// failure reason and additional some supplemental data. The contents of this // failure reason and additional some supplemental data. The contents of this
@ -83,3 +85,11 @@ func (c *UpdateFailHTLC) MaxPayloadLength(uint32) uint32 {
return length return length
} }
// TargetChanID returns the channel id of the link for which this message is
// intended.
//
// NOTE: Part of lnd.LinkUpdater interface.
func (c *UpdateFailHTLC) TargetChanID() ChannelID {
return c.ChanID
}

View File

@ -73,3 +73,11 @@ func (c *UpdateFailMalformedHTLC) MaxPayloadLength(uint32) uint32 {
// 32 + 8 + 32 + 2 // 32 + 8 + 32 + 2
return 74 return 74
} }
// TargetChanID returns the channel id of the link for which this message is
// intended.
//
// NOTE: Part of lnd.LinkUpdater interface.
func (c *UpdateFailMalformedHTLC) TargetChanID() ChannelID {
return c.ChanID
}

View File

@ -68,3 +68,11 @@ func (c *UpdateFee) MaxPayloadLength(uint32) uint32 {
// 32 + 4 // 32 + 4
return 36 return 36
} }
// TargetChanID returns the channel id of the link for which this message is
// intended.
//
// NOTE: Part of lnd.LinkUpdater interface.
func (c *UpdateFee) TargetChanID() ChannelID {
return c.ChanID
}

View File

@ -1,6 +1,8 @@
package lnwire package lnwire
import "io" import (
"io"
)
// UpdateFulfillHTLC is sent by Alice to Bob when she wishes to settle a // UpdateFulfillHTLC is sent by Alice to Bob when she wishes to settle a
// particular HTLC referenced by its HTLCKey within a specific active channel // particular HTLC referenced by its HTLCKey within a specific active channel
@ -76,3 +78,11 @@ func (c *UpdateFulfillHTLC) MaxPayloadLength(uint32) uint32 {
// 32 + 8 + 32 // 32 + 8 + 32
return 72 return 72
} }
// TargetChanID returns the channel id of the link for which this message is
// intended.
//
// NOTE: Part of lnd.LinkUpdater interface.
func (c *UpdateFulfillHTLC) TargetChanID() ChannelID {
return c.ChanID
}

42
peer.go
View File

@ -1038,7 +1038,7 @@ out:
} }
var ( var (
isChanUpdate bool isLinkUpdate bool
targetChan lnwire.ChannelID targetChan lnwire.ChannelID
) )
@ -1105,7 +1105,7 @@ out:
// If not we hand the error to the channel link for // If not we hand the error to the channel link for
// this channel. // this channel.
default: default:
isChanUpdate = true isLinkUpdate = true
targetChan = msg.ChanID targetChan = msg.ChanID
// Also marked this channel as failed, so we // Also marked this channel as failed, so we
@ -1114,32 +1114,14 @@ out:
p.failedChannels[targetChan] = struct{}{} p.failedChannels[targetChan] = struct{}{}
} }
// TODO(roasbeef): create ChanUpdater interface for the below
case *lnwire.UpdateAddHTLC:
isChanUpdate = true
targetChan = msg.ChanID
case *lnwire.UpdateFulfillHTLC:
isChanUpdate = true
targetChan = msg.ChanID
case *lnwire.UpdateFailMalformedHTLC:
isChanUpdate = true
targetChan = msg.ChanID
case *lnwire.UpdateFailHTLC:
isChanUpdate = true
targetChan = msg.ChanID
case *lnwire.RevokeAndAck:
isChanUpdate = true
targetChan = msg.ChanID
case *lnwire.CommitSig:
isChanUpdate = true
targetChan = msg.ChanID
case *lnwire.UpdateFee:
isChanUpdate = true
targetChan = msg.ChanID
case *lnwire.ChannelReestablish: case *lnwire.ChannelReestablish:
isChanUpdate = true isLinkUpdate = true
targetChan = msg.ChanID targetChan = msg.ChanID
case LinkUpdater:
isLinkUpdate = true
targetChan = msg.TargetChanID()
case *lnwire.ChannelUpdate, case *lnwire.ChannelUpdate,
*lnwire.ChannelAnnouncement, *lnwire.ChannelAnnouncement,
*lnwire.NodeAnnouncement, *lnwire.NodeAnnouncement,
@ -1157,7 +1139,7 @@ out:
"%v", uint16(msg.MsgType()), p) "%v", uint16(msg.MsgType()), p)
} }
if isChanUpdate { if isLinkUpdate {
// If this is a channel update, then we need to feed it // If this is a channel update, then we need to feed it
// into the channel's in-order message stream. // into the channel's in-order message stream.
chanStream, ok := chanMsgStreams[targetChan] chanStream, ok := chanMsgStreams[targetChan]
@ -2543,4 +2525,12 @@ func (p *peer) StartTime() time.Time {
return p.startTime return p.startTime
} }
// LinkUpdater is an interface implemented by most messages in BOLT 2 that are
// allowed to update the channel state.
type LinkUpdater interface {
// TargetChanID returns the channel id of the link for which this
// message is intended.
TargetChanID() lnwire.ChannelID
}
// TODO(roasbeef): make all start/stop mutexes a CAS // TODO(roasbeef): make all start/stop mutexes a CAS