Documentation ¶
Index ¶
- Variables
- func UseLogger(logger btclog.Logger)
- func Version() string
- type Client
- func (s *Client) FetchSwaps() ([]*SwapInfo, error)
- func (s *Client) LoopIn(globalCtx context.Context, request *LoopInRequest) (*lntypes.Hash, btcutil.Address, error)
- func (s *Client) LoopInQuote(ctx context.Context, request *LoopInQuoteRequest) (*LoopInQuote, error)
- func (s *Client) LoopInTerms(ctx context.Context) (*LoopInTerms, error)
- func (s *Client) LoopOut(globalCtx context.Context, request *OutRequest) (*lntypes.Hash, btcutil.Address, error)
- func (s *Client) LoopOutQuote(ctx context.Context, request *LoopOutQuoteRequest) (*LoopOutQuote, error)
- func (s *Client) LoopOutTerms(ctx context.Context) (*LoopOutTerms, error)
- func (s *Client) Run(ctx context.Context, statusChan chan<- SwapInfo) error
- type In
- type LoopInQuote
- type LoopInQuoteRequest
- type LoopInRequest
- type LoopInTerms
- type LoopOutQuote
- type LoopOutQuoteRequest
- type LoopOutTerms
- type Out
- type OutRequest
- type SwapInfo
- type SwapInfoKit
Constants ¶
This section is empty.
Variables ¶
var ( // ErrSwapFeeTooHigh is returned when the swap invoice amount is too // high. ErrSwapFeeTooHigh = errors.New("swap fee too high") // ErrPrepayAmountTooHigh is returned when the prepay invoice amount is // too high. ErrPrepayAmountTooHigh = errors.New("prepay amount too high") // ErrSwapAmountTooLow is returned when the requested swap amount is // less than the server minimum. ErrSwapAmountTooLow = errors.New("swap amount too low") // ErrSwapAmountTooHigh is returned when the requested swap amount is // more than the server maximum. ErrSwapAmountTooHigh = errors.New("swap amount too high") // ErrExpiryTooSoon is returned when the server proposes an expiry that // is too soon for us. ErrExpiryTooSoon = errors.New("swap expiry too soon") // ErrExpiryTooFar is returned when the server proposes an expiry that // is too soon for us. ErrExpiryTooFar = errors.New("swap expiry too far") // ErrSweepConfTargetTooFar is returned when the client proposes a // confirmation target to sweep the on-chain HTLC of a Loop Out that is // beyond the expiration height proposed by the server. ErrSweepConfTargetTooFar = errors.New("sweep confirmation target is " + "beyond swap expiration height") )
var ( // MaxLoopInAcceptDelta configures the maximum acceptable number of // remaining blocks until the on-chain htlc expires. This value is used // to decide whether we want to continue with the swap parameters as // proposed by the server. It is a protection to prevent the server from // getting us to lock up our funds to an arbitrary point in the future. MaxLoopInAcceptDelta = int32(1500) // MinLoopInPublishDelta defines the minimum number of remaining blocks // until on-chain htlc expiry required to proceed to publishing the htlc // tx. This value isn't critical, as we could even safely publish the // htlc after expiry. The reason we do implement this check is to // prevent us from publishing an htlc that the server surely wouldn't // follow up to. MinLoopInPublishDelta = int32(10) // TimeoutTxConfTarget defines the confirmation target for the loop in // timeout tx. TimeoutTxConfTarget = int32(2) )
var ( // MinLoopOutPreimageRevealDelta configures the minimum number of // remaining blocks before htlc expiry required to reveal preimage. MinLoopOutPreimageRevealDelta int32 = 20 // DefaultSweepConfTarget is the default confirmation target we'll use // when sweeping on-chain HTLCs. DefaultSweepConfTarget int32 = 6 // DefaultSweepConfTargetDelta is the delta of blocks from a Loop Out // swap's expiration height at which we begin to use the default sweep // confirmation target. // // TODO(wilmer): tune? DefaultSweepConfTargetDelta = DefaultSweepConfTarget * 2 )
var Commit string
Commit stores the current commit hash of this build, this should be set using the -ldflags during compilation.
Functions ¶
func UseLogger ¶
UseLogger uses a specified Logger to output package logging info. This should be used in preference to SetLogWriter if the caller is also using btclog.
func Version ¶
func Version() string
Version returns the application version as a properly formed string per the semantic versioning 2.0.0 spec (http://semver.org/).
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client performs the client side part of swaps. This interface exists to be able to implement a stub.
func NewClient ¶
func NewClient(dbDir string, serverAddress string, insecure bool, tlsPathServer string, lnd *lndclient.LndServices, maxLSATCost, maxLSATFee btcutil.Amount) (*Client, func(), error)
NewClient returns a new instance to initiate swaps with.
func (*Client) FetchSwaps ¶
FetchSwaps returns all loop in and out swaps currently in the database.
func (*Client) LoopIn ¶
func (s *Client) LoopIn(globalCtx context.Context, request *LoopInRequest) (*lntypes.Hash, btcutil.Address, error)
LoopIn initiates a loop in swap.
func (*Client) LoopInQuote ¶
func (s *Client) LoopInQuote(ctx context.Context, request *LoopInQuoteRequest) (*LoopInQuote, error)
LoopInQuote takes an amount and returns a break down of estimated costs for the client. Both the swap server and the on-chain fee estimator are queried to get to build the quote response.
func (*Client) LoopInTerms ¶
func (s *Client) LoopInTerms(ctx context.Context) ( *LoopInTerms, error)
LoopInTerms returns the terms on which the server executes swaps.
func (*Client) LoopOut ¶
func (s *Client) LoopOut(globalCtx context.Context, request *OutRequest) (*lntypes.Hash, btcutil.Address, error)
LoopOut initiates a loop out swap. It blocks until the swap is initiation with the swap server is completed (typically this takes only a short amount of time). From there on further status information can be acquired through the status channel returned from the Run call.
When the call returns, the swap has been persisted and will be resumed automatically after restarts.
The return value is a hash that uniquely identifies the new swap.
func (*Client) LoopOutQuote ¶
func (s *Client) LoopOutQuote(ctx context.Context, request *LoopOutQuoteRequest) (*LoopOutQuote, error)
LoopOutQuote takes a LoopOut amount and returns a break down of estimated costs for the client. Both the swap server and the on-chain fee estimator are queried to get to build the quote response.
func (*Client) LoopOutTerms ¶
func (s *Client) LoopOutTerms(ctx context.Context) ( *LoopOutTerms, error)
LoopOutTerms returns the terms on which the server executes swaps.
type In ¶
type In struct { loopdb.LoopInContract SwapInfoKit // State where the swap is in. State loopdb.SwapState }
In contains status information for a loop in swap.
func (*In) LastUpdate ¶
LastUpdate returns the last update time of the swap
type LoopInQuote ¶
type LoopInQuote struct { // SwapFee is the fee that the swap server is charging for the swap. SwapFee btcutil.Amount // MinerFee is an estimate of the on-chain fee that needs to be paid to // sweep the htlc. MinerFee btcutil.Amount // Time lock delta relative to current block height that swap server // will accept on the swap initiation call. CltvDelta int32 }
LoopInQuote contains estimates for the fees making up the total swap cost for the client.
type LoopInQuoteRequest ¶
type LoopInQuoteRequest struct { // Amount specifies the requested swap amount in sat. This does not // include the swap and miner fee. Amount btcutil.Amount // HtlcConfTarget specifies the targeted confirmation target for the // client sweep tx. HtlcConfTarget int32 // ExternalHtlc specifies whether the htlc is published by an external // source. ExternalHtlc bool }
LoopInQuoteRequest specifies the swap parameters for which a quote is requested.
type LoopInRequest ¶
type LoopInRequest struct { // Amount specifies the requested swap amount in sat. This does not // include the swap and miner fee. Amount btcutil.Amount // MaxSwapFee is the maximum we are willing to pay the server for the // swap. This value is not disclosed in the swap initiation call, but if // the server asks for a higher fee, we abort the swap. Typically this // value is taken from the response of the LoopInQuote call. It // includes the prepay amount. MaxSwapFee btcutil.Amount // MaxMinerFee is the maximum in on-chain fees that we are willing to // spent. If we publish the on-chain htlc and the fee estimate turns out // higher than this value, we cancel the swap. // // MaxMinerFee is typically taken from the response of the LoopInQuote // call. MaxMinerFee btcutil.Amount // HtlcConfTarget specifies the targeted confirmation target for the // client htlc tx. HtlcConfTarget int32 // LoopInChannel optionally specifies the short channel id of the // channel to loop in. LoopInChannel *uint64 // ExternalHtlc specifies whether the htlc is published by an external // source. ExternalHtlc bool }
LoopInRequest contains the required parameters for the swap.
type LoopInTerms ¶
type LoopInTerms struct { // MinSwapAmount is the minimum amount that the server requires for a // swap. MinSwapAmount btcutil.Amount // MaxSwapAmount is the maximum amount that the server accepts for a // swap. MaxSwapAmount btcutil.Amount }
LoopInTerms are the server terms on which it executes loop in swaps.
type LoopOutQuote ¶
type LoopOutQuote struct { // SwapFee is the fee that the swap server is charging for the swap. SwapFee btcutil.Amount // PrepayAmount is the part of the swap fee that is requested as a // prepayment. PrepayAmount btcutil.Amount // MinerFee is an estimate of the on-chain fee that needs to be paid to // sweep the htlc. MinerFee btcutil.Amount // Time lock delta relative to current block height that swap server // will accept on the swap initiation call. CltvDelta int32 // SwapPaymentDest is the node pubkey where to swap payment needs to be // sent to. SwapPaymentDest [33]byte }
LoopOutQuote contains estimates for the fees making up the total swap cost for the client.
type LoopOutQuoteRequest ¶
type LoopOutQuoteRequest struct { // Amount specifies the requested swap amount in sat. This does not // include the swap and miner fee. Amount btcutil.Amount // SweepConfTarget specifies the targeted confirmation target for the // client sweep tx. SweepConfTarget int32 // SwapPublicationDeadline can be set by the client to allow the server // delaying publication of the swap HTLC to save on chain fees. SwapPublicationDeadline time.Time }
LoopOutQuoteRequest specifies the swap parameters for which a quote is requested.
type LoopOutTerms ¶
type LoopOutTerms struct { // MinSwapAmount is the minimum amount that the server requires for a // swap. MinSwapAmount btcutil.Amount // MaxSwapAmount is the maximum amount that the server accepts for a // swap. MaxSwapAmount btcutil.Amount }
LoopOutTerms are the server terms on which it executes swaps.
type Out ¶
type Out struct { // LoopOutContract describes the details of this loop.Out. Using these // details,the full swap can be executed. loopdb.LoopOutContract // State is the current state of the target swap. State loopdb.SwapState // SwapInfoKit contains shared data amongst all swap types. SwapInfoKit }
Out contains the full details of a loop out request. This includes things like the payment hash, the total value, and the final CTLV delay of the swap. We'll use this to track an active swap throughout that various swap stages.
type OutRequest ¶
type OutRequest struct { // Amount specifies the requested swap amount in sat. This does not // include the swap and miner fee. Amount btcutil.Amount // Destination address for the swap. DestAddr btcutil.Address // MaxSwapRoutingFee is the maximum off-chain fee in msat that may be // paid for payment to the server. This limit is applied during path // finding. Typically this value is taken from the response of the // LoopOutQuote call. MaxSwapRoutingFee btcutil.Amount // MaxPrepayRoutingFee is the maximum off-chain fee in msat that may be // paid for payment to the server. This limit is applied during path // finding. Typically this value is taken from the response of the // LoopOutQuote call. MaxPrepayRoutingFee btcutil.Amount // MaxSwapFee is the maximum we are willing to pay the server for the // swap. This value is not disclosed in the swap initiation call, but // if the server asks for a higher fee, we abort the swap. Typically // this value is taken from the response of the LoopOutQuote call. It // includes the prepay amount. MaxSwapFee btcutil.Amount // MaxPrepayAmount is the maximum amount of the swap fee that may be // charged as a prepayment. MaxPrepayAmount btcutil.Amount // MaxMinerFee is the maximum in on-chain fees that we are willing to // spent. If we want to sweep the on-chain htlc and the fee estimate // turns out higher than this value, we cancel the swap. If the fee // estimate is lower, we publish the sweep tx. // // If the sweep tx isn't confirmed, we are forced to ratchet up fees // until it is swept. Possibly even exceeding MaxMinerFee if we get // close to the htlc timeout. Because the initial publication revealed // the preimage, we have no other choice. The server may already have // pulled the off-chain htlc. Only when the fee becomes higher than the // swap amount, we can only wait for fees to come down and hope - if we // are past the timeout - that the server isn't publishing the // revocation. // // MaxMinerFee is typically taken from the response of the // LoopOutQuote call. MaxMinerFee btcutil.Amount // SweepConfTarget specifies the targeted confirmation target for the // client sweep tx. SweepConfTarget int32 // LoopOutChannel optionally specifies the short channel id of the // channel to loop out. LoopOutChannel *uint64 // SwapPublicationDeadline can be set by the client to allow the server // delaying publication of the swap HTLC to save on chain fees. SwapPublicationDeadline time.Time }
OutRequest contains the required parameters for a loop out swap.
type SwapInfo ¶
type SwapInfo struct { loopdb.SwapStateData LastUpdate time.Time SwapHash lntypes.Hash SwapType swap.Type loopdb.SwapContract HtlcAddress btcutil.Address }
SwapInfo exposes common info fields for loop in and loop out swaps.
type SwapInfoKit ¶
type SwapInfoKit struct { // Hash is the sha256 hash of the preimage that unlocks the htlcs. It // is used to uniquely identify this swap. Hash lntypes.Hash // LastUpdateTime is the time of the last update of this swap. LastUpdateTime time.Time }
SwapInfoKit contains common swap info fields.