diff --git a/cmd/loop/liquidity.go b/cmd/loop/liquidity.go index 5492f204..8a9b17a3 100644 --- a/cmd/loop/liquidity.go +++ b/cmd/loop/liquidity.go @@ -340,6 +340,11 @@ var setParamsCommand = &cli.Command{ Usage: "the confirmation target for loop in on-chain " + "htlcs.", }, + &cli.StringFlag{ + Name: "loopinsource", + Usage: "the loop-in source to use for autoloop rules: " + + "wallet or static-address.", + }, &cli.BoolFlag{ Name: "easyautoloop", Usage: "set to true to enable easy autoloop, which " + @@ -555,6 +560,25 @@ func setParams(ctx context.Context, cmd *cli.Command) error { flagSet = true } + if cmd.IsSet("loopinsource") { + switch cmd.String("loopinsource") { + case "wallet": + params.LoopInSource = + looprpc.LoopInSource_LOOP_IN_SOURCE_WALLET + + case "static-address", "static_address", "static": + params.LoopInSource = + looprpc.LoopInSource_LOOP_IN_SOURCE_STATIC_ADDRESS + + default: + return fmt.Errorf("unknown loopinsource value %q "+ + "(use \"wallet\" or \"static-address\")", + cmd.String("loopinsource")) + } + + flagSet = true + } + // If we are setting easy autoloop parameters, we need to ensure that // the asset ID is set, and that we have a valid entry in our params // map. diff --git a/cmd/loop/testdata/sessions/liquidity/01_loop-getparams.json b/cmd/loop/testdata/sessions/liquidity/01_loop-getparams.json index 8d1e3b37..b833d0fb 100644 --- a/cmd/loop/testdata/sessions/liquidity/01_loop-getparams.json +++ b/cmd/loop/testdata/sessions/liquidity/01_loop-getparams.json @@ -58,7 +58,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -85,6 +86,7 @@ " \"fast_swap_publication\": true,\n", " \"fee_ppm\": \"20000\",\n", " \"htlc_conf_target\": 6,\n", + " \"loop_in_source\": \"LOOP_IN_SOURCE_WALLET\",\n", " \"max_miner_fee_sat\": \"0\",\n", " \"max_prepay_routing_fee_ppm\": \"0\",\n", " \"max_prepay_sat\": \"0\",\n", diff --git a/cmd/loop/testdata/sessions/liquidity/02_loop-setparams-no-flags.json b/cmd/loop/testdata/sessions/liquidity/02_loop-setparams-no-flags.json index 00ab0b4f..b0c58d46 100644 --- a/cmd/loop/testdata/sessions/liquidity/02_loop-setparams-no-flags.json +++ b/cmd/loop/testdata/sessions/liquidity/02_loop-setparams-no-flags.json @@ -68,7 +68,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, diff --git a/cmd/loop/testdata/sessions/liquidity/03_loop-setparams-feepercent.json b/cmd/loop/testdata/sessions/liquidity/03_loop-setparams-feepercent.json index 95e99cd5..3b356b1e 100644 --- a/cmd/loop/testdata/sessions/liquidity/03_loop-setparams-feepercent.json +++ b/cmd/loop/testdata/sessions/liquidity/03_loop-setparams-feepercent.json @@ -60,7 +60,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -99,7 +100,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/04_loop-setparams-feepercent-conflict.json b/cmd/loop/testdata/sessions/liquidity/04_loop-setparams-feepercent-conflict.json index 38fed2a7..6ee6d141 100644 --- a/cmd/loop/testdata/sessions/liquidity/04_loop-setparams-feepercent-conflict.json +++ b/cmd/loop/testdata/sessions/liquidity/04_loop-setparams-feepercent-conflict.json @@ -72,7 +72,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, diff --git a/cmd/loop/testdata/sessions/liquidity/05_loop-setrule-missing-threshold.json b/cmd/loop/testdata/sessions/liquidity/05_loop-setrule-missing-threshold.json index 813ddec3..5ef241f4 100644 --- a/cmd/loop/testdata/sessions/liquidity/05_loop-setrule-missing-threshold.json +++ b/cmd/loop/testdata/sessions/liquidity/05_loop-setrule-missing-threshold.json @@ -69,7 +69,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, diff --git a/cmd/loop/testdata/sessions/liquidity/08_loop-setrule-success.json b/cmd/loop/testdata/sessions/liquidity/08_loop-setrule-success.json index 08331612..b3c23045 100644 --- a/cmd/loop/testdata/sessions/liquidity/08_loop-setrule-success.json +++ b/cmd/loop/testdata/sessions/liquidity/08_loop-setrule-success.json @@ -70,7 +70,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -118,7 +119,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/10_loop-setrule-incoming.json b/cmd/loop/testdata/sessions/liquidity/10_loop-setrule-incoming.json index 340fd514..0f43a27a 100644 --- a/cmd/loop/testdata/sessions/liquidity/10_loop-setrule-incoming.json +++ b/cmd/loop/testdata/sessions/liquidity/10_loop-setrule-incoming.json @@ -70,7 +70,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -126,7 +127,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/11_loop-setrule-outgoing-type-in.json b/cmd/loop/testdata/sessions/liquidity/11_loop-setrule-outgoing-type-in.json index 6328a16d..9b546a60 100644 --- a/cmd/loop/testdata/sessions/liquidity/11_loop-setrule-outgoing-type-in.json +++ b/cmd/loop/testdata/sessions/liquidity/11_loop-setrule-outgoing-type-in.json @@ -81,7 +81,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -145,7 +146,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/12_loop-setrule-clear.json b/cmd/loop/testdata/sessions/liquidity/12_loop-setrule-clear.json index 3114845c..40348d2b 100644 --- a/cmd/loop/testdata/sessions/liquidity/12_loop-setrule-clear.json +++ b/cmd/loop/testdata/sessions/liquidity/12_loop-setrule-clear.json @@ -77,7 +77,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -125,7 +126,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/13_loop-setparams-many-flags-error.json b/cmd/loop/testdata/sessions/liquidity/13_loop-setparams-many-flags-error.json index a6b7389e..6e4ce95e 100644 --- a/cmd/loop/testdata/sessions/liquidity/13_loop-setparams-many-flags-error.json +++ b/cmd/loop/testdata/sessions/liquidity/13_loop-setparams-many-flags-error.json @@ -101,7 +101,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -151,7 +152,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/14_loop-setparams-many-flags-error-minamt.json b/cmd/loop/testdata/sessions/liquidity/14_loop-setparams-many-flags-error-minamt.json index 3a3567a5..41569587 100644 --- a/cmd/loop/testdata/sessions/liquidity/14_loop-setparams-many-flags-error-minamt.json +++ b/cmd/loop/testdata/sessions/liquidity/14_loop-setparams-many-flags-error-minamt.json @@ -103,7 +103,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -153,7 +154,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/15_loop-setparams-many-flags.json b/cmd/loop/testdata/sessions/liquidity/15_loop-setparams-many-flags.json index 31141db2..6ab14823 100644 --- a/cmd/loop/testdata/sessions/liquidity/15_loop-setparams-many-flags.json +++ b/cmd/loop/testdata/sessions/liquidity/15_loop-setparams-many-flags.json @@ -102,7 +102,8 @@ "account_addr_type": "ADDRESS_TYPE_UNKNOWN", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -152,7 +153,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/16_loop-setparams-destaddr.json b/cmd/loop/testdata/sessions/liquidity/16_loop-setparams-destaddr.json index f99b78b1..2e9d5e20 100644 --- a/cmd/loop/testdata/sessions/liquidity/16_loop-setparams-destaddr.json +++ b/cmd/loop/testdata/sessions/liquidity/16_loop-setparams-destaddr.json @@ -71,7 +71,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -121,7 +122,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/17_loop-setparams-account.json b/cmd/loop/testdata/sessions/liquidity/17_loop-setparams-account.json index f91d0cea..14a1280f 100644 --- a/cmd/loop/testdata/sessions/liquidity/17_loop-setparams-account.json +++ b/cmd/loop/testdata/sessions/liquidity/17_loop-setparams-account.json @@ -73,7 +73,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -123,7 +124,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/18_loop-setparams-includeallpeers.json b/cmd/loop/testdata/sessions/liquidity/18_loop-setparams-includeallpeers.json index 911d68ef..3473eed7 100644 --- a/cmd/loop/testdata/sessions/liquidity/18_loop-setparams-includeallpeers.json +++ b/cmd/loop/testdata/sessions/liquidity/18_loop-setparams-includeallpeers.json @@ -70,7 +70,8 @@ "fast_swap_publication": true, "easy_autoloop_excluded_peers": [ "AnHW4pMBFZ2eHMXTmDR5pR87PAxoLtp/FqofR9/gmyL3" - ] + ], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -118,7 +119,8 @@ "account_addr_type": "TAPROOT_PUBKEY", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/cmd/loop/testdata/sessions/liquidity/19_loop-setrule-type-out.json b/cmd/loop/testdata/sessions/liquidity/19_loop-setrule-type-out.json index ea0a3782..25f83a2c 100644 --- a/cmd/loop/testdata/sessions/liquidity/19_loop-setrule-type-out.json +++ b/cmd/loop/testdata/sessions/liquidity/19_loop-setrule-type-out.json @@ -72,7 +72,8 @@ "account_addr_type": "TAPROOT_PUBKEY", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } }, @@ -128,7 +129,8 @@ "account_addr_type": "TAPROOT_PUBKEY", "easy_asset_params": {}, "fast_swap_publication": true, - "easy_autoloop_excluded_peers": [] + "easy_autoloop_excluded_peers": [], + "loop_in_source": "LOOP_IN_SOURCE_WALLET" } } } diff --git a/liquidity/liquidity_test.go b/liquidity/liquidity_test.go index 00f2cb58..3824ce9c 100644 --- a/liquidity/liquidity_test.go +++ b/liquidity/liquidity_test.go @@ -262,11 +262,12 @@ func TestPersistParams(t *testing.T) { FeePpm: 100, AutoMaxInFlight: 10, HtlcConfTarget: 2, + LoopInSource: clientrpc.LoopInSource_LOOP_IN_SOURCE_STATIC_ADDRESS, } cfg, _ := newTestConfig() manager := NewManager(cfg) - ctxb := context.Background() + ctx := t.Context() var paramsBytes []byte @@ -276,7 +277,7 @@ func TestPersistParams(t *testing.T) { } // Test the nil params is returned. - req, err := manager.loadParams(ctxb) + req, err := manager.loadParams(ctx) require.Nil(t, req) require.NoError(t, err) @@ -289,17 +290,18 @@ func TestPersistParams(t *testing.T) { } // Test save the message. - err = manager.saveParams(ctxb, rpcParams) + err = manager.saveParams(ctx, rpcParams) require.NoError(t, err) // Test the nil params is returned. - req, err = manager.loadParams(ctxb) + req, err = manager.loadParams(ctx) require.NoError(t, err) // Check the specified fields are set as expected. require.Equal(t, rpcParams.FeePpm, req.FeePpm) require.Equal(t, rpcParams.AutoMaxInFlight, req.AutoMaxInFlight) require.Equal(t, rpcParams.HtlcConfTarget, req.HtlcConfTarget) + require.Equal(t, rpcParams.LoopInSource, req.LoopInSource) // Check the unspecified fields are using empty values. require.False(t, req.Autoloop) @@ -308,8 +310,12 @@ func TestPersistParams(t *testing.T) { // Finally, check the loaded request can be used to set params without // error. - err = manager.SetParameters(context.Background(), req) + err = manager.SetParameters(ctx, req) require.NoError(t, err) + require.Equal( + t, LoopInSourceStaticAddress, + manager.GetParameters().LoopInSource, + ) } // TestRestrictedSuggestions tests getting of swap suggestions when we have diff --git a/liquidity/loopin_source.go b/liquidity/loopin_source.go new file mode 100644 index 00000000..14f698d6 --- /dev/null +++ b/liquidity/loopin_source.go @@ -0,0 +1,30 @@ +package liquidity + +import "fmt" + +// LoopInSource identifies the funding source that autoloop should use for loop +// in swaps. +type LoopInSource uint8 + +const ( + // LoopInSourceWallet uses the legacy wallet-funded loop-in flow. + LoopInSourceWallet LoopInSource = iota + + // LoopInSourceStaticAddress uses deposited static-address funds for + // loop-ins and does not fall back to wallet-funded loop-ins. + LoopInSourceStaticAddress +) + +// String returns a human-readable representation of the source. +func (s LoopInSource) String() string { + switch s { + case LoopInSourceWallet: + return "wallet" + + case LoopInSourceStaticAddress: + return "static-address" + + default: + return fmt.Sprintf("unknown(%d)", s) + } +} diff --git a/liquidity/parameters.go b/liquidity/parameters.go index 7032ff83..44c555db 100644 --- a/liquidity/parameters.go +++ b/liquidity/parameters.go @@ -32,6 +32,7 @@ var ( HtlcConfTarget: defaultHtlcConfTarget, FeeLimit: defaultFeePortion(), FastSwapPublication: true, + LoopInSource: LoopInSourceWallet, } ) @@ -128,6 +129,10 @@ type Parameters struct { // swaps. If set to true, the deadline is set to immediate publication. // If set to false, the deadline is set to 30 minutes. FastSwapPublication bool + + // LoopInSource controls which funding source autoloop uses for loop-in + // rules. + LoopInSource LoopInSource } // AssetParams define the asset specific autoloop parameters. @@ -160,11 +165,13 @@ func (p Parameters) String() string { return fmt.Sprintf("rules: %v, failure backoff: %v, sweep "+ "sweep conf target: %v, htlc conf target: %v,fees: %v, "+ "auto budget: %v, budget refresh: %v, max auto in flight: %v, "+ - "minimum swap size=%v, maximum swap size=%v", + "minimum swap size: %v, maximum swap size: %v, "+ + "loop in source: %v", strings.Join(ruleList, ","), p.FailureBackOff, p.SweepConfTarget, p.HtlcConfTarget, p.FeeLimit, p.AutoFeeBudget, p.AutoFeeRefreshPeriod, p.MaxAutoInFlight, - p.ClientRestrictions.Minimum, p.ClientRestrictions.Maximum) + p.ClientRestrictions.Minimum, p.ClientRestrictions.Maximum, + p.LoopInSource) } // haveRules returns a boolean indicating whether we have any rules configured. @@ -260,6 +267,13 @@ func (p Parameters) validate(minConfs int32, openChans []lndclient.ChannelInfo, return ErrZeroInFlight } + switch p.LoopInSource { + case LoopInSourceWallet, LoopInSourceStaticAddress: + + default: + return fmt.Errorf("unknown loop in source: %v", p.LoopInSource) + } + // Destination address and account cannot be set at the same time. if p.DestAddr != nil && len(p.DestAddr.String()) > 0 && len(p.Account) > 0 { @@ -409,6 +423,37 @@ func rpcToRule(rule *clientrpc.LiquidityRule) (*SwapRule, error) { } } +// rpcToLoopInSource converts the rpc loop-in source enum to the internal +// liquidity enum. +func rpcToLoopInSource(source clientrpc.LoopInSource) (LoopInSource, error) { + switch source { + case clientrpc.LoopInSource_LOOP_IN_SOURCE_WALLET: + return LoopInSourceWallet, nil + + case clientrpc.LoopInSource_LOOP_IN_SOURCE_STATIC_ADDRESS: + return LoopInSourceStaticAddress, nil + + default: + return 0, fmt.Errorf("unknown rpc loop in source: %v", source) + } +} + +// loopInSourceToRPC converts the internal loop-in source enum to its rpc +// representation. +func loopInSourceToRPC(source LoopInSource) (clientrpc.LoopInSource, error) { + switch source { + case LoopInSourceWallet: + return clientrpc.LoopInSource_LOOP_IN_SOURCE_WALLET, nil + + case LoopInSourceStaticAddress: + return clientrpc.LoopInSource_LOOP_IN_SOURCE_STATIC_ADDRESS, + nil + + default: + return 0, fmt.Errorf("unknown loop in source: %v", source) + } +} + // RpcToParameters takes a `LiquidityParameters` and creates a `Parameters` // from it. func RpcToParameters(req *clientrpc.LiquidityParameters) (*Parameters, @@ -446,6 +491,11 @@ func RpcToParameters(req *clientrpc.LiquidityParameters) (*Parameters, } } + loopInSource, err := rpcToLoopInSource(req.LoopInSource) + if err != nil { + return nil, err + } + params := &Parameters{ FeeLimit: feeLimit, SweepConfTarget: req.SweepConfTarget, @@ -477,6 +527,7 @@ func RpcToParameters(req *clientrpc.LiquidityParameters) (*Parameters, ), AssetAutoloopParams: easyAssetParams, FastSwapPublication: req.FastSwapPublication, + LoopInSource: loopInSource, } if req.AutoloopBudgetRefreshPeriodSec != 0 { @@ -592,6 +643,11 @@ func ParametersToRpc(cfg Parameters) (*clientrpc.LiquidityParameters, } } + loopInSource, err := loopInSourceToRPC(cfg.LoopInSource) + if err != nil { + return nil, err + } + rpcCfg := &clientrpc.LiquidityParameters{ SweepConfTarget: cfg.SweepConfTarget, FailureBackoffSec: uint64(cfg.FailureBackOff.Seconds()), @@ -621,6 +677,7 @@ func ParametersToRpc(cfg Parameters) (*clientrpc.LiquidityParameters, AccountAddrType: addrType, EasyAssetParams: easyAssetMap, FastSwapPublication: cfg.FastSwapPublication, + LoopInSource: loopInSource, } // Set excluded peers for easy autoloop. rpcCfg.EasyAutoloopExcludedPeers = make( diff --git a/looprpc/client.pb.go b/looprpc/client.pb.go index 35ae71c8..87bf5bb1 100644 --- a/looprpc/client.pb.go +++ b/looprpc/client.pb.go @@ -288,6 +288,54 @@ func (FailureReason) EnumDescriptor() ([]byte, []int) { return file_client_proto_rawDescGZIP(), []int{3} } +type LoopInSource int32 + +const ( + // Use the legacy wallet-funded loop-in flow. + LoopInSource_LOOP_IN_SOURCE_WALLET LoopInSource = 0 + // Use deposited static-address funds for loop-in autoloops. + LoopInSource_LOOP_IN_SOURCE_STATIC_ADDRESS LoopInSource = 1 +) + +// Enum value maps for LoopInSource. +var ( + LoopInSource_name = map[int32]string{ + 0: "LOOP_IN_SOURCE_WALLET", + 1: "LOOP_IN_SOURCE_STATIC_ADDRESS", + } + LoopInSource_value = map[string]int32{ + "LOOP_IN_SOURCE_WALLET": 0, + "LOOP_IN_SOURCE_STATIC_ADDRESS": 1, + } +) + +func (x LoopInSource) Enum() *LoopInSource { + p := new(LoopInSource) + *p = x + return p +} + +func (x LoopInSource) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LoopInSource) Descriptor() protoreflect.EnumDescriptor { + return file_client_proto_enumTypes[4].Descriptor() +} + +func (LoopInSource) Type() protoreflect.EnumType { + return &file_client_proto_enumTypes[4] +} + +func (x LoopInSource) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LoopInSource.Descriptor instead. +func (LoopInSource) EnumDescriptor() ([]byte, []int) { + return file_client_proto_rawDescGZIP(), []int{4} +} + type LiquidityRuleType int32 const ( @@ -318,11 +366,11 @@ func (x LiquidityRuleType) String() string { } func (LiquidityRuleType) Descriptor() protoreflect.EnumDescriptor { - return file_client_proto_enumTypes[4].Descriptor() + return file_client_proto_enumTypes[5].Descriptor() } func (LiquidityRuleType) Type() protoreflect.EnumType { - return &file_client_proto_enumTypes[4] + return &file_client_proto_enumTypes[5] } func (x LiquidityRuleType) Number() protoreflect.EnumNumber { @@ -331,7 +379,7 @@ func (x LiquidityRuleType) Number() protoreflect.EnumNumber { // Deprecated: Use LiquidityRuleType.Descriptor instead. func (LiquidityRuleType) EnumDescriptor() ([]byte, []int) { - return file_client_proto_rawDescGZIP(), []int{4} + return file_client_proto_rawDescGZIP(), []int{5} } type AutoReason int32 @@ -425,11 +473,11 @@ func (x AutoReason) String() string { } func (AutoReason) Descriptor() protoreflect.EnumDescriptor { - return file_client_proto_enumTypes[5].Descriptor() + return file_client_proto_enumTypes[6].Descriptor() } func (AutoReason) Type() protoreflect.EnumType { - return &file_client_proto_enumTypes[5] + return &file_client_proto_enumTypes[6] } func (x AutoReason) Number() protoreflect.EnumNumber { @@ -438,7 +486,7 @@ func (x AutoReason) Number() protoreflect.EnumNumber { // Deprecated: Use AutoReason.Descriptor instead. func (AutoReason) EnumDescriptor() ([]byte, []int) { - return file_client_proto_rawDescGZIP(), []int{5} + return file_client_proto_rawDescGZIP(), []int{6} } type DepositState int32 @@ -530,11 +578,11 @@ func (x DepositState) String() string { } func (DepositState) Descriptor() protoreflect.EnumDescriptor { - return file_client_proto_enumTypes[6].Descriptor() + return file_client_proto_enumTypes[7].Descriptor() } func (DepositState) Type() protoreflect.EnumType { - return &file_client_proto_enumTypes[6] + return &file_client_proto_enumTypes[7] } func (x DepositState) Number() protoreflect.EnumNumber { @@ -543,7 +591,7 @@ func (x DepositState) Number() protoreflect.EnumNumber { // Deprecated: Use DepositState.Descriptor instead. func (DepositState) EnumDescriptor() ([]byte, []int) { - return file_client_proto_rawDescGZIP(), []int{6} + return file_client_proto_rawDescGZIP(), []int{7} } type StaticAddressLoopInSwapState int32 @@ -606,11 +654,11 @@ func (x StaticAddressLoopInSwapState) String() string { } func (StaticAddressLoopInSwapState) Descriptor() protoreflect.EnumDescriptor { - return file_client_proto_enumTypes[7].Descriptor() + return file_client_proto_enumTypes[8].Descriptor() } func (StaticAddressLoopInSwapState) Type() protoreflect.EnumType { - return &file_client_proto_enumTypes[7] + return &file_client_proto_enumTypes[8] } func (x StaticAddressLoopInSwapState) Number() protoreflect.EnumNumber { @@ -619,7 +667,7 @@ func (x StaticAddressLoopInSwapState) Number() protoreflect.EnumNumber { // Deprecated: Use StaticAddressLoopInSwapState.Descriptor instead. func (StaticAddressLoopInSwapState) EnumDescriptor() ([]byte, []int) { - return file_client_proto_rawDescGZIP(), []int{7} + return file_client_proto_rawDescGZIP(), []int{8} } type ListSwapsFilter_SwapTypeFilter int32 @@ -658,11 +706,11 @@ func (x ListSwapsFilter_SwapTypeFilter) String() string { } func (ListSwapsFilter_SwapTypeFilter) Descriptor() protoreflect.EnumDescriptor { - return file_client_proto_enumTypes[8].Descriptor() + return file_client_proto_enumTypes[9].Descriptor() } func (ListSwapsFilter_SwapTypeFilter) Type() protoreflect.EnumType { - return &file_client_proto_enumTypes[8] + return &file_client_proto_enumTypes[9] } func (x ListSwapsFilter_SwapTypeFilter) Number() protoreflect.EnumNumber { @@ -3455,8 +3503,10 @@ type LiquidityParameters struct { // autoloop run. If set, channels connected to these peers won't be // considered for easy autoloop swaps. EasyAutoloopExcludedPeers [][]byte `protobuf:"bytes,27,rep,name=easy_autoloop_excluded_peers,json=easyAutoloopExcludedPeers,proto3" json:"easy_autoloop_excluded_peers,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Selects which source autoloop uses for loop-in rules. + LoopInSource LoopInSource `protobuf:"varint,28,opt,name=loop_in_source,json=loopInSource,proto3,enum=looprpc.LoopInSource" json:"loop_in_source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LiquidityParameters) Reset() { @@ -3679,6 +3729,13 @@ func (x *LiquidityParameters) GetEasyAutoloopExcludedPeers() [][]byte { return nil } +func (x *LiquidityParameters) GetLoopInSource() LoopInSource { + if x != nil { + return x.LoopInSource + } + return LoopInSource_LOOP_IN_SOURCE_WALLET +} + type EasyAssetAutoloopParams struct { state protoimpl.MessageState `protogen:"open.v1"` // Set to true to enable easy autoloop for this asset. If set the client will @@ -6732,7 +6789,7 @@ const file_client_proto_rawDesc = "" + "\rloop_in_stats\x18\b \x01(\v2\x12.looprpc.LoopStatsR\vloopInStats\x12\x1f\n" + "\vcommit_hash\x18\t \x01(\tR\n" + "commitHash\"\x1b\n" + - "\x19GetLiquidityParamsRequest\"\xce\v\n" + + "\x19GetLiquidityParamsRequest\"\x8b\f\n" + "\x13LiquidityParameters\x12,\n" + "\x05rules\x18\x01 \x03(\v2\x16.looprpc.LiquidityRuleR\x05rules\x12\x17\n" + "\afee_ppm\x18\x10 \x01(\x04R\x06feePpm\x12=\n" + @@ -6761,7 +6818,8 @@ const file_client_proto_rawDesc = "" + "\x11account_addr_type\x18\x18 \x01(\x0e2\x14.looprpc.AddressTypeR\x0faccountAddrType\x12]\n" + "\x11easy_asset_params\x18\x19 \x03(\v21.looprpc.LiquidityParameters.EasyAssetParamsEntryR\x0feasyAssetParams\x122\n" + "\x15fast_swap_publication\x18\x1a \x01(\bR\x13fastSwapPublication\x12?\n" + - "\x1ceasy_autoloop_excluded_peers\x18\x1b \x03(\fR\x19easyAutoloopExcludedPeers\x1ad\n" + + "\x1ceasy_autoloop_excluded_peers\x18\x1b \x03(\fR\x19easyAutoloopExcludedPeers\x12;\n" + + "\x0eloop_in_source\x18\x1c \x01(\x0e2\x15.looprpc.LoopInSourceR\floopInSource\x1ad\n" + "\x14EasyAssetParamsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x126\n" + "\x05value\x18\x02 \x01(\v2 .looprpc.EasyAssetAutoloopParamsR\x05value:\x028\x01\"h\n" + @@ -6980,7 +7038,10 @@ const file_client_proto_rawDesc = "" + "\x1fFAILURE_REASON_INCORRECT_AMOUNT\x10\x06\x12\x1c\n" + "\x18FAILURE_REASON_ABANDONED\x10\a\x121\n" + "-FAILURE_REASON_INSUFFICIENT_CONFIRMED_BALANCE\x10\b\x12+\n" + - "'FAILURE_REASON_INCORRECT_HTLC_AMT_SWEPT\x10\t*/\n" + + "'FAILURE_REASON_INCORRECT_HTLC_AMT_SWEPT\x10\t*L\n" + + "\fLoopInSource\x12\x19\n" + + "\x15LOOP_IN_SOURCE_WALLET\x10\x00\x12!\n" + + "\x1dLOOP_IN_SOURCE_STATIC_ADDRESS\x10\x01*/\n" + "\x11LiquidityRuleType\x12\v\n" + "\aUNKNOWN\x10\x00\x12\r\n" + "\tTHRESHOLD\x10\x01*\xa6\x03\n" + @@ -7081,223 +7142,225 @@ func file_client_proto_rawDescGZIP() []byte { return file_client_proto_rawDescData } -var file_client_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_client_proto_enumTypes = make([]protoimpl.EnumInfo, 10) var file_client_proto_msgTypes = make([]protoimpl.MessageInfo, 80) var file_client_proto_goTypes = []any{ (AddressType)(0), // 0: looprpc.AddressType (SwapType)(0), // 1: looprpc.SwapType (SwapState)(0), // 2: looprpc.SwapState (FailureReason)(0), // 3: looprpc.FailureReason - (LiquidityRuleType)(0), // 4: looprpc.LiquidityRuleType - (AutoReason)(0), // 5: looprpc.AutoReason - (DepositState)(0), // 6: looprpc.DepositState - (StaticAddressLoopInSwapState)(0), // 7: looprpc.StaticAddressLoopInSwapState - (ListSwapsFilter_SwapTypeFilter)(0), // 8: looprpc.ListSwapsFilter.SwapTypeFilter - (*StaticOpenChannelRequest)(nil), // 9: looprpc.StaticOpenChannelRequest - (*StaticOpenChannelResponse)(nil), // 10: looprpc.StaticOpenChannelResponse - (*StopDaemonRequest)(nil), // 11: looprpc.StopDaemonRequest - (*StopDaemonResponse)(nil), // 12: looprpc.StopDaemonResponse - (*LoopOutRequest)(nil), // 13: looprpc.LoopOutRequest - (*LoopInRequest)(nil), // 14: looprpc.LoopInRequest - (*SwapResponse)(nil), // 15: looprpc.SwapResponse - (*MonitorRequest)(nil), // 16: looprpc.MonitorRequest - (*SwapStatus)(nil), // 17: looprpc.SwapStatus - (*ListSwapsRequest)(nil), // 18: looprpc.ListSwapsRequest - (*ListSwapsFilter)(nil), // 19: looprpc.ListSwapsFilter - (*ListSwapsResponse)(nil), // 20: looprpc.ListSwapsResponse - (*SweepHtlcRequest)(nil), // 21: looprpc.SweepHtlcRequest - (*SweepHtlcResponse)(nil), // 22: looprpc.SweepHtlcResponse - (*PublishNotRequested)(nil), // 23: looprpc.PublishNotRequested - (*PublishSucceeded)(nil), // 24: looprpc.PublishSucceeded - (*PublishFailed)(nil), // 25: looprpc.PublishFailed - (*SwapInfoRequest)(nil), // 26: looprpc.SwapInfoRequest - (*TermsRequest)(nil), // 27: looprpc.TermsRequest - (*InTermsResponse)(nil), // 28: looprpc.InTermsResponse - (*OutTermsResponse)(nil), // 29: looprpc.OutTermsResponse - (*QuoteRequest)(nil), // 30: looprpc.QuoteRequest - (*InQuoteResponse)(nil), // 31: looprpc.InQuoteResponse - (*OutQuoteResponse)(nil), // 32: looprpc.OutQuoteResponse - (*ProbeRequest)(nil), // 33: looprpc.ProbeRequest - (*ProbeResponse)(nil), // 34: looprpc.ProbeResponse - (*TokensRequest)(nil), // 35: looprpc.TokensRequest - (*TokensResponse)(nil), // 36: looprpc.TokensResponse - (*FetchL402TokenRequest)(nil), // 37: looprpc.FetchL402TokenRequest - (*FetchL402TokenResponse)(nil), // 38: looprpc.FetchL402TokenResponse - (*L402Token)(nil), // 39: looprpc.L402Token - (*LoopStats)(nil), // 40: looprpc.LoopStats - (*GetInfoRequest)(nil), // 41: looprpc.GetInfoRequest - (*GetInfoResponse)(nil), // 42: looprpc.GetInfoResponse - (*GetLiquidityParamsRequest)(nil), // 43: looprpc.GetLiquidityParamsRequest - (*LiquidityParameters)(nil), // 44: looprpc.LiquidityParameters - (*EasyAssetAutoloopParams)(nil), // 45: looprpc.EasyAssetAutoloopParams - (*LiquidityRule)(nil), // 46: looprpc.LiquidityRule - (*SetLiquidityParamsRequest)(nil), // 47: looprpc.SetLiquidityParamsRequest - (*SetLiquidityParamsResponse)(nil), // 48: looprpc.SetLiquidityParamsResponse - (*SuggestSwapsRequest)(nil), // 49: looprpc.SuggestSwapsRequest - (*Disqualified)(nil), // 50: looprpc.Disqualified - (*SuggestSwapsResponse)(nil), // 51: looprpc.SuggestSwapsResponse - (*AbandonSwapRequest)(nil), // 52: looprpc.AbandonSwapRequest - (*AbandonSwapResponse)(nil), // 53: looprpc.AbandonSwapResponse - (*ListReservationsRequest)(nil), // 54: looprpc.ListReservationsRequest - (*ListReservationsResponse)(nil), // 55: looprpc.ListReservationsResponse - (*ClientReservation)(nil), // 56: looprpc.ClientReservation - (*InstantOutRequest)(nil), // 57: looprpc.InstantOutRequest - (*InstantOutResponse)(nil), // 58: looprpc.InstantOutResponse - (*InstantOutQuoteRequest)(nil), // 59: looprpc.InstantOutQuoteRequest - (*InstantOutQuoteResponse)(nil), // 60: looprpc.InstantOutQuoteResponse - (*ListInstantOutsRequest)(nil), // 61: looprpc.ListInstantOutsRequest - (*ListInstantOutsResponse)(nil), // 62: looprpc.ListInstantOutsResponse - (*InstantOut)(nil), // 63: looprpc.InstantOut - (*NewStaticAddressRequest)(nil), // 64: looprpc.NewStaticAddressRequest - (*NewStaticAddressResponse)(nil), // 65: looprpc.NewStaticAddressResponse - (*ListUnspentDepositsRequest)(nil), // 66: looprpc.ListUnspentDepositsRequest - (*ListUnspentDepositsResponse)(nil), // 67: looprpc.ListUnspentDepositsResponse - (*Utxo)(nil), // 68: looprpc.Utxo - (*WithdrawDepositsRequest)(nil), // 69: looprpc.WithdrawDepositsRequest - (*WithdrawDepositsResponse)(nil), // 70: looprpc.WithdrawDepositsResponse - (*ListStaticAddressDepositsRequest)(nil), // 71: looprpc.ListStaticAddressDepositsRequest - (*ListStaticAddressDepositsResponse)(nil), // 72: looprpc.ListStaticAddressDepositsResponse - (*ListStaticAddressWithdrawalRequest)(nil), // 73: looprpc.ListStaticAddressWithdrawalRequest - (*ListStaticAddressWithdrawalResponse)(nil), // 74: looprpc.ListStaticAddressWithdrawalResponse - (*ListStaticAddressSwapsRequest)(nil), // 75: looprpc.ListStaticAddressSwapsRequest - (*ListStaticAddressSwapsResponse)(nil), // 76: looprpc.ListStaticAddressSwapsResponse - (*StaticAddressSummaryRequest)(nil), // 77: looprpc.StaticAddressSummaryRequest - (*StaticAddressSummaryResponse)(nil), // 78: looprpc.StaticAddressSummaryResponse - (*Deposit)(nil), // 79: looprpc.Deposit - (*StaticAddressWithdrawal)(nil), // 80: looprpc.StaticAddressWithdrawal - (*StaticAddressLoopInSwap)(nil), // 81: looprpc.StaticAddressLoopInSwap - (*StaticAddressLoopInRequest)(nil), // 82: looprpc.StaticAddressLoopInRequest - (*StaticAddressLoopInResponse)(nil), // 83: looprpc.StaticAddressLoopInResponse - (*AssetLoopOutRequest)(nil), // 84: looprpc.AssetLoopOutRequest - (*AssetRfqInfo)(nil), // 85: looprpc.AssetRfqInfo - (*FixedPoint)(nil), // 86: looprpc.FixedPoint - (*AssetLoopOutInfo)(nil), // 87: looprpc.AssetLoopOutInfo - nil, // 88: looprpc.LiquidityParameters.EasyAssetParamsEntry - (*lnrpc.OpenChannelRequest)(nil), // 89: lnrpc.OpenChannelRequest - (*swapserverrpc.RouteHint)(nil), // 90: looprpc.RouteHint - (*lnrpc.OutPoint)(nil), // 91: lnrpc.OutPoint + (LoopInSource)(0), // 4: looprpc.LoopInSource + (LiquidityRuleType)(0), // 5: looprpc.LiquidityRuleType + (AutoReason)(0), // 6: looprpc.AutoReason + (DepositState)(0), // 7: looprpc.DepositState + (StaticAddressLoopInSwapState)(0), // 8: looprpc.StaticAddressLoopInSwapState + (ListSwapsFilter_SwapTypeFilter)(0), // 9: looprpc.ListSwapsFilter.SwapTypeFilter + (*StaticOpenChannelRequest)(nil), // 10: looprpc.StaticOpenChannelRequest + (*StaticOpenChannelResponse)(nil), // 11: looprpc.StaticOpenChannelResponse + (*StopDaemonRequest)(nil), // 12: looprpc.StopDaemonRequest + (*StopDaemonResponse)(nil), // 13: looprpc.StopDaemonResponse + (*LoopOutRequest)(nil), // 14: looprpc.LoopOutRequest + (*LoopInRequest)(nil), // 15: looprpc.LoopInRequest + (*SwapResponse)(nil), // 16: looprpc.SwapResponse + (*MonitorRequest)(nil), // 17: looprpc.MonitorRequest + (*SwapStatus)(nil), // 18: looprpc.SwapStatus + (*ListSwapsRequest)(nil), // 19: looprpc.ListSwapsRequest + (*ListSwapsFilter)(nil), // 20: looprpc.ListSwapsFilter + (*ListSwapsResponse)(nil), // 21: looprpc.ListSwapsResponse + (*SweepHtlcRequest)(nil), // 22: looprpc.SweepHtlcRequest + (*SweepHtlcResponse)(nil), // 23: looprpc.SweepHtlcResponse + (*PublishNotRequested)(nil), // 24: looprpc.PublishNotRequested + (*PublishSucceeded)(nil), // 25: looprpc.PublishSucceeded + (*PublishFailed)(nil), // 26: looprpc.PublishFailed + (*SwapInfoRequest)(nil), // 27: looprpc.SwapInfoRequest + (*TermsRequest)(nil), // 28: looprpc.TermsRequest + (*InTermsResponse)(nil), // 29: looprpc.InTermsResponse + (*OutTermsResponse)(nil), // 30: looprpc.OutTermsResponse + (*QuoteRequest)(nil), // 31: looprpc.QuoteRequest + (*InQuoteResponse)(nil), // 32: looprpc.InQuoteResponse + (*OutQuoteResponse)(nil), // 33: looprpc.OutQuoteResponse + (*ProbeRequest)(nil), // 34: looprpc.ProbeRequest + (*ProbeResponse)(nil), // 35: looprpc.ProbeResponse + (*TokensRequest)(nil), // 36: looprpc.TokensRequest + (*TokensResponse)(nil), // 37: looprpc.TokensResponse + (*FetchL402TokenRequest)(nil), // 38: looprpc.FetchL402TokenRequest + (*FetchL402TokenResponse)(nil), // 39: looprpc.FetchL402TokenResponse + (*L402Token)(nil), // 40: looprpc.L402Token + (*LoopStats)(nil), // 41: looprpc.LoopStats + (*GetInfoRequest)(nil), // 42: looprpc.GetInfoRequest + (*GetInfoResponse)(nil), // 43: looprpc.GetInfoResponse + (*GetLiquidityParamsRequest)(nil), // 44: looprpc.GetLiquidityParamsRequest + (*LiquidityParameters)(nil), // 45: looprpc.LiquidityParameters + (*EasyAssetAutoloopParams)(nil), // 46: looprpc.EasyAssetAutoloopParams + (*LiquidityRule)(nil), // 47: looprpc.LiquidityRule + (*SetLiquidityParamsRequest)(nil), // 48: looprpc.SetLiquidityParamsRequest + (*SetLiquidityParamsResponse)(nil), // 49: looprpc.SetLiquidityParamsResponse + (*SuggestSwapsRequest)(nil), // 50: looprpc.SuggestSwapsRequest + (*Disqualified)(nil), // 51: looprpc.Disqualified + (*SuggestSwapsResponse)(nil), // 52: looprpc.SuggestSwapsResponse + (*AbandonSwapRequest)(nil), // 53: looprpc.AbandonSwapRequest + (*AbandonSwapResponse)(nil), // 54: looprpc.AbandonSwapResponse + (*ListReservationsRequest)(nil), // 55: looprpc.ListReservationsRequest + (*ListReservationsResponse)(nil), // 56: looprpc.ListReservationsResponse + (*ClientReservation)(nil), // 57: looprpc.ClientReservation + (*InstantOutRequest)(nil), // 58: looprpc.InstantOutRequest + (*InstantOutResponse)(nil), // 59: looprpc.InstantOutResponse + (*InstantOutQuoteRequest)(nil), // 60: looprpc.InstantOutQuoteRequest + (*InstantOutQuoteResponse)(nil), // 61: looprpc.InstantOutQuoteResponse + (*ListInstantOutsRequest)(nil), // 62: looprpc.ListInstantOutsRequest + (*ListInstantOutsResponse)(nil), // 63: looprpc.ListInstantOutsResponse + (*InstantOut)(nil), // 64: looprpc.InstantOut + (*NewStaticAddressRequest)(nil), // 65: looprpc.NewStaticAddressRequest + (*NewStaticAddressResponse)(nil), // 66: looprpc.NewStaticAddressResponse + (*ListUnspentDepositsRequest)(nil), // 67: looprpc.ListUnspentDepositsRequest + (*ListUnspentDepositsResponse)(nil), // 68: looprpc.ListUnspentDepositsResponse + (*Utxo)(nil), // 69: looprpc.Utxo + (*WithdrawDepositsRequest)(nil), // 70: looprpc.WithdrawDepositsRequest + (*WithdrawDepositsResponse)(nil), // 71: looprpc.WithdrawDepositsResponse + (*ListStaticAddressDepositsRequest)(nil), // 72: looprpc.ListStaticAddressDepositsRequest + (*ListStaticAddressDepositsResponse)(nil), // 73: looprpc.ListStaticAddressDepositsResponse + (*ListStaticAddressWithdrawalRequest)(nil), // 74: looprpc.ListStaticAddressWithdrawalRequest + (*ListStaticAddressWithdrawalResponse)(nil), // 75: looprpc.ListStaticAddressWithdrawalResponse + (*ListStaticAddressSwapsRequest)(nil), // 76: looprpc.ListStaticAddressSwapsRequest + (*ListStaticAddressSwapsResponse)(nil), // 77: looprpc.ListStaticAddressSwapsResponse + (*StaticAddressSummaryRequest)(nil), // 78: looprpc.StaticAddressSummaryRequest + (*StaticAddressSummaryResponse)(nil), // 79: looprpc.StaticAddressSummaryResponse + (*Deposit)(nil), // 80: looprpc.Deposit + (*StaticAddressWithdrawal)(nil), // 81: looprpc.StaticAddressWithdrawal + (*StaticAddressLoopInSwap)(nil), // 82: looprpc.StaticAddressLoopInSwap + (*StaticAddressLoopInRequest)(nil), // 83: looprpc.StaticAddressLoopInRequest + (*StaticAddressLoopInResponse)(nil), // 84: looprpc.StaticAddressLoopInResponse + (*AssetLoopOutRequest)(nil), // 85: looprpc.AssetLoopOutRequest + (*AssetRfqInfo)(nil), // 86: looprpc.AssetRfqInfo + (*FixedPoint)(nil), // 87: looprpc.FixedPoint + (*AssetLoopOutInfo)(nil), // 88: looprpc.AssetLoopOutInfo + nil, // 89: looprpc.LiquidityParameters.EasyAssetParamsEntry + (*lnrpc.OpenChannelRequest)(nil), // 90: lnrpc.OpenChannelRequest + (*swapserverrpc.RouteHint)(nil), // 91: looprpc.RouteHint + (*lnrpc.OutPoint)(nil), // 92: lnrpc.OutPoint } var file_client_proto_depIdxs = []int32{ - 89, // 0: looprpc.StaticOpenChannelRequest.open_channel_request:type_name -> lnrpc.OpenChannelRequest + 90, // 0: looprpc.StaticOpenChannelRequest.open_channel_request:type_name -> lnrpc.OpenChannelRequest 0, // 1: looprpc.LoopOutRequest.account_addr_type:type_name -> looprpc.AddressType - 84, // 2: looprpc.LoopOutRequest.asset_info:type_name -> looprpc.AssetLoopOutRequest - 85, // 3: looprpc.LoopOutRequest.asset_rfq_info:type_name -> looprpc.AssetRfqInfo - 90, // 4: looprpc.LoopInRequest.route_hints:type_name -> looprpc.RouteHint + 85, // 2: looprpc.LoopOutRequest.asset_info:type_name -> looprpc.AssetLoopOutRequest + 86, // 3: looprpc.LoopOutRequest.asset_rfq_info:type_name -> looprpc.AssetRfqInfo + 91, // 4: looprpc.LoopInRequest.route_hints:type_name -> looprpc.RouteHint 1, // 5: looprpc.SwapStatus.type:type_name -> looprpc.SwapType 2, // 6: looprpc.SwapStatus.state:type_name -> looprpc.SwapState 3, // 7: looprpc.SwapStatus.failure_reason:type_name -> looprpc.FailureReason - 87, // 8: looprpc.SwapStatus.asset_info:type_name -> looprpc.AssetLoopOutInfo - 19, // 9: looprpc.ListSwapsRequest.list_swap_filter:type_name -> looprpc.ListSwapsFilter - 8, // 10: looprpc.ListSwapsFilter.swap_type:type_name -> looprpc.ListSwapsFilter.SwapTypeFilter - 17, // 11: looprpc.ListSwapsResponse.swaps:type_name -> looprpc.SwapStatus - 23, // 12: looprpc.SweepHtlcResponse.not_requested:type_name -> looprpc.PublishNotRequested - 24, // 13: looprpc.SweepHtlcResponse.published:type_name -> looprpc.PublishSucceeded - 25, // 14: looprpc.SweepHtlcResponse.failed:type_name -> looprpc.PublishFailed - 90, // 15: looprpc.QuoteRequest.loop_in_route_hints:type_name -> looprpc.RouteHint - 84, // 16: looprpc.QuoteRequest.asset_info:type_name -> looprpc.AssetLoopOutRequest - 85, // 17: looprpc.OutQuoteResponse.asset_rfq_info:type_name -> looprpc.AssetRfqInfo - 90, // 18: looprpc.ProbeRequest.route_hints:type_name -> looprpc.RouteHint - 39, // 19: looprpc.TokensResponse.tokens:type_name -> looprpc.L402Token - 40, // 20: looprpc.GetInfoResponse.loop_out_stats:type_name -> looprpc.LoopStats - 40, // 21: looprpc.GetInfoResponse.loop_in_stats:type_name -> looprpc.LoopStats - 46, // 22: looprpc.LiquidityParameters.rules:type_name -> looprpc.LiquidityRule + 88, // 8: looprpc.SwapStatus.asset_info:type_name -> looprpc.AssetLoopOutInfo + 20, // 9: looprpc.ListSwapsRequest.list_swap_filter:type_name -> looprpc.ListSwapsFilter + 9, // 10: looprpc.ListSwapsFilter.swap_type:type_name -> looprpc.ListSwapsFilter.SwapTypeFilter + 18, // 11: looprpc.ListSwapsResponse.swaps:type_name -> looprpc.SwapStatus + 24, // 12: looprpc.SweepHtlcResponse.not_requested:type_name -> looprpc.PublishNotRequested + 25, // 13: looprpc.SweepHtlcResponse.published:type_name -> looprpc.PublishSucceeded + 26, // 14: looprpc.SweepHtlcResponse.failed:type_name -> looprpc.PublishFailed + 91, // 15: looprpc.QuoteRequest.loop_in_route_hints:type_name -> looprpc.RouteHint + 85, // 16: looprpc.QuoteRequest.asset_info:type_name -> looprpc.AssetLoopOutRequest + 86, // 17: looprpc.OutQuoteResponse.asset_rfq_info:type_name -> looprpc.AssetRfqInfo + 91, // 18: looprpc.ProbeRequest.route_hints:type_name -> looprpc.RouteHint + 40, // 19: looprpc.TokensResponse.tokens:type_name -> looprpc.L402Token + 41, // 20: looprpc.GetInfoResponse.loop_out_stats:type_name -> looprpc.LoopStats + 41, // 21: looprpc.GetInfoResponse.loop_in_stats:type_name -> looprpc.LoopStats + 47, // 22: looprpc.LiquidityParameters.rules:type_name -> looprpc.LiquidityRule 0, // 23: looprpc.LiquidityParameters.account_addr_type:type_name -> looprpc.AddressType - 88, // 24: looprpc.LiquidityParameters.easy_asset_params:type_name -> looprpc.LiquidityParameters.EasyAssetParamsEntry - 1, // 25: looprpc.LiquidityRule.swap_type:type_name -> looprpc.SwapType - 4, // 26: looprpc.LiquidityRule.type:type_name -> looprpc.LiquidityRuleType - 44, // 27: looprpc.SetLiquidityParamsRequest.parameters:type_name -> looprpc.LiquidityParameters - 5, // 28: looprpc.Disqualified.reason:type_name -> looprpc.AutoReason - 13, // 29: looprpc.SuggestSwapsResponse.loop_out:type_name -> looprpc.LoopOutRequest - 14, // 30: looprpc.SuggestSwapsResponse.loop_in:type_name -> looprpc.LoopInRequest - 50, // 31: looprpc.SuggestSwapsResponse.disqualified:type_name -> looprpc.Disqualified - 56, // 32: looprpc.ListReservationsResponse.reservations:type_name -> looprpc.ClientReservation - 63, // 33: looprpc.ListInstantOutsResponse.swaps:type_name -> looprpc.InstantOut - 68, // 34: looprpc.ListUnspentDepositsResponse.utxos:type_name -> looprpc.Utxo - 91, // 35: looprpc.WithdrawDepositsRequest.outpoints:type_name -> lnrpc.OutPoint - 6, // 36: looprpc.ListStaticAddressDepositsRequest.state_filter:type_name -> looprpc.DepositState - 79, // 37: looprpc.ListStaticAddressDepositsResponse.filtered_deposits:type_name -> looprpc.Deposit - 80, // 38: looprpc.ListStaticAddressWithdrawalResponse.withdrawals:type_name -> looprpc.StaticAddressWithdrawal - 81, // 39: looprpc.ListStaticAddressSwapsResponse.swaps:type_name -> looprpc.StaticAddressLoopInSwap - 6, // 40: looprpc.Deposit.state:type_name -> looprpc.DepositState - 79, // 41: looprpc.StaticAddressWithdrawal.deposits:type_name -> looprpc.Deposit - 7, // 42: looprpc.StaticAddressLoopInSwap.state:type_name -> looprpc.StaticAddressLoopInSwapState - 79, // 43: looprpc.StaticAddressLoopInSwap.deposits:type_name -> looprpc.Deposit - 90, // 44: looprpc.StaticAddressLoopInRequest.route_hints:type_name -> looprpc.RouteHint - 79, // 45: looprpc.StaticAddressLoopInResponse.used_deposits:type_name -> looprpc.Deposit - 86, // 46: looprpc.AssetRfqInfo.prepay_asset_rate:type_name -> looprpc.FixedPoint - 86, // 47: looprpc.AssetRfqInfo.swap_asset_rate:type_name -> looprpc.FixedPoint - 45, // 48: looprpc.LiquidityParameters.EasyAssetParamsEntry.value:type_name -> looprpc.EasyAssetAutoloopParams - 13, // 49: looprpc.SwapClient.LoopOut:input_type -> looprpc.LoopOutRequest - 14, // 50: looprpc.SwapClient.LoopIn:input_type -> looprpc.LoopInRequest - 16, // 51: looprpc.SwapClient.Monitor:input_type -> looprpc.MonitorRequest - 18, // 52: looprpc.SwapClient.ListSwaps:input_type -> looprpc.ListSwapsRequest - 21, // 53: looprpc.SwapClient.SweepHtlc:input_type -> looprpc.SweepHtlcRequest - 26, // 54: looprpc.SwapClient.SwapInfo:input_type -> looprpc.SwapInfoRequest - 52, // 55: looprpc.SwapClient.AbandonSwap:input_type -> looprpc.AbandonSwapRequest - 27, // 56: looprpc.SwapClient.LoopOutTerms:input_type -> looprpc.TermsRequest - 30, // 57: looprpc.SwapClient.LoopOutQuote:input_type -> looprpc.QuoteRequest - 27, // 58: looprpc.SwapClient.GetLoopInTerms:input_type -> looprpc.TermsRequest - 30, // 59: looprpc.SwapClient.GetLoopInQuote:input_type -> looprpc.QuoteRequest - 33, // 60: looprpc.SwapClient.Probe:input_type -> looprpc.ProbeRequest - 35, // 61: looprpc.SwapClient.GetL402Tokens:input_type -> looprpc.TokensRequest - 35, // 62: looprpc.SwapClient.GetLsatTokens:input_type -> looprpc.TokensRequest - 37, // 63: looprpc.SwapClient.FetchL402Token:input_type -> looprpc.FetchL402TokenRequest - 41, // 64: looprpc.SwapClient.GetInfo:input_type -> looprpc.GetInfoRequest - 11, // 65: looprpc.SwapClient.StopDaemon:input_type -> looprpc.StopDaemonRequest - 43, // 66: looprpc.SwapClient.GetLiquidityParams:input_type -> looprpc.GetLiquidityParamsRequest - 47, // 67: looprpc.SwapClient.SetLiquidityParams:input_type -> looprpc.SetLiquidityParamsRequest - 49, // 68: looprpc.SwapClient.SuggestSwaps:input_type -> looprpc.SuggestSwapsRequest - 54, // 69: looprpc.SwapClient.ListReservations:input_type -> looprpc.ListReservationsRequest - 57, // 70: looprpc.SwapClient.InstantOut:input_type -> looprpc.InstantOutRequest - 59, // 71: looprpc.SwapClient.InstantOutQuote:input_type -> looprpc.InstantOutQuoteRequest - 61, // 72: looprpc.SwapClient.ListInstantOuts:input_type -> looprpc.ListInstantOutsRequest - 64, // 73: looprpc.SwapClient.NewStaticAddress:input_type -> looprpc.NewStaticAddressRequest - 66, // 74: looprpc.SwapClient.ListUnspentDeposits:input_type -> looprpc.ListUnspentDepositsRequest - 69, // 75: looprpc.SwapClient.WithdrawDeposits:input_type -> looprpc.WithdrawDepositsRequest - 71, // 76: looprpc.SwapClient.ListStaticAddressDeposits:input_type -> looprpc.ListStaticAddressDepositsRequest - 73, // 77: looprpc.SwapClient.ListStaticAddressWithdrawals:input_type -> looprpc.ListStaticAddressWithdrawalRequest - 75, // 78: looprpc.SwapClient.ListStaticAddressSwaps:input_type -> looprpc.ListStaticAddressSwapsRequest - 77, // 79: looprpc.SwapClient.GetStaticAddressSummary:input_type -> looprpc.StaticAddressSummaryRequest - 82, // 80: looprpc.SwapClient.StaticAddressLoopIn:input_type -> looprpc.StaticAddressLoopInRequest - 9, // 81: looprpc.SwapClient.StaticOpenChannel:input_type -> looprpc.StaticOpenChannelRequest - 15, // 82: looprpc.SwapClient.LoopOut:output_type -> looprpc.SwapResponse - 15, // 83: looprpc.SwapClient.LoopIn:output_type -> looprpc.SwapResponse - 17, // 84: looprpc.SwapClient.Monitor:output_type -> looprpc.SwapStatus - 20, // 85: looprpc.SwapClient.ListSwaps:output_type -> looprpc.ListSwapsResponse - 22, // 86: looprpc.SwapClient.SweepHtlc:output_type -> looprpc.SweepHtlcResponse - 17, // 87: looprpc.SwapClient.SwapInfo:output_type -> looprpc.SwapStatus - 53, // 88: looprpc.SwapClient.AbandonSwap:output_type -> looprpc.AbandonSwapResponse - 29, // 89: looprpc.SwapClient.LoopOutTerms:output_type -> looprpc.OutTermsResponse - 32, // 90: looprpc.SwapClient.LoopOutQuote:output_type -> looprpc.OutQuoteResponse - 28, // 91: looprpc.SwapClient.GetLoopInTerms:output_type -> looprpc.InTermsResponse - 31, // 92: looprpc.SwapClient.GetLoopInQuote:output_type -> looprpc.InQuoteResponse - 34, // 93: looprpc.SwapClient.Probe:output_type -> looprpc.ProbeResponse - 36, // 94: looprpc.SwapClient.GetL402Tokens:output_type -> looprpc.TokensResponse - 36, // 95: looprpc.SwapClient.GetLsatTokens:output_type -> looprpc.TokensResponse - 38, // 96: looprpc.SwapClient.FetchL402Token:output_type -> looprpc.FetchL402TokenResponse - 42, // 97: looprpc.SwapClient.GetInfo:output_type -> looprpc.GetInfoResponse - 12, // 98: looprpc.SwapClient.StopDaemon:output_type -> looprpc.StopDaemonResponse - 44, // 99: looprpc.SwapClient.GetLiquidityParams:output_type -> looprpc.LiquidityParameters - 48, // 100: looprpc.SwapClient.SetLiquidityParams:output_type -> looprpc.SetLiquidityParamsResponse - 51, // 101: looprpc.SwapClient.SuggestSwaps:output_type -> looprpc.SuggestSwapsResponse - 55, // 102: looprpc.SwapClient.ListReservations:output_type -> looprpc.ListReservationsResponse - 58, // 103: looprpc.SwapClient.InstantOut:output_type -> looprpc.InstantOutResponse - 60, // 104: looprpc.SwapClient.InstantOutQuote:output_type -> looprpc.InstantOutQuoteResponse - 62, // 105: looprpc.SwapClient.ListInstantOuts:output_type -> looprpc.ListInstantOutsResponse - 65, // 106: looprpc.SwapClient.NewStaticAddress:output_type -> looprpc.NewStaticAddressResponse - 67, // 107: looprpc.SwapClient.ListUnspentDeposits:output_type -> looprpc.ListUnspentDepositsResponse - 70, // 108: looprpc.SwapClient.WithdrawDeposits:output_type -> looprpc.WithdrawDepositsResponse - 72, // 109: looprpc.SwapClient.ListStaticAddressDeposits:output_type -> looprpc.ListStaticAddressDepositsResponse - 74, // 110: looprpc.SwapClient.ListStaticAddressWithdrawals:output_type -> looprpc.ListStaticAddressWithdrawalResponse - 76, // 111: looprpc.SwapClient.ListStaticAddressSwaps:output_type -> looprpc.ListStaticAddressSwapsResponse - 78, // 112: looprpc.SwapClient.GetStaticAddressSummary:output_type -> looprpc.StaticAddressSummaryResponse - 83, // 113: looprpc.SwapClient.StaticAddressLoopIn:output_type -> looprpc.StaticAddressLoopInResponse - 10, // 114: looprpc.SwapClient.StaticOpenChannel:output_type -> looprpc.StaticOpenChannelResponse - 82, // [82:115] is the sub-list for method output_type - 49, // [49:82] is the sub-list for method input_type - 49, // [49:49] is the sub-list for extension type_name - 49, // [49:49] is the sub-list for extension extendee - 0, // [0:49] is the sub-list for field type_name + 89, // 24: looprpc.LiquidityParameters.easy_asset_params:type_name -> looprpc.LiquidityParameters.EasyAssetParamsEntry + 4, // 25: looprpc.LiquidityParameters.loop_in_source:type_name -> looprpc.LoopInSource + 1, // 26: looprpc.LiquidityRule.swap_type:type_name -> looprpc.SwapType + 5, // 27: looprpc.LiquidityRule.type:type_name -> looprpc.LiquidityRuleType + 45, // 28: looprpc.SetLiquidityParamsRequest.parameters:type_name -> looprpc.LiquidityParameters + 6, // 29: looprpc.Disqualified.reason:type_name -> looprpc.AutoReason + 14, // 30: looprpc.SuggestSwapsResponse.loop_out:type_name -> looprpc.LoopOutRequest + 15, // 31: looprpc.SuggestSwapsResponse.loop_in:type_name -> looprpc.LoopInRequest + 51, // 32: looprpc.SuggestSwapsResponse.disqualified:type_name -> looprpc.Disqualified + 57, // 33: looprpc.ListReservationsResponse.reservations:type_name -> looprpc.ClientReservation + 64, // 34: looprpc.ListInstantOutsResponse.swaps:type_name -> looprpc.InstantOut + 69, // 35: looprpc.ListUnspentDepositsResponse.utxos:type_name -> looprpc.Utxo + 92, // 36: looprpc.WithdrawDepositsRequest.outpoints:type_name -> lnrpc.OutPoint + 7, // 37: looprpc.ListStaticAddressDepositsRequest.state_filter:type_name -> looprpc.DepositState + 80, // 38: looprpc.ListStaticAddressDepositsResponse.filtered_deposits:type_name -> looprpc.Deposit + 81, // 39: looprpc.ListStaticAddressWithdrawalResponse.withdrawals:type_name -> looprpc.StaticAddressWithdrawal + 82, // 40: looprpc.ListStaticAddressSwapsResponse.swaps:type_name -> looprpc.StaticAddressLoopInSwap + 7, // 41: looprpc.Deposit.state:type_name -> looprpc.DepositState + 80, // 42: looprpc.StaticAddressWithdrawal.deposits:type_name -> looprpc.Deposit + 8, // 43: looprpc.StaticAddressLoopInSwap.state:type_name -> looprpc.StaticAddressLoopInSwapState + 80, // 44: looprpc.StaticAddressLoopInSwap.deposits:type_name -> looprpc.Deposit + 91, // 45: looprpc.StaticAddressLoopInRequest.route_hints:type_name -> looprpc.RouteHint + 80, // 46: looprpc.StaticAddressLoopInResponse.used_deposits:type_name -> looprpc.Deposit + 87, // 47: looprpc.AssetRfqInfo.prepay_asset_rate:type_name -> looprpc.FixedPoint + 87, // 48: looprpc.AssetRfqInfo.swap_asset_rate:type_name -> looprpc.FixedPoint + 46, // 49: looprpc.LiquidityParameters.EasyAssetParamsEntry.value:type_name -> looprpc.EasyAssetAutoloopParams + 14, // 50: looprpc.SwapClient.LoopOut:input_type -> looprpc.LoopOutRequest + 15, // 51: looprpc.SwapClient.LoopIn:input_type -> looprpc.LoopInRequest + 17, // 52: looprpc.SwapClient.Monitor:input_type -> looprpc.MonitorRequest + 19, // 53: looprpc.SwapClient.ListSwaps:input_type -> looprpc.ListSwapsRequest + 22, // 54: looprpc.SwapClient.SweepHtlc:input_type -> looprpc.SweepHtlcRequest + 27, // 55: looprpc.SwapClient.SwapInfo:input_type -> looprpc.SwapInfoRequest + 53, // 56: looprpc.SwapClient.AbandonSwap:input_type -> looprpc.AbandonSwapRequest + 28, // 57: looprpc.SwapClient.LoopOutTerms:input_type -> looprpc.TermsRequest + 31, // 58: looprpc.SwapClient.LoopOutQuote:input_type -> looprpc.QuoteRequest + 28, // 59: looprpc.SwapClient.GetLoopInTerms:input_type -> looprpc.TermsRequest + 31, // 60: looprpc.SwapClient.GetLoopInQuote:input_type -> looprpc.QuoteRequest + 34, // 61: looprpc.SwapClient.Probe:input_type -> looprpc.ProbeRequest + 36, // 62: looprpc.SwapClient.GetL402Tokens:input_type -> looprpc.TokensRequest + 36, // 63: looprpc.SwapClient.GetLsatTokens:input_type -> looprpc.TokensRequest + 38, // 64: looprpc.SwapClient.FetchL402Token:input_type -> looprpc.FetchL402TokenRequest + 42, // 65: looprpc.SwapClient.GetInfo:input_type -> looprpc.GetInfoRequest + 12, // 66: looprpc.SwapClient.StopDaemon:input_type -> looprpc.StopDaemonRequest + 44, // 67: looprpc.SwapClient.GetLiquidityParams:input_type -> looprpc.GetLiquidityParamsRequest + 48, // 68: looprpc.SwapClient.SetLiquidityParams:input_type -> looprpc.SetLiquidityParamsRequest + 50, // 69: looprpc.SwapClient.SuggestSwaps:input_type -> looprpc.SuggestSwapsRequest + 55, // 70: looprpc.SwapClient.ListReservations:input_type -> looprpc.ListReservationsRequest + 58, // 71: looprpc.SwapClient.InstantOut:input_type -> looprpc.InstantOutRequest + 60, // 72: looprpc.SwapClient.InstantOutQuote:input_type -> looprpc.InstantOutQuoteRequest + 62, // 73: looprpc.SwapClient.ListInstantOuts:input_type -> looprpc.ListInstantOutsRequest + 65, // 74: looprpc.SwapClient.NewStaticAddress:input_type -> looprpc.NewStaticAddressRequest + 67, // 75: looprpc.SwapClient.ListUnspentDeposits:input_type -> looprpc.ListUnspentDepositsRequest + 70, // 76: looprpc.SwapClient.WithdrawDeposits:input_type -> looprpc.WithdrawDepositsRequest + 72, // 77: looprpc.SwapClient.ListStaticAddressDeposits:input_type -> looprpc.ListStaticAddressDepositsRequest + 74, // 78: looprpc.SwapClient.ListStaticAddressWithdrawals:input_type -> looprpc.ListStaticAddressWithdrawalRequest + 76, // 79: looprpc.SwapClient.ListStaticAddressSwaps:input_type -> looprpc.ListStaticAddressSwapsRequest + 78, // 80: looprpc.SwapClient.GetStaticAddressSummary:input_type -> looprpc.StaticAddressSummaryRequest + 83, // 81: looprpc.SwapClient.StaticAddressLoopIn:input_type -> looprpc.StaticAddressLoopInRequest + 10, // 82: looprpc.SwapClient.StaticOpenChannel:input_type -> looprpc.StaticOpenChannelRequest + 16, // 83: looprpc.SwapClient.LoopOut:output_type -> looprpc.SwapResponse + 16, // 84: looprpc.SwapClient.LoopIn:output_type -> looprpc.SwapResponse + 18, // 85: looprpc.SwapClient.Monitor:output_type -> looprpc.SwapStatus + 21, // 86: looprpc.SwapClient.ListSwaps:output_type -> looprpc.ListSwapsResponse + 23, // 87: looprpc.SwapClient.SweepHtlc:output_type -> looprpc.SweepHtlcResponse + 18, // 88: looprpc.SwapClient.SwapInfo:output_type -> looprpc.SwapStatus + 54, // 89: looprpc.SwapClient.AbandonSwap:output_type -> looprpc.AbandonSwapResponse + 30, // 90: looprpc.SwapClient.LoopOutTerms:output_type -> looprpc.OutTermsResponse + 33, // 91: looprpc.SwapClient.LoopOutQuote:output_type -> looprpc.OutQuoteResponse + 29, // 92: looprpc.SwapClient.GetLoopInTerms:output_type -> looprpc.InTermsResponse + 32, // 93: looprpc.SwapClient.GetLoopInQuote:output_type -> looprpc.InQuoteResponse + 35, // 94: looprpc.SwapClient.Probe:output_type -> looprpc.ProbeResponse + 37, // 95: looprpc.SwapClient.GetL402Tokens:output_type -> looprpc.TokensResponse + 37, // 96: looprpc.SwapClient.GetLsatTokens:output_type -> looprpc.TokensResponse + 39, // 97: looprpc.SwapClient.FetchL402Token:output_type -> looprpc.FetchL402TokenResponse + 43, // 98: looprpc.SwapClient.GetInfo:output_type -> looprpc.GetInfoResponse + 13, // 99: looprpc.SwapClient.StopDaemon:output_type -> looprpc.StopDaemonResponse + 45, // 100: looprpc.SwapClient.GetLiquidityParams:output_type -> looprpc.LiquidityParameters + 49, // 101: looprpc.SwapClient.SetLiquidityParams:output_type -> looprpc.SetLiquidityParamsResponse + 52, // 102: looprpc.SwapClient.SuggestSwaps:output_type -> looprpc.SuggestSwapsResponse + 56, // 103: looprpc.SwapClient.ListReservations:output_type -> looprpc.ListReservationsResponse + 59, // 104: looprpc.SwapClient.InstantOut:output_type -> looprpc.InstantOutResponse + 61, // 105: looprpc.SwapClient.InstantOutQuote:output_type -> looprpc.InstantOutQuoteResponse + 63, // 106: looprpc.SwapClient.ListInstantOuts:output_type -> looprpc.ListInstantOutsResponse + 66, // 107: looprpc.SwapClient.NewStaticAddress:output_type -> looprpc.NewStaticAddressResponse + 68, // 108: looprpc.SwapClient.ListUnspentDeposits:output_type -> looprpc.ListUnspentDepositsResponse + 71, // 109: looprpc.SwapClient.WithdrawDeposits:output_type -> looprpc.WithdrawDepositsResponse + 73, // 110: looprpc.SwapClient.ListStaticAddressDeposits:output_type -> looprpc.ListStaticAddressDepositsResponse + 75, // 111: looprpc.SwapClient.ListStaticAddressWithdrawals:output_type -> looprpc.ListStaticAddressWithdrawalResponse + 77, // 112: looprpc.SwapClient.ListStaticAddressSwaps:output_type -> looprpc.ListStaticAddressSwapsResponse + 79, // 113: looprpc.SwapClient.GetStaticAddressSummary:output_type -> looprpc.StaticAddressSummaryResponse + 84, // 114: looprpc.SwapClient.StaticAddressLoopIn:output_type -> looprpc.StaticAddressLoopInResponse + 11, // 115: looprpc.SwapClient.StaticOpenChannel:output_type -> looprpc.StaticOpenChannelResponse + 83, // [83:116] is the sub-list for method output_type + 50, // [50:83] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_client_proto_init() } @@ -7315,7 +7378,7 @@ func file_client_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_client_proto_rawDesc), len(file_client_proto_rawDesc)), - NumEnums: 9, + NumEnums: 10, NumMessages: 80, NumExtensions: 0, NumServices: 1, diff --git a/looprpc/client.proto b/looprpc/client.proto index cf14ffa0..b9b3f183 100644 --- a/looprpc/client.proto +++ b/looprpc/client.proto @@ -1192,6 +1192,18 @@ message GetInfoResponse { message GetLiquidityParamsRequest { } +enum LoopInSource { + /* + Use the legacy wallet-funded loop-in flow. + */ + LOOP_IN_SOURCE_WALLET = 0; + + /* + Use deposited static-address funds for loop-in autoloops. + */ + LOOP_IN_SOURCE_STATIC_ADDRESS = 1; +} + message LiquidityParameters { /* A set of liquidity rules that describe the desired liquidity balance. @@ -1370,6 +1382,11 @@ message LiquidityParameters { considered for easy autoloop swaps. */ repeated bytes easy_autoloop_excluded_peers = 27; + + /* + Selects which source autoloop uses for loop-in rules. + */ + LoopInSource loop_in_source = 28; } message EasyAssetAutoloopParams { diff --git a/looprpc/client.swagger.json b/looprpc/client.swagger.json index 3d75d15d..fcb865b8 100644 --- a/looprpc/client.swagger.json +++ b/looprpc/client.swagger.json @@ -2120,6 +2120,10 @@ "format": "byte" }, "description": "A list of peers (their public keys) that should be excluded from the easy\nautoloop run. If set, channels connected to these peers won't be\nconsidered for easy autoloop swaps." + }, + "loop_in_source": { + "$ref": "#/definitions/looprpcLoopInSource", + "description": "Selects which source autoloop uses for loop-in rules." } } }, @@ -2353,6 +2357,15 @@ } } }, + "looprpcLoopInSource": { + "type": "string", + "enum": [ + "LOOP_IN_SOURCE_WALLET", + "LOOP_IN_SOURCE_STATIC_ADDRESS" + ], + "default": "LOOP_IN_SOURCE_WALLET", + "description": " - LOOP_IN_SOURCE_WALLET: Use the legacy wallet-funded loop-in flow.\n - LOOP_IN_SOURCE_STATIC_ADDRESS: Use deposited static-address funds for loop-in autoloops." + }, "looprpcLoopOutRequest": { "type": "object", "properties": {