2
0
mirror of https://github.com/lightninglabs/loop synced 2024-11-16 00:12:52 +00:00
loop/liquidity/interface.go

87 lines
3.1 KiB
Go

package liquidity
import (
"context"
"github.com/btcsuite/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,
autoloop bool, 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
}