htlcswitch: add new method to the ChannelLink interface, EligibleToForward

In this commit, we add a new method to the ChanneLink interface:
EligibleToForward. This method allows a link to be added to the switch,
but in an intermediate state which indicates that it isn’t yet ready to
forward any incoming HTLC’s.
This commit is contained in:
Olaoluwa Osuntokun 2017-12-05 17:48:28 -08:00
parent 455568279b
commit 36956d390f
No known key found for this signature in database
GPG Key ID: 964EA263DD637C21
3 changed files with 16 additions and 0 deletions

@ -85,6 +85,13 @@ type ChannelLink interface {
// the channel link opened. // the channel link opened.
Peer() Peer Peer() Peer
// EligibleToForward returns a bool indicating if the channel is able
// to actively accept requests to forward HTLC's. A channel may be
// active, but not able to forward HTLC's if it hasn't yet finalized
// the pre-channel operation protocol with the remote peer. The switch
// will use this function in forwarding decisions accordingly.
EligibleToForward() bool
// Start/Stop are used to initiate the start/stop of the channel link // Start/Stop are used to initiate the start/stop of the channel link
// functioning. // functioning.
Start() error Start() error

@ -292,6 +292,14 @@ func (l *channelLink) Stop() {
l.cfg.BlockEpochs.Cancel() l.cfg.BlockEpochs.Cancel()
} }
// EligibleToForward returns a bool indicating if the channel is able to
// actively accept requests to forward HTLC's. We're able to forward HTLC's if
// we know the remote party's next revocation point. Otherwise, we can't
// initiate new channel state.
func (l *channelLink) EligibleToForward() bool {
return l.channel.RemoteNextRevocation() != nil
}
// sampleNetworkFee samples the current fee rate on the network to get into the // sampleNetworkFee samples the current fee rate on the network to get into the
// chain in a timely manner. The returned value is expressed in fee-per-kw, as // chain in a timely manner. The returned value is expressed in fee-per-kw, as
// this is the native rate used when computing the fee for commitment // this is the native rate used when computing the fee for commitment

@ -430,6 +430,7 @@ func (f *mockChannelLink) Bandwidth() lnwire.MilliSatoshi { return 99999999
func (f *mockChannelLink) Peer() Peer { return f.peer } func (f *mockChannelLink) Peer() Peer { return f.peer }
func (f *mockChannelLink) Start() error { return nil } func (f *mockChannelLink) Start() error { return nil }
func (f *mockChannelLink) Stop() {} func (f *mockChannelLink) Stop() {}
func (f *mockChannelLink) EligibleToForward() bool { return true }
var _ ChannelLink = (*mockChannelLink)(nil) var _ ChannelLink = (*mockChannelLink)(nil)