Browse Source

multi: add confirmation target to loop in

carla 9 months ago
No known key found for this signature in database GPG Key ID: 4CA7FE54A6213C91
7 changed files with 258 additions and 108 deletions
  1. +35
  2. +2
  3. +35
  4. +74
  5. +102
  6. +5
  7. +5

+ 35
- 5
cmd/loop/loopin.go View File

@ -18,12 +18,29 @@ var (
Usage: "the pubkey of the last hop to use for this swap",
confTargetFlag = cli.Uint64Flag{
Name: "conf_target",
Usage: "the target number of blocks the on-chain " +
"htlc broadcast by the swap client should " +
"confirm within",
loopInCommand = cli.Command{
Name: "in",
Usage: "perform an on-chain to off-chain swap (loop in)",
ArgsUsage: "amt",
Description: `
Send the amount in satoshis specified by the amt argument off-chain.`,
Send the amount in satoshis specified by the amt argument
By default the swap client will create and broadcast the
on-chain htlc. The fee priority of this transaction can
optionally be set using the conf_target flag.
The external flag can be set to publish the on chain htlc
independently. Note that this flag cannot be set with the
conf_target flag.
Flags: []cli.Flag{
Name: "amt",
@ -33,6 +50,7 @@ var (
Name: "external",
Usage: "expect htlc to be published externally",
Action: loopIn,
@ -66,10 +84,21 @@ func loopIn(ctx *cli.Context) error {
defer cleanup()
external := ctx.Bool("external")
htlcConfTarget := int32(ctx.Uint64(confTargetFlag.Name))
// External and confirmation target are mutually exclusive; either the
// on chain htlc is being externally broadcast, or we are creating the
// on chain htlc with a desired confirmation target. Fail if both are
// set.
if external && htlcConfTarget != 0 {
return fmt.Errorf("external and conf_target both set")
quote, err := client.GetLoopInQuote(
Amt: int64(amt),
ConfTarget: htlcConfTarget,
ExternalHtlc: external,
@ -96,10 +125,11 @@ func loopIn(ctx *cli.Context) error {
req := &looprpc.LoopInRequest{
Amt: int64(amt),
MaxMinerFee: int64(limits.maxMinerFee),
MaxSwapFee: int64(limits.maxSwapFee),
ExternalHtlc: external,
Amt: int64(amt),
MaxMinerFee: int64(limits.maxMinerFee),
MaxSwapFee: int64(limits.maxSwapFee),
ExternalHtlc: external,
HtlcConfTarget: htlcConfTarget,
if ctx.IsSet(lastHopFlag.Name) {

+ 2
- 9
cmd/loop/quote.go View File

@ -22,15 +22,8 @@ var quoteInCommand = cli.Command{
Usage: "get a quote for the cost of a loop in swap",
ArgsUsage: "amt",
Description: "Allows to determine the cost of a swap up front",
Flags: []cli.Flag{
Name: "conf_target",
Usage: "the target number of blocks the on-chain " +
"htlc broadcast by the swap client should " +
"confirm within",
Action: quoteIn,
Flags: []cli.Flag{confTargetFlag},
Action: quoteIn,
func quoteIn(ctx *cli.Context) error {

+ 35
- 2
loopd/swapclient_server.go View File

@ -361,9 +361,16 @@ func (s *swapClientServer) GetLoopInQuote(ctx context.Context,
log.Infof("Loop in quote request received")
htlcConfTarget, err := validateLoopInRequest(
req.ConfTarget, req.ExternalHtlc,
if err != nil {
return nil, err
quote, err := s.impl.LoopInQuote(ctx, &loop.LoopInQuoteRequest{
Amount: btcutil.Amount(req.Amt),
HtlcConfTarget: loop.DefaultHtlcConfTarget,
HtlcConfTarget: htlcConfTarget,
ExternalHtlc: req.ExternalHtlc,
if err != nil {
@ -381,11 +388,18 @@ func (s *swapClientServer) LoopIn(ctx context.Context,
log.Infof("Loop in request received")
htlcConfTarget, err := validateLoopInRequest(
in.HtlcConfTarget, in.ExternalHtlc,
if err != nil {
return nil, err
req := &loop.LoopInRequest{
Amount: btcutil.Amount(in.Amt),
MaxMinerFee: btcutil.Amount(in.MaxMinerFee),
MaxSwapFee: btcutil.Amount(in.MaxSwapFee),
HtlcConfTarget: loop.DefaultHtlcConfTarget,
HtlcConfTarget: htlcConfTarget,
ExternalHtlc: in.ExternalHtlc,
if in.LastHop != nil {
@ -489,3 +503,22 @@ func validateConfTarget(target, defaultTarget int32) (int32, error) {
return target, nil
// validateLoopInRequest fails if the mutually exclusive conf target and
// external parameters are both set.
func validateLoopInRequest(htlcConfTarget int32, external bool) (int32, error) {
// If the htlc is going to be externally set, the htlcConfTarget should
// not be set, because it has no relevance when the htlc is external.
if external && htlcConfTarget != 0 {
return 0, errors.New("external and htlc conf target cannot " +
"both be set")
// If the htlc is being externally published, we do not need to set a
// confirmation target.
if external {
return 0, nil
return validateConfTarget(htlcConfTarget, loop.DefaultHtlcConfTarget)

+ 74
- 1
loopd/swapclient_server_test.go View File

@ -1,6 +1,10 @@
package loopd
import "testing"
import (
// TestValidateConfTarget tests all failure and success cases for our conf
// target validation function, including the case where we replace a zero
@ -70,3 +74,72 @@ func TestValidateConfTarget(t *testing.T) {
// TestValidateLoopInRequest tests validation of loop in requests.
func TestValidateLoopInRequest(t *testing.T) {
tests := []struct {
name string
external bool
confTarget int32
expectErr bool
expectedTarget int32
name: "external and htlc conf set",
external: true,
confTarget: 1,
expectErr: true,
expectedTarget: 0,
name: "external and no conf",
external: true,
confTarget: 0,
expectErr: false,
expectedTarget: 0,
name: "not external, zero conf",
external: false,
confTarget: 0,
expectErr: false,
expectedTarget: loop.DefaultHtlcConfTarget,
name: "not external, bad conf",
external: false,
confTarget: 1,
expectErr: true,
expectedTarget: 0,
name: "not external, ok conf",
external: false,
confTarget: 5,
expectErr: false,
expectedTarget: 5,
for _, test := range tests {
test := test
t.Run(, func(t *testing.T) {
external := test.external
conf, err := validateLoopInRequest(
test.confTarget, external,
haveErr := err != nil
if haveErr != test.expectErr {
t.Fatalf("expected err: %v, got: %v",
test.expectErr, err)
if conf != test.expectedTarget {
t.Fatalf("expected: %v, got: %v",
test.expectedTarget, conf)

+ 102
- 91
looprpc/client.pb.go View File

@ -291,7 +291,10 @@ type LoopInRequest struct {
//If external_htlc is true, we expect the htlc to be published by an external
ExternalHtlc bool `protobuf:"varint,5,opt,name=external_htlc,json=externalHtlc,proto3" json:"external_htlc,omitempty"`
ExternalHtlc bool `protobuf:"varint,5,opt,name=external_htlc,json=externalHtlc,proto3" json:"external_htlc,omitempty"`
//The number of blocks that the on chain htlc should confirm within.
HtlcConfTarget int32 `protobuf:"varint,6,opt,name=htlc_conf_target,json=htlcConfTarget,proto3" json:"htlc_conf_target,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -357,6 +360,13 @@ func (m *LoopInRequest) GetExternalHtlc() bool {
return false
func (m *LoopInRequest) GetHtlcConfTarget() int32 {
if m != nil {
return m.HtlcConfTarget
return 0
type SwapResponse struct {
//Swap identifier to track status in the update stream that is returned from
@ -1170,97 +1180,98 @@ func init() {
func init() { proto.RegisterFile("client.proto", fileDescriptor_014de31d7ac8c57c) }
var fileDescriptor_014de31d7ac8c57c = []byte{
// 1435 bytes of a gzipped FileDescriptorProto
// 1448 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x57, 0xcb, 0x6e, 0xdb, 0x46,
0x14, 0x0d, 0x25, 0xd9, 0x92, 0xae, 0x28, 0x8a, 0x1e, 0x27, 0xb6, 0xac, 0x36, 0x88, 0xc3, 0x36,
0xad, 0xe3, 0x45, 0xd4, 0x38, 0xab, 0x06, 0x45, 0x01, 0x47, 0x56, 0x62, 0x19, 0x7e, 0x95, 0x92,
0x03, 0x24, 0x1b, 0x66, 0x2c, 0x8e, 0x2d, 0xa2, 0x22, 0x87, 0xe1, 0x8c, 0x12, 0x1b, 0x41, 0x36,
0xfd, 0x85, 0xee, 0xba, 0xec, 0xa6, 0xeb, 0xae, 0xfb, 0x19, 0xfd, 0x85, 0x7e, 0x42, 0xb7, 0x05,
0x8a, 0x79, 0x88, 0x22, 0x2d, 0x3b, 0x8b, 0xec, 0xc4, 0x33, 0x67, 0xce, 0x5c, 0xde, 0xc7, 0x19,
0x0a, 0xcc, 0xe1, 0x38, 0x20, 0x11, 0x7f, 0x14, 0x27, 0x94, 0x53, 0x54, 0x1e, 0x53, 0x1a, 0x27,
0xf1, 0xb0, 0xf5, 0xe5, 0x39, 0xa5, 0xe7, 0x63, 0xd2, 0xc6, 0x71, 0xd0, 0xc6, 0x51, 0x44, 0x39,
0xe6, 0x01, 0x8d, 0x98, 0xa2, 0x39, 0xbf, 0x15, 0xc1, 0xda, 0xa7, 0x34, 0x3e, 0x9a, 0x70, 0x97,
0xbc, 0x9d, 0x10, 0xc6, 0x91, 0x0d, 0x45, 0x1c, 0xf2, 0xa6, 0xb1, 0x6e, 0x6c, 0x14, 0x5d, 0xf1,
0x13, 0x21, 0x28, 0xf9, 0x84, 0xf1, 0x66, 0x61, 0xdd, 0xd8, 0xa8, 0xba, 0xf2, 0x37, 0x6a, 0xc3,
0xed, 0x10, 0x5f, 0x78, 0xec, 0x3d, 0x8e, 0xbd, 0x84, 0x4e, 0x78, 0x10, 0x9d, 0x7b, 0x67, 0x84,
0x34, 0x8b, 0x72, 0xdb, 0x52, 0x88, 0x2f, 0xfa, 0xef, 0x71, 0xec, 0xaa, 0x95, 0xe7, 0x84, 0xa0,
0x27, 0xb0, 0x22, 0x36, 0xc4, 0x09, 0x89, 0xf1, 0x65, 0x6e, 0x4b, 0x49, 0x6e, 0x59, 0x0e, 0xf1,
0xc5, 0xb1, 0x5c, 0xcc, 0x6c, 0x5a, 0x07, 0x33, 0x3d, 0x45, 0x50, 0x17, 0x24, 0x15, 0xb4, 0xba,
0x60, 0x7c, 0x0d, 0x56, 0x46, 0x56, 0x04, 0xbe, 0x28, 0x39, 0x66, 0x2a, 0xb7, 0x1d, 0x72, 0xe4,
0x40, 0x5d, 0xb0, 0xc2, 0x20, 0x22, 0x89, 0x14, 0x2a, 0x4b, 0x52, 0x2d, 0xc4, 0x17, 0x07, 0x02,
0x13, 0x4a, 0x1b, 0x60, 0x8b, 0x9c, 0x79, 0x74, 0xc2, 0xbd, 0xe1, 0x08, 0x47, 0x11, 0x19, 0x37,
0x2b, 0xeb, 0xc6, 0x46, 0xc9, 0xb5, 0xc6, 0x2a, 0x43, 0x1d, 0x85, 0xa2, 0x4d, 0x58, 0x62, 0xef,
0x09, 0x89, 0xbd, 0x21, 0x8d, 0xce, 0x3c, 0x8e, 0x93, 0x73, 0xc2, 0x9b, 0xd5, 0x75, 0x63, 0x63,
0xc1, 0x6d, 0xc8, 0x85, 0x0e, 0x8d, 0xce, 0x06, 0x12, 0x46, 0x4f, 0x61, 0x4d, 0x46, 0x1f, 0x4f,
0x4e, 0xc7, 0xc1, 0x50, 0xe6, 0xde, 0xf3, 0x09, 0xf6, 0xc7, 0x41, 0x44, 0x9a, 0x20, 0xe5, 0x57,
0x05, 0xe1, 0x78, 0xb6, 0xbe, 0xa3, 0x97, 0x9d, 0x3f, 0x0c, 0xa8, 0x8b, 0xe2, 0xf4, 0xa2, 0x9b,
0x6b, 0x73, 0x35, 0x43, 0x85, 0xb9, 0x0c, 0xcd, 0xbd, 0x7b, 0x71, 0xfe, 0xdd, 0xd7, 0xa0, 0x32,
0xc6, 0x8c, 0x7b, 0x23, 0x1a, 0xcb, 0x72, 0x98, 0x6e, 0x59, 0x3c, 0xef, 0xd2, 0x18, 0x7d, 0x05,
0x75, 0x72, 0xc1, 0x49, 0x12, 0xe1, 0xb1, 0x37, 0xe2, 0xe3, 0xa1, 0xac, 0x41, 0xc5, 0x35, 0xa7,
0xe0, 0x2e, 0x1f, 0x0f, 0x9d, 0x37, 0x60, 0xca, 0x72, 0x13, 0x16, 0xd3, 0x88, 0x11, 0x84, 0xa0,
0x10, 0xf8, 0x32, 0xcc, 0xea, 0xb3, 0x42, 0xd3, 0x70, 0x0b, 0x81, 0x2f, 0xce, 0x08, 0x7c, 0xef,
0xf4, 0x92, 0x13, 0x26, 0x43, 0x30, 0xdd, 0x72, 0xe0, 0x3f, 0x13, 0x8f, 0xe8, 0x3e, 0x98, 0x42,
0xda, 0xc3, 0xbe, 0x9f, 0x10, 0xc6, 0x74, 0xa3, 0xd5, 0x04, 0xb6, 0xad, 0x20, 0xc7, 0x06, 0xeb,
0x80, 0x46, 0x01, 0xa7, 0x89, 0xce, 0x85, 0xf3, 0x5f, 0x01, 0x40, 0x1c, 0xda, 0xe7, 0x98, 0x4f,
0xd8, 0xb5, 0x6d, 0x2b, 0x82, 0x28, 0xdc, 0x18, 0x44, 0x2d, 0x1f, 0xc4, 0x03, 0x28, 0xf1, 0xcb,
0x58, 0xa5, 0xc7, 0xda, 0x5a, 0x7a, 0xa4, 0x07, 0xe8, 0x91, 0x38, 0x63, 0x70, 0x19, 0x13, 0x57,
0x2e, 0xa3, 0x0d, 0x58, 0x60, 0x1c, 0x73, 0xd5, 0xb6, 0xd6, 0x16, 0xca, 0xf1, 0x44, 0x2c, 0xc4,
0x55, 0x04, 0xf4, 0x2d, 0x34, 0x82, 0x28, 0xe0, 0x81, 0x2a, 0x3a, 0x0f, 0xc2, 0x69, 0xff, 0x5a,
0x33, 0x78, 0x10, 0x84, 0xaa, 0xf3, 0x44, 0xf6, 0x27, 0xb1, 0x8f, 0x39, 0x51, 0x4c, 0xd5, 0xc5,
0x96, 0xc0, 0x4f, 0x24, 0x2c, 0x99, 0x57, 0x13, 0x55, 0x9e, 0x4b, 0x14, 0xba, 0x07, 0xb5, 0x21,
0x65, 0xdc, 0x63, 0x24, 0x79, 0x47, 0x12, 0xd9, 0xc1, 0x45, 0x17, 0x04, 0xd4, 0x97, 0x88, 0xd0,
0x90, 0x04, 0x1a, 0x0d, 0x47, 0x38, 0x88, 0x64, 0xe3, 0x16, 0x5d, 0xb9, 0xe9, 0x48, 0x41, 0xa2,
0xe6, 0x8a, 0x72, 0x76, 0xa6, 0x38, 0xa0, 0x66, 0x4a, 0x72, 0x34, 0xe6, 0x20, 0xb0, 0xf7, 0x03,
0xc6, 0xc5, 0x6b, 0xb3, 0x69, 0x4d, 0x7e, 0x84, 0xa5, 0x0c, 0xa6, 0x9b, 0xe1, 0x21, 0x2c, 0x88,
0xf6, 0x64, 0x4d, 0x63, 0xbd, 0xb8, 0x51, 0xdb, 0x5a, 0x9e, 0xcb, 0xd8, 0x84, 0xb9, 0x8a, 0xe1,
0xdc, 0x87, 0x86, 0x00, 0x7b, 0xd1, 0x19, 0x9d, 0xb6, 0xbc, 0x95, 0xb6, 0x92, 0x29, 0x2a, 0xe8,
0x58, 0x60, 0x0e, 0x48, 0x12, 0xa6, 0x47, 0x7e, 0x84, 0xba, 0x7e, 0xd6, 0xc7, 0x7d, 0x03, 0x8d,
0x30, 0x88, 0xd4, 0x44, 0xe0, 0x90, 0x4e, 0x22, 0xae, 0xd3, 0x5e, 0x0f, 0x83, 0x48, 0xa8, 0x6f,
0x4b, 0x50, 0xf2, 0xa6, 0x93, 0xa3, 0x79, 0x8b, 0x9a, 0xa7, 0x86, 0x47, 0xf1, 0xf6, 0x4a, 0x15,
0xc3, 0x2e, 0xec, 0x95, 0x2a, 0x05, 0xbb, 0xb8, 0x57, 0xaa, 0x14, 0xed, 0xd2, 0x5e, 0xa9, 0x52,
0xb2, 0x17, 0xf6, 0x4a, 0x95, 0xb2, 0x5d, 0x71, 0x7e, 0x37, 0xc0, 0xfc, 0x69, 0x42, 0x39, 0xb9,
0x79, 0x44, 0x65, 0x45, 0x66, 0x46, 0x51, 0x90, 0x46, 0x01, 0xc3, 0x99, 0x47, 0xcc, 0x8d, 0x58,
0x71, 0x7e, 0xc4, 0x3e, 0x6d, 0x24, 0xa5, 0x4f, 0x1b, 0xc9, 0x9f, 0x06, 0xd4, 0x75, 0x90, 0x3a,
0x49, 0x6b, 0x50, 0x49, 0x2d, 0x43, 0x85, 0x5a, 0x66, 0xda, 0x2f, 0xee, 0x02, 0x64, 0xdc, 0x54,
0xf9, 0x49, 0x35, 0x4e, 0xad, 0xf4, 0x0b, 0xa8, 0x5e, 0xb5, 0x92, 0x4a, 0x38, 0xf5, 0x11, 0xe9,
0x8c, 0x22, 0x48, 0x7c, 0x19, 0x92, 0x88, 0x7b, 0xf2, 0xda, 0x50, 0x86, 0xd2, 0x90, 0xc1, 0x29,
0x7c, 0x47, 0x24, 0xea, 0x2e, 0xc0, 0x70, 0xcc, 0xdf, 0x79, 0x3e, 0x19, 0x73, 0x2c, 0x4b, 0xb4,
0xe0, 0x56, 0x05, 0xb2, 0x23, 0x00, 0xa7, 0x01, 0xf5, 0x01, 0xfd, 0x99, 0x44, 0x69, 0xa1, 0x7f,
0x00, 0x6b, 0x0a, 0xe8, 0x97, 0xd8, 0x84, 0x45, 0x2e, 0x11, 0xdd, 0x59, 0xb3, 0x59, 0xdc, 0x67,
0x98, 0x4b, 0xb2, 0xab, 0x19, 0xce, 0x5f, 0x05, 0xa8, 0xa6, 0xa8, 0xc8, 0xf8, 0x29, 0x66, 0xc4,
0x0b, 0xf1, 0x10, 0x27, 0x94, 0x46, 0xba, 0xbf, 0x4c, 0x01, 0x1e, 0x68, 0x4c, 0x0c, 0xca, 0xf4,
0x3d, 0x46, 0x98, 0x8d, 0x64, 0x2a, 0x4c, 0xb7, 0xa6, 0xb1, 0x5d, 0xcc, 0x46, 0xe8, 0x21, 0xd8,
0x53, 0x4a, 0x9c, 0x90, 0x20, 0xc4, 0xe7, 0x44, 0x7b, 0x5b, 0x43, 0xe3, 0xc7, 0x1a, 0x16, 0x43,
0xae, 0xba, 0xcc, 0x8b, 0x71, 0xe0, 0x7b, 0x21, 0xc3, 0x5c, 0xdf, 0x7c, 0x96, 0xc2, 0x8f, 0x71,
0xe0, 0x1f, 0x30, 0xcc, 0xd1, 0x63, 0xb8, 0x93, 0xb9, 0x1e, 0x33, 0x74, 0xd5, 0xc6, 0x28, 0x49,
0xef, 0xc7, 0x74, 0xcb, 0x7d, 0x30, 0x85, 0x6b, 0x78, 0xc3, 0x84, 0x60, 0x4e, 0x7c, 0xdd, 0xc8,
0x35, 0x81, 0x75, 0x14, 0x84, 0x9a, 0x50, 0x26, 0x17, 0x71, 0x90, 0x10, 0x5f, 0xba, 0x46, 0xc5,
0x9d, 0x3e, 0x8a, 0xcd, 0x8c, 0xd3, 0x04, 0x9f, 0x13, 0x2f, 0xc2, 0x21, 0x91, 0x96, 0x51, 0x75,
0x6b, 0x1a, 0x3b, 0xc4, 0x21, 0xd9, 0x7c, 0x00, 0x95, 0xa9, 0x0d, 0x22, 0x13, 0x2a, 0xfb, 0x47,
0x47, 0xc7, 0xde, 0xd1, 0xc9, 0xc0, 0xbe, 0x85, 0x6a, 0x50, 0x96, 0x4f, 0xbd, 0x43, 0xdb, 0xd8,
0x64, 0x50, 0x4d, 0x5d, 0x10, 0xd5, 0xa1, 0xda, 0x3b, 0xec, 0x0d, 0x7a, 0xdb, 0x83, 0xee, 0x8e,
0x7d, 0x0b, 0xdd, 0x81, 0xa5, 0x63, 0xb7, 0xdb, 0x3b, 0xd8, 0x7e, 0xd1, 0xf5, 0xdc, 0xee, 0xcb,
0xee, 0xf6, 0x7e, 0x77, 0xc7, 0x36, 0x10, 0x02, 0x6b, 0x77, 0xb0, 0xdf, 0xf1, 0x8e, 0x4f, 0x9e,
0xed, 0xf7, 0xfa, 0xbb, 0xdd, 0x1d, 0xbb, 0x20, 0x34, 0xfb, 0x27, 0x9d, 0x4e, 0xb7, 0xdf, 0xb7,
0x8b, 0x08, 0x60, 0xf1, 0xf9, 0x76, 0x4f, 0x90, 0x4b, 0x68, 0x19, 0x1a, 0xbd, 0xc3, 0x97, 0x47,
0xbd, 0x4e, 0xd7, 0xeb, 0x77, 0x07, 0x03, 0x01, 0x2e, 0x6c, 0xfd, 0xbb, 0xa8, 0xee, 0x81, 0x8e,
0xfc, 0xfc, 0x41, 0x2e, 0x94, 0xf5, 0x07, 0x0d, 0x5a, 0x9d, 0xf5, 0x43, 0xee, 0x13, 0xa7, 0x75,
0x27, 0x67, 0x41, 0xd3, 0x7e, 0x72, 0x56, 0x7f, 0xf9, 0xfb, 0x9f, 0x5f, 0x0b, 0x4b, 0x8e, 0xd9,
0x7e, 0xf7, 0xb8, 0x2d, 0x18, 0x6d, 0x3a, 0xe1, 0x4f, 0x8d, 0x4d, 0x74, 0x04, 0x8b, 0xea, 0x1e,
0x46, 0x2b, 0x39, 0xc9, 0xf4, 0x62, 0xbe, 0x49, 0x71, 0x45, 0x2a, 0xda, 0x4e, 0x2d, 0x55, 0x0c,
0x22, 0x21, 0xf8, 0x3d, 0x94, 0xf5, 0x6d, 0x96, 0x09, 0x32, 0x7f, 0xbf, 0xb5, 0xae, 0xf3, 0xc9,
0xef, 0x0c, 0xf4, 0x1a, 0xaa, 0xa9, 0xc5, 0xa2, 0xb5, 0x59, 0x38, 0x57, 0xac, 0xb8, 0xd5, 0xba,
0x6e, 0x29, 0x1f, 0x16, 0xb2, 0xd2, 0xb0, 0xa4, 0xfd, 0xa2, 0x13, 0x55, 0x66, 0x61, 0xbf, 0xa8,
0x99, 0x3b, 0x3e, 0xe3, 0xc8, 0xd7, 0x06, 0xe6, 0xb4, 0xa4, 0xe4, 0x6d, 0x84, 0x72, 0x92, 0xed,
0x0f, 0x81, 0xff, 0x11, 0xbd, 0x02, 0x53, 0x17, 0x40, 0x3a, 0x35, 0x9a, 0x25, 0x2b, 0xeb, 0xe4,
0xad, 0x95, 0xab, 0xb0, 0x8e, 0x76, 0x5e, 0x9a, 0x4e, 0x78, 0x9b, 0x4b, 0x29, 0x2f, 0x95, 0x96,
0xfe, 0x96, 0x91, 0xce, 0x9a, 0x72, 0x46, 0x3a, 0x67, 0x83, 0xce, 0xba, 0x94, 0x6e, 0xa1, 0x66,
0x4e, 0xfa, 0xad, 0xe0, 0xb4, 0x3f, 0xe0, 0x90, 0x7f, 0x44, 0xaf, 0xc1, 0x7a, 0x41, 0xb8, 0x2a,
0xf6, 0x67, 0x45, 0xbf, 0x26, 0x8f, 0x58, 0x46, 0x4b, 0x99, 0x16, 0xd0, 0xc1, 0xbf, 0xc9, 0x68,
0x7f, 0x56, 0xf8, 0xf7, 0xa4, 0xf6, 0x1a, 0x5a, 0xcd, 0x6a, 0x67, 0xa3, 0x7f, 0x05, 0x75, 0x71,
0xc2, 0xd4, 0xf7, 0x58, 0xa6, 0x7f, 0x73, 0xe6, 0xda, 0x5a, 0x9d, 0xc3, 0xf3, 0x33, 0x81, 0x1a,
0xf2, 0x08, 0x86, 0x79, 0x5b, 0x19, 0xea, 0xe9, 0xa2, 0xfc, 0x03, 0xf1, 0xe4, 0xff, 0x00, 0x00,
0x00, 0xff, 0xff, 0x47, 0xdd, 0x3b, 0x05, 0x77, 0x0c, 0x00, 0x00,
0x14, 0x0d, 0x25, 0x59, 0x8f, 0x2b, 0x8a, 0xa2, 0xc7, 0x89, 0x2d, 0xab, 0x0d, 0xe2, 0xb0, 0x4d,
0xeb, 0x78, 0x11, 0x35, 0xce, 0xaa, 0x41, 0x51, 0xc0, 0x91, 0x95, 0x58, 0x86, 0x5f, 0xa5, 0xe4,
0x00, 0xc9, 0x86, 0x19, 0x8b, 0x63, 0x9b, 0xa8, 0xc8, 0x61, 0x38, 0xa3, 0xc4, 0x46, 0x90, 0x4d,
0x7f, 0xa1, 0xbb, 0x2e, 0xfb, 0x07, 0x5d, 0xf7, 0x2b, 0x8a, 0xfe, 0x42, 0x3f, 0xa1, 0xdb, 0x02,
0xc5, 0x3c, 0x44, 0x91, 0x96, 0x9d, 0x45, 0x76, 0xe6, 0x99, 0x33, 0x67, 0xee, 0xdc, 0xc7, 0x19,
0x19, 0xcc, 0xd1, 0x38, 0x20, 0x11, 0x7f, 0x14, 0x27, 0x94, 0x53, 0x54, 0x19, 0x53, 0x1a, 0x27,
0xf1, 0xa8, 0xfd, 0xe5, 0x19, 0xa5, 0x67, 0x63, 0xd2, 0xc1, 0x71, 0xd0, 0xc1, 0x51, 0x44, 0x39,
0xe6, 0x01, 0x8d, 0x98, 0xa2, 0x39, 0xbf, 0x15, 0xc1, 0xda, 0xa3, 0x34, 0x3e, 0x9c, 0x70, 0x97,
0xbc, 0x9d, 0x10, 0xc6, 0x91, 0x0d, 0x45, 0x1c, 0xf2, 0x96, 0xb1, 0x66, 0xac, 0x17, 0x5d, 0xf1,
0x27, 0x42, 0x50, 0xf2, 0x09, 0xe3, 0xad, 0xc2, 0x9a, 0xb1, 0x5e, 0x73, 0xe5, 0xdf, 0xa8, 0x03,
0xb7, 0x43, 0x7c, 0xe1, 0xb1, 0xf7, 0x38, 0xf6, 0x12, 0x3a, 0xe1, 0x41, 0x74, 0xe6, 0x9d, 0x12,
0xd2, 0x2a, 0xca, 0x6d, 0x8b, 0x21, 0xbe, 0x18, 0xbc, 0xc7, 0xb1, 0xab, 0x56, 0x9e, 0x13, 0x82,
0x9e, 0xc0, 0xb2, 0xd8, 0x10, 0x27, 0x24, 0xc6, 0x97, 0xb9, 0x2d, 0x25, 0xb9, 0x65, 0x29, 0xc4,
0x17, 0x47, 0x72, 0x31, 0xb3, 0x69, 0x0d, 0xcc, 0xf4, 0x14, 0x41, 0x5d, 0x90, 0x54, 0xd0, 0xea,
0x82, 0xf1, 0x35, 0x58, 0x19, 0x59, 0x11, 0x78, 0x59, 0x72, 0xcc, 0x54, 0x6e, 0x2b, 0xe4, 0xc8,
0x81, 0x86, 0x60, 0x85, 0x41, 0x44, 0x12, 0x29, 0x54, 0x91, 0xa4, 0x7a, 0x88, 0x2f, 0xf6, 0x05,
0x26, 0x94, 0xd6, 0xc1, 0x16, 0x39, 0xf3, 0xe8, 0x84, 0x7b, 0xa3, 0x73, 0x1c, 0x45, 0x64, 0xdc,
0xaa, 0xae, 0x19, 0xeb, 0x25, 0xd7, 0x1a, 0xab, 0x0c, 0x75, 0x15, 0x8a, 0x36, 0x60, 0x91, 0xbd,
0x27, 0x24, 0xf6, 0x46, 0x34, 0x3a, 0xf5, 0x38, 0x4e, 0xce, 0x08, 0x6f, 0xd5, 0xd6, 0x8c, 0xf5,
0x05, 0xb7, 0x29, 0x17, 0xba, 0x34, 0x3a, 0x1d, 0x4a, 0x18, 0x3d, 0x85, 0x55, 0x19, 0x7d, 0x3c,
0x39, 0x19, 0x07, 0x23, 0x99, 0x7b, 0xcf, 0x27, 0xd8, 0x1f, 0x07, 0x11, 0x69, 0x81, 0x94, 0x5f,
0x11, 0x84, 0xa3, 0xd9, 0xfa, 0xb6, 0x5e, 0x76, 0xfe, 0x32, 0xa0, 0x21, 0x8a, 0xd3, 0x8f, 0x6e,
0xae, 0xcd, 0xd5, 0x0c, 0x15, 0xe6, 0x32, 0x34, 0x77, 0xf7, 0xe2, 0xfc, 0xdd, 0x57, 0xa1, 0x3a,
0xc6, 0x8c, 0x7b, 0xe7, 0x34, 0x96, 0xe5, 0x30, 0xdd, 0x8a, 0xf8, 0xde, 0xa1, 0x31, 0xfa, 0x0a,
0x1a, 0xe4, 0x82, 0x93, 0x24, 0xc2, 0x63, 0xef, 0x9c, 0x8f, 0x47, 0xb2, 0x06, 0x55, 0xd7, 0x9c,
0x82, 0x3b, 0x7c, 0x3c, 0x12, 0xb9, 0x13, 0x6b, 0xb9, 0x84, 0x94, 0x65, 0x42, 0x2c, 0x81, 0xcf,
0xf2, 0xe1, 0xbc, 0x01, 0x53, 0x36, 0x06, 0x61, 0x31, 0x8d, 0x18, 0x41, 0x08, 0x0a, 0x81, 0x2f,
0x2f, 0x54, 0x7b, 0x56, 0x68, 0x19, 0x6e, 0x21, 0xf0, 0x45, 0x34, 0x81, 0xef, 0x9d, 0x5c, 0x72,
0xc2, 0x64, 0xb0, 0xa6, 0x5b, 0x09, 0xfc, 0x67, 0xe2, 0x13, 0xdd, 0x07, 0x53, 0x1e, 0x84, 0x7d,
0x3f, 0x21, 0x8c, 0xe9, 0x96, 0xac, 0x0b, 0x6c, 0x4b, 0x41, 0x8e, 0x0d, 0xd6, 0x3e, 0x8d, 0x02,
0x4e, 0x13, 0x9d, 0x35, 0xe7, 0xbf, 0x02, 0x80, 0x38, 0x74, 0xc0, 0x31, 0x9f, 0xb0, 0x6b, 0x1b,
0x5c, 0x04, 0x51, 0xb8, 0x31, 0x88, 0x7a, 0x3e, 0x88, 0x07, 0x50, 0xe2, 0x97, 0xb1, 0x4a, 0xa4,
0xb5, 0xb9, 0xf8, 0x48, 0x8f, 0xda, 0x23, 0x71, 0xc6, 0xf0, 0x32, 0x26, 0xae, 0x5c, 0x46, 0xeb,
0xb0, 0xc0, 0x38, 0xe6, 0xaa, 0xc1, 0xad, 0x4d, 0x94, 0xe3, 0x89, 0x58, 0x88, 0xab, 0x08, 0xe8,
0x5b, 0x68, 0x06, 0x51, 0xc0, 0x03, 0xd5, 0x1e, 0x3c, 0x08, 0xa7, 0x9d, 0x6e, 0xcd, 0xe0, 0x61,
0x10, 0xaa, 0x1e, 0x15, 0x75, 0x9a, 0xc4, 0x3e, 0xe6, 0x44, 0x31, 0x55, 0xbf, 0x5b, 0x02, 0x3f,
0x96, 0xb0, 0x64, 0x5e, 0x4d, 0x54, 0x65, 0x2e, 0x51, 0xe8, 0x1e, 0xd4, 0x47, 0x94, 0x71, 0x8f,
0x91, 0xe4, 0x1d, 0x49, 0x64, 0xaf, 0x17, 0x5d, 0x10, 0xd0, 0x40, 0x22, 0x42, 0x43, 0x12, 0x68,
0x34, 0x3a, 0xc7, 0x41, 0x24, 0x5b, 0xbc, 0xe8, 0xca, 0x4d, 0x87, 0x0a, 0x12, 0xdd, 0xa1, 0x28,
0xa7, 0xa7, 0x8a, 0x03, 0x6a, 0xfa, 0x24, 0x47, 0x63, 0x0e, 0x02, 0x7b, 0x2f, 0x60, 0x5c, 0x5c,
0x9b, 0x4d, 0x6b, 0xf2, 0x23, 0x2c, 0x66, 0x30, 0xdd, 0x0c, 0x0f, 0x61, 0x41, 0x34, 0x32, 0x6b,
0x19, 0x6b, 0xc5, 0xf5, 0xfa, 0xe6, 0xd2, 0x5c, 0xc6, 0x26, 0xcc, 0x55, 0x0c, 0xe7, 0x3e, 0x34,
0x05, 0xd8, 0x8f, 0x4e, 0xe9, 0x74, 0x38, 0xac, 0xb4, 0x95, 0x4c, 0x51, 0x41, 0xc7, 0x02, 0x73,
0x48, 0x92, 0x30, 0x3d, 0xf2, 0x23, 0x34, 0xf4, 0xb7, 0x3e, 0xee, 0x1b, 0x68, 0x86, 0x41, 0xa4,
0x66, 0x07, 0x87, 0x74, 0x12, 0x71, 0x9d, 0xf6, 0x46, 0x18, 0x44, 0x42, 0x7d, 0x4b, 0x82, 0x92,
0x37, 0x9d, 0x31, 0xcd, 0x2b, 0x6b, 0x9e, 0x1a, 0x33, 0xc5, 0xdb, 0x2d, 0x55, 0x0d, 0xbb, 0xb0,
0x5b, 0xaa, 0x16, 0xec, 0xe2, 0x6e, 0xa9, 0x5a, 0xb4, 0x4b, 0xbb, 0xa5, 0x6a, 0xc9, 0x5e, 0xd8,
0x2d, 0x55, 0x2b, 0x76, 0xd5, 0xf9, 0xdd, 0x00, 0xf3, 0xa7, 0x09, 0xe5, 0xe4, 0xe6, 0x61, 0x96,
0x15, 0x99, 0x4d, 0x50, 0x41, 0x4e, 0x10, 0x8c, 0x66, 0x6e, 0x32, 0x37, 0x8c, 0xc5, 0x6b, 0x86,
0xf1, 0x93, 0x96, 0x53, 0xfa, 0xb4, 0xe5, 0xfc, 0x61, 0x40, 0x43, 0x07, 0xa9, 0x93, 0xb4, 0x0a,
0xd5, 0xd4, 0x5c, 0x54, 0xa8, 0x15, 0xa6, 0x9d, 0xe5, 0x2e, 0x40, 0xc6, 0x77, 0x95, 0xf3, 0xd4,
0xe2, 0xd4, 0x74, 0xbf, 0x80, 0xda, 0x55, 0xd3, 0xa9, 0x86, 0x53, 0xc7, 0x91, 0x1e, 0x2a, 0x82,
0xc4, 0x97, 0x21, 0x89, 0xb8, 0x27, 0x1f, 0x18, 0x65, 0x3d, 0x4d, 0x19, 0x9c, 0xc2, 0xb7, 0x45,
0xa2, 0xee, 0x02, 0x8c, 0xc6, 0xfc, 0x9d, 0xe7, 0x93, 0x31, 0xc7, 0xb2, 0x44, 0x0b, 0x6e, 0x4d,
0x20, 0xdb, 0x02, 0x70, 0x9a, 0xd0, 0x18, 0xd2, 0x9f, 0x49, 0x94, 0x16, 0xfa, 0x07, 0xb0, 0xa6,
0x80, 0xbe, 0xc4, 0x06, 0x94, 0xb9, 0x44, 0x74, 0x67, 0xcd, 0x66, 0x71, 0x8f, 0x61, 0x2e, 0xc9,
0xae, 0x66, 0x38, 0x7f, 0x16, 0xa0, 0x96, 0xa2, 0x22, 0xe3, 0x27, 0x98, 0x11, 0x2f, 0xc4, 0x23,
0x9c, 0x50, 0x1a, 0xe9, 0xfe, 0x32, 0x05, 0xb8, 0xaf, 0x31, 0x31, 0x28, 0xd3, 0x7b, 0x9c, 0x63,
0x76, 0x2e, 0x53, 0x61, 0xba, 0x75, 0x8d, 0xed, 0x60, 0x76, 0x8e, 0x1e, 0x82, 0x3d, 0xa5, 0xc4,
0x09, 0x09, 0x42, 0x7c, 0x46, 0xb4, 0xb7, 0x35, 0x35, 0x7e, 0xa4, 0x61, 0x31, 0xe4, 0xaa, 0xcb,
0xbc, 0x18, 0x07, 0xbe, 0x17, 0x32, 0xcc, 0xf5, 0x1b, 0x69, 0x29, 0xfc, 0x08, 0x07, 0xfe, 0x3e,
0xc3, 0x1c, 0x3d, 0x86, 0x3b, 0x99, 0x87, 0x34, 0x43, 0x57, 0x6d, 0x8c, 0x92, 0xf4, 0x25, 0x4d,
0xb7, 0xdc, 0x07, 0x53, 0xb8, 0x86, 0x37, 0x4a, 0x08, 0xe6, 0xc4, 0xd7, 0x8d, 0x5c, 0x17, 0x58,
0x57, 0x41, 0xa8, 0x05, 0x15, 0x72, 0x11, 0x07, 0x09, 0xf1, 0xa5, 0x6b, 0x54, 0xdd, 0xe9, 0xa7,
0xd8, 0xcc, 0x38, 0x4d, 0xf0, 0x19, 0xf1, 0x22, 0x1c, 0x12, 0x69, 0x19, 0x35, 0xb7, 0xae, 0xb1,
0x03, 0x1c, 0x92, 0x8d, 0x07, 0x50, 0x9d, 0xda, 0x20, 0x32, 0xa1, 0xba, 0x77, 0x78, 0x78, 0xe4,
0x1d, 0x1e, 0x0f, 0xed, 0x5b, 0xa8, 0x0e, 0x15, 0xf9, 0xd5, 0x3f, 0xb0, 0x8d, 0x0d, 0x06, 0xb5,
0xd4, 0x05, 0x51, 0x03, 0x6a, 0xfd, 0x83, 0xfe, 0xb0, 0xbf, 0x35, 0xec, 0x6d, 0xdb, 0xb7, 0xd0,
0x1d, 0x58, 0x3c, 0x72, 0x7b, 0xfd, 0xfd, 0xad, 0x17, 0x3d, 0xcf, 0xed, 0xbd, 0xec, 0x6d, 0xed,
0xf5, 0xb6, 0x6d, 0x03, 0x21, 0xb0, 0x76, 0x86, 0x7b, 0x5d, 0xef, 0xe8, 0xf8, 0xd9, 0x5e, 0x7f,
0xb0, 0xd3, 0xdb, 0xb6, 0x0b, 0x42, 0x73, 0x70, 0xdc, 0xed, 0xf6, 0x06, 0x03, 0xbb, 0x88, 0x00,
0xca, 0xcf, 0xb7, 0xfa, 0x82, 0x5c, 0x42, 0x4b, 0xd0, 0xec, 0x1f, 0xbc, 0x3c, 0xec, 0x77, 0x7b,
0xde, 0xa0, 0x37, 0x1c, 0x0a, 0x70, 0x61, 0xf3, 0xdf, 0xb2, 0x7a, 0x07, 0xba, 0xf2, 0x87, 0x12,
0x72, 0xa1, 0xa2, 0x7f, 0xfa, 0xa0, 0x95, 0x59, 0x3f, 0xe4, 0x7e, 0x0c, 0xb5, 0xef, 0xe4, 0x2c,
0x68, 0xda, 0x4f, 0xce, 0xca, 0x2f, 0x7f, 0xff, 0xf3, 0x6b, 0x61, 0xd1, 0x31, 0x3b, 0xef, 0x1e,
0x77, 0x04, 0xa3, 0x43, 0x27, 0xfc, 0xa9, 0xb1, 0x81, 0x0e, 0xa1, 0xac, 0x5e, 0x6c, 0xb4, 0x9c,
0x93, 0x4c, 0x9f, 0xf0, 0x9b, 0x14, 0x97, 0xa5, 0xa2, 0xed, 0xd4, 0x53, 0xc5, 0x20, 0x12, 0x82,
0xdf, 0x43, 0x45, 0xbf, 0x66, 0x99, 0x20, 0xf3, 0xef, 0x5b, 0xfb, 0x3a, 0x9f, 0xfc, 0xce, 0x40,
0xaf, 0xa1, 0x96, 0x5a, 0x2c, 0x5a, 0x9d, 0x85, 0x73, 0xc5, 0x8a, 0xdb, 0xed, 0xeb, 0x96, 0xf2,
0x61, 0x21, 0x2b, 0x0d, 0x4b, 0xda, 0x2f, 0x3a, 0x56, 0x65, 0x16, 0xf6, 0x8b, 0x5a, 0xb9, 0xe3,
0x33, 0x8e, 0x7c, 0x6d, 0x60, 0x4e, 0x5b, 0x4a, 0xde, 0x46, 0x28, 0x27, 0xd9, 0xf9, 0x10, 0xf8,
0x1f, 0xd1, 0x2b, 0x30, 0x75, 0x01, 0xa4, 0x53, 0xa3, 0x59, 0xb2, 0xb2, 0x4e, 0xde, 0x5e, 0xbe,
0x0a, 0xeb, 0x68, 0xe7, 0xa5, 0xe9, 0x84, 0x77, 0xb8, 0x94, 0xf2, 0x52, 0x69, 0xe9, 0x6f, 0x19,
0xe9, 0xac, 0x29, 0x67, 0xa4, 0x73, 0x36, 0xe8, 0xac, 0x49, 0xe9, 0x36, 0x6a, 0xe5, 0xa4, 0xdf,
0x0a, 0x4e, 0xe7, 0x03, 0x0e, 0xf9, 0x47, 0xf4, 0x1a, 0xac, 0x17, 0x84, 0xab, 0x62, 0x7f, 0x56,
0xf4, 0xab, 0xf2, 0x88, 0x25, 0xb4, 0x98, 0x69, 0x01, 0x1d, 0xfc, 0x9b, 0x8c, 0xf6, 0x67, 0x85,
0x7f, 0x4f, 0x6a, 0xaf, 0xa2, 0x95, 0xac, 0x76, 0x36, 0xfa, 0x57, 0xd0, 0x10, 0x27, 0x4c, 0x7d,
0x8f, 0x65, 0xfa, 0x37, 0x67, 0xae, 0xed, 0x95, 0x39, 0x3c, 0x3f, 0x13, 0xa8, 0x29, 0x8f, 0x60,
0x98, 0x77, 0x94, 0xa1, 0x9e, 0x94, 0xe5, 0xbf, 0x1a, 0x4f, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff,
0xc7, 0x1e, 0x66, 0x37, 0xa1, 0x0c, 0x00, 0x00,
// Reference imports to suppress errors if they are not otherwise used.

+ 5
- 0
looprpc/client.proto View File

@ -219,6 +219,11 @@ message LoopInRequest {
bool external_htlc = 5;
The number of blocks that the on chain htlc should confirm within.
int32 htlc_conf_target = 6;
message SwapResponse {

+ 5
- 0
looprpc/client.swagger.json View File

@ -307,6 +307,11 @@
"type": "boolean",
"format": "boolean",
"description": "*\nIf external_htlc is true, we expect the htlc to be published by an external\nactor."
"htlc_conf_target": {
"type": "integer",
"format": "int32",
"description": "*\nThe number of blocks that the on chain htlc should confirm within."