client: LoopOutQuote to support estimate using v3 htlc

pull/497/head
Andras Banki-Horvath 2 years ago
parent 391ef57ea3
commit bf59159ddb
No known key found for this signature in database
GPG Key ID: 80E5375C094198D8

@ -499,7 +499,23 @@ func (s *Client) LoopOutQuote(ctx context.Context,
log.Infof("Offchain swap destination: %x", quote.SwapPaymentDest) log.Infof("Offchain swap destination: %x", quote.SwapPaymentDest)
swapFee := quote.SwapFee minerFee, err := s.getLoopOutSweepFee(ctx, request.SweepConfTarget)
if err != nil {
return nil, err
}
return &LoopOutQuote{
SwapFee: quote.SwapFee,
MinerFee: minerFee,
PrepayAmount: quote.PrepayAmount,
SwapPaymentDest: quote.SwapPaymentDest,
}, nil
}
// getLoopOutSweepFee is a helper method to estimate the loop out htlc sweep
// fee to a p2wsh address.
func (s *Client) getLoopOutSweepFee(ctx context.Context, confTarget int32) (
btcutil.Amount, error) {
// Generate dummy p2wsh address for fee estimation. The p2wsh address // Generate dummy p2wsh address for fee estimation. The p2wsh address
// type is chosen because it adds the most weight of all output types // type is chosen because it adds the most weight of all output types
@ -509,23 +525,21 @@ func (s *Client) LoopOutQuote(ctx context.Context,
wsh[:], s.lndServices.ChainParams, wsh[:], s.lndServices.ChainParams,
) )
if err != nil { if err != nil {
return nil, err return 0, err
} }
minerFee, err := s.sweeper.GetSweepFee( scriptVersion := GetHtlcScriptVersion(
ctx, swap.QuoteHtlc.AddSuccessToEstimator, loopdb.CurrentProtocolVersion(),
p2wshAddress, request.SweepConfTarget,
) )
if err != nil {
return nil, err htlc := swap.QuoteHtlcP2TR
if scriptVersion != swap.HtlcV3 {
htlc = swap.QuoteHtlcP2WSH
} }
return &LoopOutQuote{ return s.sweeper.GetSweepFee(
SwapFee: swapFee, ctx, htlc.AddSuccessToEstimator, p2wshAddress, confTarget,
MinerFee: minerFee, )
PrepayAmount: quote.PrepayAmount,
SwapPaymentDest: quote.SwapPaymentDest,
}, nil
} }
// LoopOutTerms returns the terms on which the server executes swaps. // LoopOutTerms returns the terms on which the server executes swaps.

@ -108,17 +108,30 @@ type Htlc struct {
} }
var ( var (
quoteKey [33]byte // dummyPubKey is a valid public key use for the quote htlc
// construction.
dummyPubKey = [33]byte{
0x03, 0x26, 0x89, 0xc7, 0xc2, 0xda, 0xb1, 0x33, 0x09, 0xfb,
0x14, 0x3e, 0x0e, 0x8f, 0xe3, 0x96, 0x34, 0x25, 0x21, 0x88,
0x7e, 0x97, 0x66, 0x90, 0xb6, 0xb4, 0x7f, 0x5b, 0x2a, 0x4b,
0x7d, 0x44, 0x8e,
}
// quoteHash is an empty hash used for the quote htlc construction.
quoteHash lntypes.Hash quoteHash lntypes.Hash
// QuoteHtlc is a template script just used for fee estimation. It uses // QuoteHtlcP2WSH is a template script just used for sweep fee
// the maximum value for cltv expiry to get the maximum (worst case) // estimation.
// script size. QuoteHtlcP2WSH, _ = NewHtlc(
QuoteHtlc, _ = NewHtlc( HtlcV2, ^int32(0), dummyPubKey, dummyPubKey, quoteHash,
HtlcV2, HtlcP2WSH, &chaincfg.MainNetParams,
^int32(0), quoteKey, quoteKey, quoteHash, HtlcP2WSH, )
&chaincfg.MainNetParams,
// QuoteHtlcP2TR is a template script just used for sweep fee
// estimation.
QuoteHtlcP2TR, _ = NewHtlc(
HtlcV3, ^int32(0), dummyPubKey, dummyPubKey, quoteHash,
HtlcP2TR, &chaincfg.MainNetParams,
) )
// ErrInvalidScriptVersion is returned when an unknown htlc version // ErrInvalidScriptVersion is returned when an unknown htlc version

Loading…
Cancel
Save