2
0
mirror of https://github.com/lightninglabs/loop synced 2024-11-04 06:00:21 +00:00
loop/liquidity/interface.go
George Tsagkarelis a48924a664
liquidity: get autoloop flag directly from params
Previously we would exclusively pass the autoloop boolean to multiple
functions while they had directly access to the manager's parameters.
With this commit we remove this explicit flag from the various function
interfaces and retrieve the value directly from the parameters.
2023-05-29 13:24:16 +03:00

87 lines
3.1 KiB
Go

package liquidity
import (
"context"
"github.com/btcsuite/btcd/btcutil"
"github.com/lightninglabs/loop"
"github.com/lightninglabs/loop/swap"
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/routing/route"
)
// FeeLimit is an interface implemented by different strategies for limiting
// the fees we pay for autoloops.
type FeeLimit interface {
// String returns the string representation of fee limits.
String() string
// validate returns an error if the values provided are invalid.
validate() error
// mayLoopOut checks whether we may dispatch a loop out swap based on
// the current fee conditions.
mayLoopOut(estimate chainfee.SatPerKWeight) error
// loopOutLimits checks whether the quote provided is within our fee
// limits for the swap amount.
loopOutLimits(amount btcutil.Amount, quote *loop.LoopOutQuote) error
// loopOutFees return the maximum prepay and invoice routing fees for
// a swap amount and quote.
loopOutFees(amount btcutil.Amount, quote *loop.LoopOutQuote) (
btcutil.Amount, btcutil.Amount, btcutil.Amount)
// loopInLimits checks whether the quote provided is within our fee
// limits for the swap amount.
loopInLimits(amount btcutil.Amount,
quote *loop.LoopInQuote) error
}
// swapBuilder is an interface used to build our different swap types.
type swapBuilder interface {
// swapType returns the swap type that the builder is responsible for
// creating.
swapType() swap.Type
// maySwap checks whether we can currently execute a swap, examining
// the current on-chain fee conditions against relevant to our swap
// type against our fee restrictions.
maySwap(ctx context.Context, params Parameters) error
// inUse examines our current swap traffic to determine whether we
// should suggest the builder's type of swap for the peer and channels
// suggested.
inUse(traffic *swapTraffic, peer route.Vertex,
channels []lnwire.ShortChannelID) error
// buildSwap creates a swap for the target peer/channels provided. The
// autoloop boolean indicates whether this swap will actually be
// executed, because there are some calls we can leave out if this swap
// is just for a dry run.
buildSwap(ctx context.Context, peer route.Vertex,
channels []lnwire.ShortChannelID, amount btcutil.Amount,
params Parameters) (swapSuggestion, error)
}
// swapSuggestion is an interface implemented by suggested swaps for our
// different swap types. This interface is used to allow us to handle different
// swap types with the same autoloop logic.
type swapSuggestion interface {
// fees returns the highest possible fee amount we could pay for a swap
// in satoshis.
fees() btcutil.Amount
// amount returns the swap amount in satoshis.
amount() btcutil.Amount
// channels returns the set of channels involved in the swap.
channels() []lnwire.ShortChannelID
// peers returns the set of peers involved in the swap, taking a map
// of known channel IDs to peers as an argument so that channel peers
// can be looked up.
peers(knownChans map[uint64]route.Vertex) []route.Vertex
}