multi: surface may add outgoing hltc
This commit is contained in:
parent
e3a4d6e989
commit
5d717cb039
@ -145,6 +145,10 @@ type ChannelLink interface {
|
|||||||
// will use this function in forwarding decisions accordingly.
|
// will use this function in forwarding decisions accordingly.
|
||||||
EligibleToForward() bool
|
EligibleToForward() bool
|
||||||
|
|
||||||
|
// MayAddOutgoingHtlc returns an error if we may not add an outgoing
|
||||||
|
// htlc to the channel.
|
||||||
|
MayAddOutgoingHtlc() error
|
||||||
|
|
||||||
// AttachMailBox delivers an active MailBox to the link. The MailBox may
|
// AttachMailBox delivers an active MailBox to the link. The MailBox may
|
||||||
// have buffered messages.
|
// have buffered messages.
|
||||||
AttachMailBox(MailBox)
|
AttachMailBox(MailBox)
|
||||||
|
@ -2156,6 +2156,12 @@ func (l *channelLink) Bandwidth() lnwire.MilliSatoshi {
|
|||||||
return l.channel.AvailableBalance()
|
return l.channel.AvailableBalance()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MayAddOutgoingHtlc indicates whether we may add any more outgoing htlcs to
|
||||||
|
// this channel.
|
||||||
|
func (l *channelLink) MayAddOutgoingHtlc() error {
|
||||||
|
return l.channel.MayAddOutgoingHtlc()
|
||||||
|
}
|
||||||
|
|
||||||
// AttachMailBox updates the current mailbox used by this link, and hooks up
|
// AttachMailBox updates the current mailbox used by this link, and hooks up
|
||||||
// the mailbox's message and packet outboxes to the link's upstream and
|
// the mailbox's message and packet outboxes to the link's upstream and
|
||||||
// downstream chans, respectively.
|
// downstream chans, respectively.
|
||||||
|
@ -756,6 +756,7 @@ func (f *mockChannelLink) Peer() lnpeer.Peer { return
|
|||||||
func (f *mockChannelLink) ChannelPoint() *wire.OutPoint { return &wire.OutPoint{} }
|
func (f *mockChannelLink) ChannelPoint() *wire.OutPoint { return &wire.OutPoint{} }
|
||||||
func (f *mockChannelLink) Stop() {}
|
func (f *mockChannelLink) Stop() {}
|
||||||
func (f *mockChannelLink) EligibleToForward() bool { return f.eligible }
|
func (f *mockChannelLink) EligibleToForward() bool { return f.eligible }
|
||||||
|
func (f *mockChannelLink) MayAddOutgoingHtlc() error { return nil }
|
||||||
func (f *mockChannelLink) setLiveShortChanID(sid lnwire.ShortChannelID) { f.shortChanID = sid }
|
func (f *mockChannelLink) setLiveShortChanID(sid lnwire.ShortChannelID) { f.shortChanID = sid }
|
||||||
func (f *mockChannelLink) UpdateShortChanID() (lnwire.ShortChannelID, error) {
|
func (f *mockChannelLink) UpdateShortChanID() (lnwire.ShortChannelID, error) {
|
||||||
f.eligible = true
|
f.eligible = true
|
||||||
|
@ -4934,6 +4934,33 @@ func (lc *LightningChannel) AddHTLC(htlc *lnwire.UpdateAddHTLC,
|
|||||||
return pd.HtlcIndex, nil
|
return pd.HtlcIndex, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MayAddOutgoingHtlc validates whether we can add an outgoing htlc to this
|
||||||
|
// channel. We don't have a value or circuit for this htlc, because we just
|
||||||
|
// want to test that we have slots for a potential htlc so we use a "mock"
|
||||||
|
// htlc to validate a potential commitment state with one more outgoing htlc.
|
||||||
|
func (lc *LightningChannel) MayAddOutgoingHtlc() error {
|
||||||
|
lc.Lock()
|
||||||
|
defer lc.Unlock()
|
||||||
|
|
||||||
|
// Create a "mock" outgoing htlc, using the smallest amount we can add
|
||||||
|
// to the commitment so that we validate commitment slots rather than
|
||||||
|
// available balance, since our actual htlc amount is unknown at this
|
||||||
|
// stage.
|
||||||
|
pd := lc.htlcAddDescriptor(
|
||||||
|
&lnwire.UpdateAddHTLC{
|
||||||
|
Amount: lc.channelState.LocalChanCfg.MinHTLC,
|
||||||
|
},
|
||||||
|
&channeldb.CircuitKey{},
|
||||||
|
)
|
||||||
|
|
||||||
|
if err := lc.validateAddHtlc(pd); err != nil {
|
||||||
|
lc.log.Debugf("May add outgoing htlc rejected: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// htlcAddDescriptor returns a payment descriptor for the htlc and open key
|
// htlcAddDescriptor returns a payment descriptor for the htlc and open key
|
||||||
// provided to add to our local update log.
|
// provided to add to our local update log.
|
||||||
func (lc *LightningChannel) htlcAddDescriptor(htlc *lnwire.UpdateAddHTLC,
|
func (lc *LightningChannel) htlcAddDescriptor(htlc *lnwire.UpdateAddHTLC,
|
||||||
|
Loading…
Reference in New Issue
Block a user