multi: move routing.TlvTrafficShaper => htlcswitch.AuxTrafficShaper
With this commit we move the traffic shaper definition from the routing package to the HTLC switch package as a preparation for being able to use it there as well. At the same time we rename it to AuxTrafficShaper to be more in line with the other auxiliary components.
This commit is contained in:
12 files changed
+167
-99
No files matched your search
@@ -206,6 +206,11 @@ const (
|
||||
Outgoing LinkDirection = true
|
||||
)
|
||||
|
||||
// OptionalBandwidth is a type alias for the result of a bandwidth query that
|
||||
// may return a bandwidth value or fn.None if the bandwidth is not available or
|
||||
// not applicable.
|
||||
type OptionalBandwidth = fn.Option[lnwire.MilliSatoshi]
|
||||
|
||||
// ChannelLink is an interface which represents the subsystem for managing the
|
||||
// incoming htlc requests, applying the changes to the channel, and also
|
||||
// propagating/forwarding it to htlc switch.
|
||||
@@ -284,8 +289,8 @@ type ChannelLink interface {
|
||||
// total sent/received milli-satoshis.
|
||||
Stats() (uint64, lnwire.MilliSatoshi, lnwire.MilliSatoshi)
|
||||
|
||||
// Peer returns the serialized public key of remote peer with which we
|
||||
// have the channel link opened.
|
||||
// PeerPubKey returns the serialized public key of remote peer with
|
||||
// which we have the channel link opened.
|
||||
PeerPubKey() [33]byte
|
||||
|
||||
// AttachMailBox delivers an active MailBox to the link. The MailBox may
|
||||
@@ -302,9 +307,18 @@ type ChannelLink interface {
|
||||
// commitment of the channel that this link is associated with.
|
||||
CommitmentCustomBlob() fn.Option[tlv.Blob]
|
||||
|
||||
// Start/Stop are used to initiate the start/stop of the channel link
|
||||
// functioning.
|
||||
// AuxBandwidth returns the bandwidth that can be used for a channel,
|
||||
// expressed in milli-satoshi. This might be different from the regular
|
||||
// BTC bandwidth for custom channels. This will always return fn.None()
|
||||
// for a regular (non-custom) channel.
|
||||
AuxBandwidth(amount lnwire.MilliSatoshi, cid lnwire.ShortChannelID,
|
||||
htlcBlob fn.Option[tlv.Blob],
|
||||
ts AuxTrafficShaper) fn.Result[OptionalBandwidth]
|
||||
|
||||
// Start starts the channel link.
|
||||
Start() error
|
||||
|
||||
// Stop requests the channel link to be shut down.
|
||||
Stop()
|
||||
}
|
||||
|
||||
@@ -440,7 +454,7 @@ type htlcNotifier interface {
|
||||
NotifyForwardingEvent(key HtlcKey, info HtlcInfo,
|
||||
eventType HtlcEventType)
|
||||
|
||||
// NotifyIncomingLinkFailEvent notifies that a htlc has failed on our
|
||||
// NotifyLinkFailEvent notifies that a htlc has failed on our
|
||||
// incoming link. It takes an isReceive bool to differentiate between
|
||||
// our node's receives and forwards.
|
||||
NotifyLinkFailEvent(key HtlcKey, info HtlcInfo,
|
||||
@@ -461,3 +475,36 @@ type htlcNotifier interface {
|
||||
NotifyFinalHtlcEvent(key models.CircuitKey,
|
||||
info channeldb.FinalHtlcInfo)
|
||||
}
|
||||
|
||||
// AuxHtlcModifier is an interface that allows the sender to modify the outgoing
|
||||
// HTLC of a payment by changing the amount or the wire message tlv records.
|
||||
type AuxHtlcModifier interface {
|
||||
// ProduceHtlcExtraData is a function that, based on the previous extra
|
||||
// data blob of an HTLC, may produce a different blob or modify the
|
||||
// amount of bitcoin this htlc should carry.
|
||||
ProduceHtlcExtraData(totalAmount lnwire.MilliSatoshi,
|
||||
htlcCustomRecords lnwire.CustomRecords) (lnwire.MilliSatoshi,
|
||||
lnwire.CustomRecords, error)
|
||||
}
|
||||
|
||||
// AuxTrafficShaper is an interface that allows the sender to determine if a
|
||||
// payment should be carried by a channel based on the TLV records that may be
|
||||
// present in the `update_add_htlc` message or the channel commitment itself.
|
||||
type AuxTrafficShaper interface {
|
||||
AuxHtlcModifier
|
||||
|
||||
// ShouldHandleTraffic is called in order to check if the channel
|
||||
// identified by the provided channel ID may have external mechanisms
|
||||
// that would allow it to carry out the payment.
|
||||
ShouldHandleTraffic(cid lnwire.ShortChannelID,
|
||||
fundingBlob fn.Option[tlv.Blob]) (bool, error)
|
||||
|
||||
// PaymentBandwidth returns the available bandwidth for a custom channel
|
||||
// decided by the given channel aux blob and HTLC blob. A return value
|
||||
// of 0 means there is no bandwidth available. To find out if a channel
|
||||
// is a custom channel that should be handled by the traffic shaper, the
|
||||
// ShouldHandleTraffic method should be called first.
|
||||
PaymentBandwidth(htlcBlob, commitmentBlob fn.Option[tlv.Blob],
|
||||
linkBandwidth,
|
||||
htlcAmt lnwire.MilliSatoshi) (lnwire.MilliSatoshi, error)
|
||||
}
|
||||
Reference in new issue
Block a user