mirror of
https://github.com/lightninglabs/loop
synced 2024-11-13 13:10:30 +00:00
87 lines
3.1 KiB
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
|
|
}
|