client: LoopInQuote to support v3 htlc for fee estimate

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

@ -682,7 +682,7 @@ func (s *Client) LoopInQuote(ctx context.Context,
//
// TODO(guggero): Thread through error code from lnd to avoid string
// matching.
minerFee, err := s.lndServices.Client.EstimateFeeToP2WSH(
minerFee, err := s.estimateFee(
ctx, request.Amount, request.HtlcConfTarget,
)
if err != nil && strings.Contains(err.Error(), "insufficient funds") {
@ -703,6 +703,39 @@ func (s *Client) LoopInQuote(ctx context.Context,
}, nil
}
// estimateFee is a helper method to estimate the total fee for paying the
// passed amount with the given conf target. It'll assume taproot destination
// if the protocol version indicates that we're using taproot htlcs.
func (s *Client) estimateFee(ctx context.Context, amt btcutil.Amount,
confTarget int32) (btcutil.Amount, error) {
var (
address btcutil.Address
err error
)
// Generate a dummy address for fee estimation.
witnessProg := [32]byte{}
scriptVersion := GetHtlcScriptVersion(
loopdb.CurrentProtocolVersion(),
)
if scriptVersion != swap.HtlcV3 {
address, err = btcutil.NewAddressWitnessScriptHash(
witnessProg[:], s.lndServices.ChainParams,
)
} else {
address, err = btcutil.NewAddressTaproot(
witnessProg[:], s.lndServices.ChainParams,
)
}
if err != nil {
return 0, err
}
return s.lndServices.Client.EstimateFee(ctx, address, amt, confTarget)
}
// LoopInTerms returns the terms on which the server executes swaps.
func (s *Client) LoopInTerms(ctx context.Context) (
*LoopInTerms, error) {

Loading…
Cancel
Save