From ac583361046440b5e880b7c98fb59a9d3052487e Mon Sep 17 00:00:00 2001 From: Boris Nagaev Date: Fri, 10 Apr 2026 23:41:52 -0500 Subject: [PATCH] looprpc: add autoloop loop-in source Add a dedicated loop-in source enum to the liquidity parameters rpc and wire it through the internal parameter model and CLI. This keeps the source selection explicit before any static autoloop planning lands, so operators can choose between the legacy wallet-funded path and a future static-address-backed path without relying on implicit fallback behavior. --- cmd/loop/liquidity.go | 24 + .../sessions/liquidity/01_loop-getparams.json | 4 +- .../liquidity/02_loop-setparams-no-flags.json | 3 +- .../03_loop-setparams-feepercent.json | 6 +- ...04_loop-setparams-feepercent-conflict.json | 3 +- .../05_loop-setrule-missing-threshold.json | 3 +- .../liquidity/08_loop-setrule-success.json | 6 +- .../liquidity/10_loop-setrule-incoming.json | 6 +- .../11_loop-setrule-outgoing-type-in.json | 6 +- .../liquidity/12_loop-setrule-clear.json | 6 +- .../13_loop-setparams-many-flags-error.json | 6 +- ...oop-setparams-many-flags-error-minamt.json | 6 +- .../15_loop-setparams-many-flags.json | 6 +- .../liquidity/16_loop-setparams-destaddr.json | 6 +- .../liquidity/17_loop-setparams-account.json | 6 +- .../18_loop-setparams-includeallpeers.json | 6 +- .../liquidity/19_loop-setrule-type-out.json | 6 +- liquidity/liquidity_test.go | 16 +- liquidity/loopin_source.go | 30 + liquidity/parameters.go | 61 ++- looprpc/client.pb.go | 511 ++++++++++-------- looprpc/client.proto | 17 + looprpc/client.swagger.json | 13 + 23 files changed, 498 insertions(+), 259 deletions(-) create mode 100644 liquidity/loopin_source.go 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": {