mirror of
https://github.com/lightninglabs/loop
synced 2024-11-04 06:00:21 +00:00
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package liquidity
|
|
|
|
import (
|
|
"github.com/btcsuite/btcd/btcutil"
|
|
"github.com/lightninglabs/loop"
|
|
"github.com/lightningnetwork/lnd/lnwire"
|
|
"github.com/lightningnetwork/lnd/routing/route"
|
|
)
|
|
|
|
// Compile-time assertion that loopOutSwapSuggestion satisfies the
|
|
// swapSuggestion interface.
|
|
var _ swapSuggestion = (*loopOutSwapSuggestion)(nil)
|
|
|
|
// loopOutSwapSuggestion is an implementation of the swapSuggestion interface
|
|
// implemented to allow us to abstract away from the details of a specific
|
|
// swap.
|
|
type loopOutSwapSuggestion struct {
|
|
loop.OutRequest
|
|
}
|
|
|
|
// amount returns the amount being swapped.
|
|
func (l *loopOutSwapSuggestion) amount() btcutil.Amount {
|
|
return l.OutRequest.Amount
|
|
}
|
|
|
|
// fees returns the maximum fees we could possibly pay for this swap.
|
|
func (l *loopOutSwapSuggestion) fees() btcutil.Amount {
|
|
return worstCaseOutFees(
|
|
l.OutRequest.MaxPrepayRoutingFee, l.OutRequest.MaxSwapRoutingFee,
|
|
l.OutRequest.MaxSwapFee, l.OutRequest.MaxMinerFee,
|
|
)
|
|
}
|
|
|
|
// channels returns the set of channels the loop out swap is restricted to.
|
|
func (l *loopOutSwapSuggestion) channels() []lnwire.ShortChannelID {
|
|
channels := make(
|
|
[]lnwire.ShortChannelID, len(l.OutRequest.OutgoingChanSet),
|
|
)
|
|
|
|
for i, id := range l.OutRequest.OutgoingChanSet {
|
|
channels[i] = lnwire.NewShortChanIDFromInt(id)
|
|
}
|
|
|
|
return channels
|
|
}
|
|
|
|
// peers returns the set of peers that the loop out swap is restricted to.
|
|
func (l *loopOutSwapSuggestion) peers(
|
|
knownChans map[uint64]route.Vertex) []route.Vertex {
|
|
|
|
peers := make(map[route.Vertex]struct{}, len(knownChans))
|
|
|
|
for _, channel := range l.OutRequest.OutgoingChanSet {
|
|
peer, ok := knownChans[channel]
|
|
if !ok {
|
|
log.Warnf("peer for channel: %v unknown", channel)
|
|
}
|
|
|
|
peers[peer] = struct{}{}
|
|
}
|
|
|
|
peerList := make([]route.Vertex, 0, len(peers))
|
|
for peer := range peers {
|
|
peerList = append(peerList, peer)
|
|
}
|
|
|
|
return peerList
|
|
}
|