From 1a1f0dc9495361835919881cfc104f82f5fd5e9a Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 18 May 2026 21:52:26 +0930 Subject: [PATCH 01/20] multiwithdraw: use unique ids on requests. Shades of `efacada7ddf` which did the same thing in multifundchannel: (ab)used the id, which being a string, gave and id of 34 ("). Also clean up the leftover assert in multifundchannel. Signed-off-by: Rusty Russell --- plugins/spender/multifundchannel.c | 3 --- plugins/spender/multiwithdraw.c | 6 ++++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/spender/multifundchannel.c b/plugins/spender/multifundchannel.c index c7223867c612..7c74bd137a47 100644 --- a/plugins/spender/multifundchannel.c +++ b/plugins/spender/multifundchannel.c @@ -1998,9 +1998,6 @@ json_multifundchannel(struct command *cmd, NULL)) return command_param_failed(); - /* Should exist; it would only nonexist if it were a notification. */ - assert(cmd->id); - mfc->id = ++mfc_id; mfc->cmd = cmd; diff --git a/plugins/spender/multiwithdraw.c b/plugins/spender/multiwithdraw.c index 7950d1d1c980..c647bf7c95a7 100644 --- a/plugins/spender/multiwithdraw.c +++ b/plugins/spender/multiwithdraw.c @@ -17,6 +17,9 @@ Command Access -----------------------------------------------------------------------------*/ +/* Global counter to create unique md->id values */ +static u64 mw_id; + static struct command_result * json_multiwithdraw(struct command *cmd, const char *buf, @@ -173,8 +176,7 @@ json_multiwithdraw(struct command *cmd, return command_param_failed(); mw->cmd = cmd; - assert(cmd->id); - mw->id = *cmd->id; + mw->id = mw_id++; mw->psbt = NULL; if (!mw->feerate) From 6722290d37d3c31435d7d344db593423827a2e09 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 19 May 2026 16:24:59 +0930 Subject: [PATCH 02/20] libplugins: JSON ids are always strings. We used to handle it being a literal, but this was removed in 73fc9b0c2a162c98703baf618abf944c791bb879 (v25.05) so we don't need to handle that at all. Not using the raw JSON means we handle weird methodnames by replacement: otherwise we would not match the responses. Only an issue for commando, where the command would time out rather than report "Unknown method". Signed-off-by: Rusty Russell --- plugins/askrene/askrene.c | 6 +-- plugins/askrene/child/child.c | 2 +- plugins/commando.c | 2 +- plugins/libplugin-pay.c | 5 +-- plugins/libplugin.c | 82 ++++++++++++++++++----------------- plugins/libplugin.h | 4 +- tests/test_askrene.py | 2 +- tests/test_misc.py | 30 ++++++++----- 8 files changed, 72 insertions(+), 61 deletions(-) diff --git a/plugins/askrene/askrene.c b/plugins/askrene/askrene.c index 70247c1ea189..b503000c46ed 100644 --- a/plugins/askrene/askrene.c +++ b/plugins/askrene/askrene.c @@ -317,7 +317,7 @@ static const char *cmd_log(const tal_t *ctx, if (level != LOG_DBG) plugin_log(cmd->plugin, level == LOG_BROKEN ? level : level - 1, - "%s: %s", cmd->id, msg); + "%s: %s", cmd->idstr, msg); return msg; } @@ -718,7 +718,7 @@ static struct command_result *do_getroutes(struct command *cmd, deadline, srcnode, dstnode, info->amount, info->maxfee, info->finalcltv, info->maxdelay, info->maxparts, include_fees, - cmd->id, cmd->filter, + cmd->idstr, cmd->filter, include_next_node_id, include_amount_msat, include_delay, @@ -989,7 +989,7 @@ static struct command_result *json_askrene_reserve(struct command *cmd, json_tok_full_len(params), json_tok_full(buffer, params)); for (size_t i = 0; i < tal_count(path); i++) - reserve_add(askrene->reserved, &path[i], cmd->id); + reserve_add(askrene->reserved, &path[i], cmd->idstr); response = jsonrpc_stream_success(cmd); return command_finished(cmd, response); diff --git a/plugins/askrene/child/child.c b/plugins/askrene/child/child.c index 72aecd68dfd8..7b9dcdc928a9 100644 --- a/plugins/askrene/child/child.c +++ b/plugins/askrene/child/child.c @@ -269,7 +269,7 @@ void run_child(const struct gossmap *gossmap, struct json_stream *js = new_json_stream(tmpctx, NULL, NULL); json_object_start(js, NULL); json_add_string(js, "jsonrpc", "2.0"); - json_add_id(js, cmd_id); + json_add_string(js, "id", cmd_id); json_object_start(js, "result"); if (cmd_filter) json_stream_attach_filter(js, cmd_filter); diff --git a/plugins/commando.c b/plugins/commando.c index a256f0b0f8ad..e7eb9b3a57d2 100644 --- a/plugins/commando.c +++ b/plugins/commando.c @@ -673,7 +673,7 @@ static struct command_result *json_commando(struct command *cmd, ocmd = new_commando(cmd, cmd, peer, oid); ocmd->contents = tal_arr(ocmd, u8, 0); - ocmd->json_id = tal_strdup(ocmd, cmd->id); + ocmd->json_id = tal_fmt(ocmd, "\"%s\"", cmd->idstr); tal_arr_expand(&outgoing_commands, ocmd); tal_add_destructor2(ocmd, destroy_commando, &outgoing_commands); diff --git a/plugins/libplugin-pay.c b/plugins/libplugin-pay.c index 9504950a7ec8..2527ec9cc0a9 100644 --- a/plugins/libplugin-pay.c +++ b/plugins/libplugin-pay.c @@ -181,10 +181,7 @@ struct payment *payment_root(struct payment *p) static const char *paymod_log_header(const tal_t *ctx, struct payment *p) { - const char *id = payment_cmd(p)->id; - if (strstarts(id, "\"")) - return tal_strndup(ctx, id+1, strlen(id+1)-1); - return tal_strdup(ctx, id); + return tal_strdup(ctx, payment_cmd(p)->idstr); } void diff --git a/plugins/libplugin.c b/plugins/libplugin.c index 2bc153f6e8f9..d720979cc027 100644 --- a/plugins/libplugin.c +++ b/plugins/libplugin.c @@ -1,5 +1,6 @@ #include "config.h" #include +#include #include #include #include @@ -175,7 +176,7 @@ static struct command *new_command(const tal_t *ctx, cmd->type = type; cmd->filter = NULL; cmd->methodname = tal_strdup(cmd, methodname); - cmd->id = tal_strdup(cmd, id); + cmd->idstr = tal_strdup(cmd, id); return cmd; } @@ -208,11 +209,11 @@ static void complain_deprecated(const char *feature, /* Mild log message for disallowing */ plugin_log(cmd->plugin, LOG_DBG, "Note: disallowing deprecated %s for %s", - feature, cmd->id); + feature, cmd->idstr); } else { plugin_log(cmd->plugin, LOG_BROKEN, "DEPRECATED API USED: %s by %s", - feature, cmd->id); + feature, cmd->idstr); } } @@ -342,27 +343,16 @@ struct command_result *plugin_broken_cb(struct command *cmd, static const char *json_id(const tal_t *ctx, struct plugin *plugin, const char *method, const char *prefix) { - const char *rawid; - int rawidlen; - - /* Strip quotes! */ - if (strstarts(prefix, "\"")) { - assert(strlen(prefix) >= 2); - assert(strends(prefix, "\"")); - rawid = prefix + 1; - rawidlen = strlen(prefix) - 2; - } else { - rawid = prefix; - rawidlen = strlen(prefix); - } - - return tal_fmt(ctx, "\"%.*s/%s:%s#%"PRIu64"\"", - rawidlen, rawid, plugin->id, method, plugin->next_outreq_id++); + /* Don't create weird IDs, they will get escaped and we won't match the reply. */ + if (json_escape_needed(method, strlen(method))) + method = "!weird!"; + return tal_fmt(ctx, "%s/%s:%s#%"PRIu64, + prefix, plugin->id, method, plugin->next_outreq_id++); } static void destroy_out_req(struct out_req *out_req, struct plugin *plugin) { - strmap_del(&plugin->out_reqs, out_req->id, NULL); + strmap_del(&plugin->out_reqs, out_req->idstr, NULL); } /* FIXME: Move lightningd/jsonrpc to common/ ? */ @@ -389,18 +379,18 @@ jsonrpc_request_start_(struct command *cmd, assert(cmd); out = tal(cmd, struct out_req); out->method = tal_strdup(out, method); - out->id = json_id(out, cmd->plugin, method, id_prefix ? id_prefix : cmd->id); + out->idstr = json_id(out, cmd->plugin, method, id_prefix ? id_prefix : cmd->idstr); out->cmd = cmd; out->cb = cb; out->errcb = errcb; out->arg = arg; - strmap_add(&cmd->plugin->out_reqs, out->id, out); + strmap_add(&cmd->plugin->out_reqs, out->idstr, out); tal_add_destructor2(out, destroy_out_req, cmd->plugin); out->js = new_json_stream(NULL, cmd, NULL); json_object_start(out->js, NULL); json_add_string(out->js, "jsonrpc", "2.0"); - json_add_id(out->js, out->id); + json_add_string(out->js, "id", out->idstr); json_add_string(out->js, "method", method); if (filter) { /* This is raw JSON, so paste, don't escape! */ @@ -432,7 +422,7 @@ static struct json_stream *jsonrpc_stream_start(struct command *cmd) json_object_start(js, NULL); json_add_string(js, "jsonrpc", "2.0"); - json_add_id(js, cmd->id); + json_add_string(js, "id", cmd->idstr); return js; } @@ -781,8 +771,7 @@ static const jsmntok_t *sync_req(const tal_t *ctx, json_out_start(jout, NULL, '{'); json_out_addstr(jout, "jsonrpc", "2.0"); - /* Copy in id *literally* */ - memcpy(json_out_member_direct(jout, "id", strlen(id)), id, strlen(id)); + json_out_addstr(jout, "id", id); json_out_addstr(jout, "method", method); if (params) json_out_add_splice(jout, "params", params); @@ -1051,9 +1040,16 @@ static void handle_rpc_reply(const tal_t *working_ctx, /* FIXME: Don't simply ignore notifications! */ return; + if (idtok->type != JSMN_STRING) { + plugin_log(plugin, LOG_BROKEN, "JSON reply with non-string id '%.*s'", + json_tok_full_len(toks), + json_tok_full(buf, toks)); + return; + } + out = strmap_getn(&plugin->out_reqs, - json_tok_full(buf, idtok), - json_tok_full_len(idtok)); + buf + idtok->start, + idtok->end - idtok->start); if (!out) { /* This can actually happen, if they free req! */ plugin_log(plugin, LOG_DBG, "JSON reply with unknown id '%.*s'", @@ -1119,7 +1115,7 @@ send_outreq(const struct out_req *req) * result to pass to either the error or the success * callback. */ trace_span_start("jsonrpc", req); - trace_span_tag(req, "id", req->id); + trace_span_tag(req, "id", req->idstr); trace_span_suspend_may_free(req); ld_rpc_send(req->cmd->plugin, req->js); @@ -1824,7 +1820,7 @@ struct plugin_timer *command_timer_(struct command *cmd, void *cb_arg) { return new_timer(cmd, cmd->plugin, - take(tal_fmt(NULL, "%s-timer", cmd->id)), + take(tal_fmt(NULL, "%s-timer", cmd->idstr)), t, cb, cb_arg); } @@ -1907,7 +1903,7 @@ struct json_stream *plugin_notify_start(struct command *cmd, const char *method) json_add_string(js, "method", method); json_object_start(js, "params"); - json_add_id(js, cmd->id); + json_add_string(js, "id", cmd->idstr); return js; } @@ -2067,7 +2063,7 @@ static void ld_command_handle(struct plugin *plugin, const char *buffer, const jsmntok_t *toks) { - const jsmntok_t *methtok, *paramstok, *filtertok; + const jsmntok_t *methtok, *paramstok, *filtertok, *idtok; const char *methodname; struct command *cmd; const char *id; @@ -2076,6 +2072,7 @@ static void ld_command_handle(struct plugin *plugin, methtok = json_get_member(buffer, toks, "method"); paramstok = json_get_member(buffer, toks, "params"); filtertok = json_get_member(buffer, toks, "filter"); + idtok = json_get_member(buffer, toks, "id"); if (!methtok || !paramstok) plugin_err(plugin, "Malformed JSON-RPC notification missing " @@ -2084,14 +2081,21 @@ static void ld_command_handle(struct plugin *plugin, json_tok_full(buffer, toks)); methodname = json_strdup(NULL, buffer, methtok); - id = json_get_id(tmpctx, buffer, toks); - if (!id) + if (!idtok) { type = COMMAND_TYPE_NOTIFICATION; - else if (streq(methodname, "check")) - type = COMMAND_TYPE_CHECK; - else - type = COMMAND_TYPE_NORMAL; + id = NULL; + } else { + if (idtok->type != JSMN_STRING) + plugin_err(plugin, "Malformed JSON-RPC id is not a string: %.*s", + json_tok_full_len(toks), + json_tok_full(buffer, toks)); + id = json_strdup(tmpctx, buffer, idtok); + if (streq(methodname, "check")) + type = COMMAND_TYPE_CHECK; + else + type = COMMAND_TYPE_NORMAL; + } cmd = new_command(plugin, plugin, id ? id : tal_fmt(tmpctx, "notification-%s", methodname), @@ -2662,7 +2666,7 @@ command_hook_success(struct command *cmd) struct command *aux_command(const struct command *cmd) { - return new_command(cmd->plugin, cmd->plugin, cmd->id, + return new_command(cmd->plugin, cmd->plugin, cmd->idstr, cmd->methodname, COMMAND_TYPE_AUX); } diff --git a/plugins/libplugin.h b/plugins/libplugin.h index 9134d2a28075..79bb423d5bf2 100644 --- a/plugins/libplugin.h +++ b/plugins/libplugin.h @@ -21,7 +21,7 @@ enum plugin_restartability { struct out_req { /* The unique id of this request. */ - const char *id; + const char *idstr; /* The command which is why we're calling this rpc. */ struct command *cmd; /* The method this is calling */ @@ -60,7 +60,7 @@ enum command_type { }; struct command { - const char *id; + const char *idstr; const char *methodname; enum command_type type; struct plugin *plugin; diff --git a/tests/test_askrene.py b/tests/test_askrene.py index 4474ec321dfe..1aaa4f732880 100644 --- a/tests/test_askrene.py +++ b/tests/test_askrene.py @@ -81,7 +81,7 @@ def test_reserve(node_factory): time.sleep(2) # Reservations can be in either order. - with pytest.raises(RpcError, match=rf'We could not find a usable set of paths. The shortest path is {scid12}->{scid23}, but {scid12dir} already reserved 10000000*msat by command ".*" \([0-9]* seconds ago\), 10000000*msat by command ".*" \([0-9]* seconds ago\)'): + with pytest.raises(RpcError, match=rf'We could not find a usable set of paths. The shortest path is {scid12}->{scid23}, but {scid12dir} already reserved 10000000*msat by command [-/#:a-zA-Z0-9]* \([0-9]* seconds ago\), 10000000*msat by command [-/#:a-zA-Z0-9]* \([0-9]* seconds ago\)'): l1.rpc.getroutes(source=l1.info['id'], destination=l3.info['id'], amount_msat=1000000, diff --git a/tests/test_misc.py b/tests/test_misc.py index 98432502de70..16d249ead3dd 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -1246,7 +1246,8 @@ def test_cli_commando(node_factory): '--network={}'.format(TEST_NETWORK), '--lightning-dir={}' .format(l1.daemon.lightning_dir), - 'help']) + 'help'], + timeout=TIMEOUT) assert val.returncode == 3 # Valid peer id, but needs rune! @@ -1255,7 +1256,8 @@ def test_cli_commando(node_factory): '--network={}'.format(TEST_NETWORK), '--lightning-dir={}' .format(l1.daemon.lightning_dir), - 'help']) + 'help'], + timeout=TIMEOUT) assert val.returncode == 1 # This works! @@ -1264,7 +1266,8 @@ def test_cli_commando(node_factory): '--network={}'.format(TEST_NETWORK), '--lightning-dir={}' .format(l1.daemon.lightning_dir), - 'help']).decode('utf-8') + 'help'], + timeout=TIMEOUT).decode('utf-8') # Test some known output. assert 'addgossip message\n\naddoutpointwatch' in out @@ -1281,7 +1284,8 @@ def test_cli_commando(node_factory): '--lightning-dir={}' .format(l1.daemon.lightning_dir), '-J', '-k', - 'help', 'command=help']).decode('utf-8') + 'help', 'command=help'], + timeout=TIMEOUT).decode('utf-8') j, _ = json.JSONDecoder().raw_decode(out) assert 'help [command]' in j['help'][0]['command'] @@ -1292,7 +1296,8 @@ def test_cli_commando(node_factory): '--lightning-dir={}' .format(l1.daemon.lightning_dir), '-J', '-o', - 'help', 'help']).decode('utf-8') + 'help', 'help'], + timeout=TIMEOUT).decode('utf-8') j, _ = json.JSONDecoder().raw_decode(out) assert 'help [command]' in j['help'][0]['command'] @@ -1303,7 +1308,8 @@ def test_cli_commando(node_factory): '--lightning-dir={}' .format(l1.daemon.lightning_dir), '-J', '--filter={"help":[{"command":true}]}', - 'help', 'help']).decode('utf-8') + 'help', 'help'], + timeout=TIMEOUT).decode('utf-8') j, _ = json.JSONDecoder().raw_decode(out) assert j == {'help': [{'command': 'help [command]'}]} @@ -1317,7 +1323,8 @@ def test_cli_commando(node_factory): '--lightning-dir={}' .format(l1.daemon.lightning_dir), '-J', '-o', - 'sendpay']).decode('utf-8') + 'sendpay'], + timeout=TIMEOUT).decode('utf-8') except Exception: pass @@ -1329,7 +1336,8 @@ def test_cli_commando(node_factory): '--lightning-dir={}' .format(l1.daemon.lightning_dir), 'x"[]{}'], - stdout=subprocess.PIPE) + stdout=subprocess.PIPE, + timeout=TIMEOUT) assert 'Unknown command' in out.stdout.decode('utf-8') subprocess.check_output(['cli/lightning-cli', @@ -1337,7 +1345,8 @@ def test_cli_commando(node_factory): '--network={}'.format(TEST_NETWORK), '--lightning-dir={}' .format(l1.daemon.lightning_dir), - 'invoice', '123000', 'l"[]{}', 'd"[]{}']).decode('utf-8') + 'invoice', '123000', 'l"[]{}', 'd"[]{}'], + timeout=TIMEOUT).decode('utf-8') # Check label is correct, and also that cli's keyword parsing works. out = subprocess.check_output(['cli/lightning-cli', '--commando={}:{}'.format(l2.info['id'], rune), @@ -1345,7 +1354,8 @@ def test_cli_commando(node_factory): '--lightning-dir={}' .format(l1.daemon.lightning_dir), '-k', - 'listinvoices', 'label=l"[]{}']).decode('utf-8') + 'listinvoices', 'label=l"[]{}'], + timeout=TIMEOUT).decode('utf-8') j = json.loads(out) assert only_one(j['invoices'])['label'] == 'l"[]{}' From f6a15798f5b22894e213598c9a4af83cf19311e3 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 19 May 2026 17:58:27 +0930 Subject: [PATCH 03/20] lightningd: internal cleanups since all non-command JSON IDs are strings. In particular, "struct jsonrpc_request"'s id is always a string. cmd->id isn't, though. We can also remove the now-unused json_get_id. Signed-off-by: Rusty Russell --- common/json_parse_simple.c | 11 ----------- common/json_parse_simple.h | 4 ---- lightningd/jsonrpc.c | 7 +++---- lightningd/jsonrpc.h | 1 - lightningd/plugin.c | 29 +++++++++++++++++------------ tests/test_invoices.py | 2 +- tests/test_plugin.py | 6 +++--- tests/test_wallet.py | 2 +- 8 files changed, 25 insertions(+), 37 deletions(-) diff --git a/common/json_parse_simple.c b/common/json_parse_simple.c index fbb2b12c67b5..ce6ab606f303 100644 --- a/common/json_parse_simple.c +++ b/common/json_parse_simple.c @@ -228,17 +228,6 @@ const jsmntok_t *json_get_arr(const jsmntok_t tok[], size_t index) return NULL; } -const char *json_get_id(const tal_t *ctx, - const char *buffer, const jsmntok_t *obj) -{ - const jsmntok_t *idtok = json_get_member(buffer, obj, "id"); - if (!idtok) - return NULL; - return tal_strndup(ctx, - json_tok_full(buffer, idtok), - json_tok_full_len(idtok)); -} - /*----------------------------------------------------------------------------- JSMN Result Validation Starts -----------------------------------------------------------------------------*/ diff --git a/common/json_parse_simple.h b/common/json_parse_simple.h index 56f97e2c14a1..653a36790e04 100644 --- a/common/json_parse_simple.h +++ b/common/json_parse_simple.h @@ -83,10 +83,6 @@ static inline const jsmntok_t *json_get_member(const char *buffer, /* Get index'th array member. */ const jsmntok_t *json_get_arr(const jsmntok_t tok[], size_t index); -/* Helper to get "id" field from object (including any quotes!). */ -const char *json_get_id(const tal_t *ctx, - const char *buffer, const jsmntok_t *obj); - /* Allocate a starter array of tokens for json_parse_input */ jsmntok_t *toks_alloc(const tal_t *ctx); diff --git a/lightningd/jsonrpc.c b/lightningd/jsonrpc.c index cf8f68a20f3e..53ad0b666482 100644 --- a/lightningd/jsonrpc.c +++ b/lightningd/jsonrpc.c @@ -1553,7 +1553,6 @@ struct jsonrpc_request *jsonrpc_request_start_( struct jsonrpc_request *r = tal(ctx, struct jsonrpc_request); static u64 next_request_id = 0; - r->id_is_string = true; if (id_prefix) { /* Strip "" and otherwise sanity-check */ if (strstarts(id_prefix, "\"") @@ -1567,10 +1566,10 @@ struct jsonrpc_request *jsonrpc_request_start_( if (json_escape_needed(id_prefix, strlen(id_prefix))) id_prefix = "weird-id"; - r->id = tal_fmt(r, "\"%s/cln:%s#%"PRIu64"\"", + r->id = tal_fmt(r, "%s/cln:%s#%"PRIu64, id_prefix, method, next_request_id); } else { - r->id = tal_fmt(r, "\"cln:%s#%"PRIu64"\"", method, next_request_id); + r->id = tal_fmt(r, "cln:%s#%"PRIu64, method, next_request_id); } tal_free_if_taken(id_prefix); next_request_id++; @@ -1586,7 +1585,7 @@ struct jsonrpc_request *jsonrpc_request_start_( if (add_header) { json_object_start(r->stream, NULL); json_add_string(r->stream, "jsonrpc", "2.0"); - json_add_id(r->stream, r->id); + json_add_string(r->stream, "id", r->id); json_add_string(r->stream, "method", method); json_object_start(r->stream, "params"); } diff --git a/lightningd/jsonrpc.h b/lightningd/jsonrpc.h index e5a5edfa3539..ab3b07ee6317 100644 --- a/lightningd/jsonrpc.h +++ b/lightningd/jsonrpc.h @@ -78,7 +78,6 @@ struct jsonrpc_notification { struct jsonrpc_request { const char *id; - bool id_is_string; const char *method; struct json_stream *stream; void (*notify_cb)(const char *buffer, diff --git a/lightningd/plugin.c b/lightningd/plugin.c index 9edb27b0ea0c..036903e91dae 100644 --- a/lightningd/plugin.c +++ b/lightningd/plugin.c @@ -233,7 +233,7 @@ static void plugin_terminated_fail_req(struct plugin *plugin, buf = tal_fmt(plugin, "{\"jsonrpc\": \"2.0\"," - "\"id\": %s," + "\"id\": \"%s\"," "\"error\":" " {\"code\":%i, \"message\":\"%s\"}" "}\n\n", @@ -550,10 +550,9 @@ static const char *plugin_notify_handle(struct plugin *plugin, "JSON-RPC notify \"id\"-field is not present"); } - /* Include any "" in id */ request = strmap_getn(&plugin->pending_requests, - json_tok_full(buffer, idtok), - json_tok_full_len(idtok)); + buffer + idtok->start, + idtok->end - idtok->start); if (!request) { return NULL; } @@ -676,8 +675,8 @@ static void plugin_response_handle(struct plugin *plugin, const tal_t *ctx; request = strmap_getn(&plugin->pending_requests, - json_tok_full(buffer, idtok), - json_tok_full_len(idtok)); + buffer + idtok->start, + idtok->end - idtok->start); /* Can happen if request was freed before plugin responded */ if (!request) { return; @@ -1189,8 +1188,8 @@ static void json_stream_forward_change_id(struct json_stream *stream, const char *buffer, const jsmntok_t *toks, const jsmntok_t *idtok, - /* Full token, including "" */ - const char *new_id) + const char *new_id, + bool make_new_id_a_string) { /* We copy everything, but replace the id. Special care has to * be taken when the id that is being replaced is a string. If @@ -1204,7 +1203,11 @@ static void json_stream_forward_change_id(struct json_stream *stream, json_stream_append(stream, buffer + toks->start, id_start - (buffer + toks->start)); + if (make_new_id_a_string) + json_stream_append(stream, "\"", 1); json_stream_append(stream, new_id, strlen(new_id)); + if (make_new_id_a_string) + json_stream_append(stream, "\"", 1); json_stream_append(stream, id_end, (buffer + toks->end) - id_end); } @@ -1216,7 +1219,8 @@ static void plugin_rpcmethod_cb(const char *buffer, struct json_stream *response; response = json_stream_raw_for_cmd(cmd); - json_stream_forward_change_id(response, buffer, toks, idtok, cmd->id); + /* cmd->id is a complete JSON token, quotes and all (if a string) */ + json_stream_forward_change_id(response, buffer, toks, idtok, cmd->id, false); json_stream_double_cr(response); command_raw_complete(cmd, response); } @@ -1237,8 +1241,9 @@ static void plugin_notify_cb(const char *buffer, json_add_string(response, "jsonrpc", "2.0"); json_add_tok(response, "method", methodtok, buffer); json_stream_append(response, ",\"params\":", strlen(",\"params\":")); + /* cmd->id is a complete JSON token, quotes and all (if a string) */ json_stream_forward_change_id(response, buffer, - paramtoks, idtok, cmd->id); + paramtoks, idtok, cmd->id, false); json_object_end(response); json_stream_double_cr(response); @@ -1294,7 +1299,7 @@ static struct command_result *plugin_rpcmethod_check(struct command *cmd, plugin_notify_cb, plugin_rpcmethod_cb, cmd); - json_stream_forward_change_id(req->stream, buffer, toks, idtok, req->id); + json_stream_forward_change_id(req->stream, buffer, toks, idtok, req->id, true); json_stream_double_cr(req->stream); plugin_request_send(plugin, req); req->stream = NULL; @@ -1338,7 +1343,7 @@ static struct command_result *plugin_rpcmethod_dispatch(struct command *cmd, plugin_notify_cb, plugin_rpcmethod_cb, cmd); - json_stream_forward_change_id(req->stream, buffer, toks, idtok, req->id); + json_stream_forward_change_id(req->stream, buffer, toks, idtok, req->id, true); json_stream_double_cr(req->stream); plugin_request_send(plugin, req); req->stream = NULL; diff --git a/tests/test_invoices.py b/tests/test_invoices.py index 92077b65ea81..f85c3023b3cf 100644 --- a/tests/test_invoices.py +++ b/tests/test_invoices.py @@ -21,7 +21,7 @@ def test_invoice(node_factory, chainparams): # Side note: invoice calls out to listincoming, so check JSON id is as expected myname = os.path.splitext(os.path.basename(sys.argv[0]))[0] - l1.daemon.wait_for_log(r': "{}:invoice#[0-9]*/cln:listincoming#[0-9]*"\[OUT\]'.format(myname)) + l1.daemon.wait_for_log(r': {}:invoice#[0-9]*/cln:listincoming#[0-9]*\[OUT\]'.format(myname)) after = int(time.time()) b11 = l1.rpc.decode(inv['bolt11']) diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 2aa2922f326b..9fc904563d71 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -1893,7 +1893,7 @@ def test_libplugin(node_factory): myname = os.path.splitext(os.path.basename(sys.argv[0]))[0] # getmanifest assumes everyone handles string-based JSON ids: - l1.daemon.wait_for_log(r'test_libplugin: "[-A-Za-z0-9:#]*/cln:getmanifest#[0-9]*"\[OUT\]') + l1.daemon.wait_for_log(r'test_libplugin: [-A-Za-z0-9:#]*/cln:getmanifest#[0-9]*\[OUT\]') l1.daemon.wait_for_log("String name from datastore:.*object does not have member string") l1.daemon.wait_for_log("Hex name from datastore: 00010203") @@ -1920,7 +1920,7 @@ def test_libplugin(node_factory): # Test hooks and notifications (add plugin, so we can test hook id) l2 = node_factory.get_node(options={"plugin": plugin, 'log-level': 'io'}) l2.connect(l1) - l2.daemon.wait_for_log(r': "{}:connect#[0-9]*/cln:peer_connected#[0-9]*"\[OUT\]'.format(myname)) + l2.daemon.wait_for_log(r': {}:connect#[0-9]*/cln:peer_connected#[0-9]*\[OUT\]'.format(myname)) l1.daemon.wait_for_log("{} peer_connected".format(l2.info["id"])) l1.daemon.wait_for_log("{} connected".format(l2.info["id"])) @@ -3189,7 +3189,7 @@ def test_commando(node_factory, executor): # Check JSON id is as expected (unfortunately pytest does not use a reliable name # for itself: with -k it calls itself `-c` here, instead of `pytest`). - l2.daemon.wait_for_log(r'plugin-commando: "[^:/]*:commando#[0-9]*/cln:commando#[0-9]*"\[OUT\]') + l2.daemon.wait_for_log(r'plugin-commando: [^:/]*:commando#[0-9]*/cln:commando#[0-9]*\[OUT\]') l1.daemon.wait_for_log(r'jsonrpc#[0-9]*: "[^:/]*:commando#[0-9]*/cln:commando#[0-9]*/commando:listpeers#[0-9]*"\[IN\]') res = l2.rpc.call(method='commando', diff --git a/tests/test_wallet.py b/tests/test_wallet.py index 651eb0e5dc8c..33b700d8a673 100644 --- a/tests/test_wallet.py +++ b/tests/test_wallet.py @@ -69,7 +69,7 @@ def test_withdraw(node_factory, bitcoind): # Side note: sendrawtransaction will trace back to withdrawl myname = os.path.splitext(os.path.basename(sys.argv[0]))[0] - l1.daemon.wait_for_log(r': "{}:withdraw#[0-9]*/cln:withdraw#[0-9]*/txprepare:sendpsbt#[0-9]*/cln:sendrawtransaction#[0-9]*"\[OUT\]'.format(myname)) + l1.daemon.wait_for_log(r': {}:withdraw#[0-9]*/cln:withdraw#[0-9]*/txprepare:sendpsbt#[0-9]*/cln:sendrawtransaction#[0-9]*\[OUT\]'.format(myname)) # Make sure bitcoind received the withdrawal unspent = l1.bitcoin.rpc.listunspent(0) From 629203e75812ef3ecf1ab742951dc2f3e8dabbfa Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 19 May 2026 17:59:27 +0930 Subject: [PATCH 04/20] common: hoist hash_str helper into its own header. We have three uses already, about to add a fourth. Signed-off-by: Rusty Russell --- common/Makefile | 1 + common/hash_str.h | 11 +++++++++++ common/utils.c | 1 - lightningd/plugin.h | 6 +----- plugins/bkpr/account.c | 6 +----- plugins/bkpr/onchain_fee.c | 8 ++------ 6 files changed, 16 insertions(+), 17 deletions(-) create mode 100644 common/hash_str.h diff --git a/common/Makefile b/common/Makefile index 69befa168f6b..d60606420807 100644 --- a/common/Makefile +++ b/common/Makefile @@ -121,6 +121,7 @@ COMMON_HEADERS_NOGEN := $(COMMON_SRC_NOGEN:.c=.h) \ common/ecdh.h \ common/errcode.h \ common/gossip_constants.h \ + common/hash_str.h \ common/hsm_version.h \ common/htlc.h \ common/jsonrpc_errors.h \ diff --git a/common/hash_str.h b/common/hash_str.h new file mode 100644 index 000000000000..111073e93334 --- /dev/null +++ b/common/hash_str.h @@ -0,0 +1,11 @@ +#ifndef LIGHTNING_COMMON_HASH_STR_H +#define LIGHTNING_COMMON_HASH_STR_H +#include "config.h" +#include + +static inline size_t hash_str(const char *str) +{ + return siphash24(siphash_seed(), str, strlen(str)); +} + +#endif /* LIGHTNING_COMMON_HASH_STR_H */ diff --git a/common/utils.c b/common/utils.c index 860cd446a4d4..5dcbee5ae5e5 100644 --- a/common/utils.c +++ b/common/utils.c @@ -253,4 +253,3 @@ void *membuf_tal_resize(struct membuf *mb, void *rawelems, size_t newsize) tal_resize(&p, newsize); return p; } - diff --git a/lightningd/plugin.h b/lightningd/plugin.h index b7f033604af0..5bc0c3af8339 100644 --- a/lightningd/plugin.h +++ b/lightningd/plugin.h @@ -2,6 +2,7 @@ #define LIGHTNING_LIGHTNINGD_PLUGIN_H #include "config.h" #include +#include #include #include @@ -24,11 +25,6 @@ struct plugin_subscription { const char *topic; }; -static inline size_t hash_str(const char *str) -{ - return siphash24(siphash_seed(), str, strlen(str)); -} - static inline const char *plugin_subscription_key(const struct plugin_subscription *ps) { return ps->topic; diff --git a/plugins/bkpr/account.c b/plugins/bkpr/account.c index c8b074689773..c01bafefdc99 100644 --- a/plugins/bkpr/account.c +++ b/plugins/bkpr/account.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -14,11 +15,6 @@ #include #include -static size_t hash_str(const char *str) -{ - return siphash24(siphash_seed(), str, strlen(str)); -} - static const char *account_key(const struct account *account) { return account->name; diff --git a/plugins/bkpr/onchain_fee.c b/plugins/bkpr/onchain_fee.c index 79b6f15a7d20..8a6cc14ba9fd 100644 --- a/plugins/bkpr/onchain_fee.c +++ b/plugins/bkpr/onchain_fee.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -57,11 +58,6 @@ struct ordered_ofees { struct onchain_fee **ofs; }; -static size_t hash_acctname(const char *str) -{ - return siphash24(siphash_seed(), str, strlen(str)); -} - static const char *onchain_fees_keyof(const struct ordered_ofees *ofees) { return ofees->ofs[0]->acct_name; @@ -75,7 +71,7 @@ static bool onchain_account_eq(const struct ordered_ofees *ofees, HTABLE_DEFINE_NODUPS_TYPE(struct ordered_ofees, onchain_fees_keyof, - hash_acctname, + hash_str, onchain_account_eq, ofees_hash); From c4fd427955655809626eae4f921a22bcad3724b8 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 19 May 2026 18:00:27 +0930 Subject: [PATCH 05/20] common: implement str_to_u64, make json_to_u64 use it. The prior implementation could read past the end of the buffer (we actually pad our JSON so this isn't harmful, but still). Fix up json_to_s64 and json_to_double too, but since they're not used as often, just copy the string there. Signed-off-by: Rusty Russell Co-Authored-By: Claude Haiku 4.5 --- common/json_parse_simple.c | 31 ++++++++----------------------- common/utils.c | 20 ++++++++++++++++++++ common/utils.h | 3 +++ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/common/json_parse_simple.c b/common/json_parse_simple.c index ce6ab606f303..7e0e299c9dfa 100644 --- a/common/json_parse_simple.c +++ b/common/json_parse_simple.c @@ -61,35 +61,19 @@ char *json_strdup(const tal_t *ctx, const char *buffer, const jsmntok_t *tok) bool json_to_u64(const char *buffer, const jsmntok_t *tok, u64 *num) { - char *end; - unsigned long long l; - - errno = 0; - l = strtoull(buffer + tok->start, &end, 0); - if (end != buffer + tok->end) - return false; - - BUILD_ASSERT(sizeof(l) >= sizeof(*num)); - *num = l; - - /* Check for overflow */ - if (l == ULLONG_MAX && errno == ERANGE) - return false; - - if (*num != l) - return false; - - return true; + return str_to_u64(buffer + tok->start, tok->end - tok->start, num); } +/* Uncommon, we don't optimize these */ bool json_to_s64(const char *buffer, const jsmntok_t *tok, s64 *num) { + const char *tmpbuf = json_strdup(tmpctx, buffer, tok); char *end; long long l; errno = 0; - l = strtoll(buffer + tok->start, &end, 0); - if (end != buffer + tok->end) + l = strtoll(tmpbuf, &end, 0); + if (tmpbuf[0] == '\0' || *end != '\0') return false; BUILD_ASSERT(sizeof(l) >= sizeof(*num)); @@ -109,11 +93,12 @@ bool json_to_s64(const char *buffer, const jsmntok_t *tok, s64 *num) bool json_to_double(const char *buffer, const jsmntok_t *tok, double *num) { + const char *tmpbuf = json_strdup(tmpctx, buffer, tok); char *end; errno = 0; - *num = strtod(buffer + tok->start, &end); - if (end != buffer + tok->end) + *num = strtod(tmpbuf, &end); + if (tmpbuf[0] == '\0' || *end != '\0') return false; /* Check for overflow/underflow */ diff --git a/common/utils.c b/common/utils.c index 5dcbee5ae5e5..1a0799007546 100644 --- a/common/utils.c +++ b/common/utils.c @@ -253,3 +253,23 @@ void *membuf_tal_resize(struct membuf *mb, void *rawelems, size_t newsize) tal_resize(&p, newsize); return p; } + +bool str_to_u64(const char *buf, size_t buflen, u64 *num) +{ + u64 val = 0; + + if (buflen == 0) + return false; + + for (size_t i = 0; i < buflen; i++) { + u64 digit; + if (buf[i] < '0' || buf[i] > '9') + return false; + digit = buf[i] - '0'; + if (val > (UINT64_MAX - digit) / 10) + return false; + val = val * 10 + digit; + } + *num = val; + return true; +} diff --git a/common/utils.h b/common/utils.h index 7a5c98aa0cf9..560ec9f50022 100644 --- a/common/utils.h +++ b/common/utils.h @@ -119,6 +119,9 @@ static inline void tal_free_if_taken(const tal_t *p) void tal_arr_append_(void *p, const void *append TAKES); void tal_arr_appendn_(void *p, const void *append TAKES, size_t bytes); +/* Parse a decimal u64 from exactly buflen bytes; false on bad chars or overflow */ +bool str_to_u64(const char *buf, size_t buflen, u64 *num); + /* Check for valid UTF-8 */ bool utf8_check(const void *buf, size_t buflen); From 5306acdd351afdf9a01d0c0bfe69c4e926d69db7 Mon Sep 17 00:00:00 2001 From: Lagrang3 Date: Wed, 17 Jun 2026 17:45:41 +0100 Subject: [PATCH 06/20] Add unit tests for str_to_u64 Signed-off-by: Lagrang3 --- common/test/run-utils-str_to_u64.c | 203 +++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 common/test/run-utils-str_to_u64.c diff --git a/common/test/run-utils-str_to_u64.c b/common/test/run-utils-str_to_u64.c new file mode 100644 index 000000000000..e51224a4dec8 --- /dev/null +++ b/common/test/run-utils-str_to_u64.c @@ -0,0 +1,203 @@ +#include "config.h" +#include +#include +#include +#include +#include +#include +#include + +/* AUTOGENERATED MOCKS START */ +/* Generated stub for amount_asset_is_main */ +bool amount_asset_is_main(struct amount_asset *asset UNNEEDED) +{ fprintf(stderr, "amount_asset_is_main called!\n"); abort(); } +/* Generated stub for amount_asset_to_sat */ +struct amount_sat amount_asset_to_sat(struct amount_asset *asset UNNEEDED) +{ fprintf(stderr, "amount_asset_to_sat called!\n"); abort(); } +/* Generated stub for amount_feerate */ + bool amount_feerate(u32 *feerate UNNEEDED, struct amount_sat fee UNNEEDED, size_t weight UNNEEDED) +{ fprintf(stderr, "amount_feerate called!\n"); abort(); } +/* Generated stub for amount_sat */ +struct amount_sat amount_sat(u64 satoshis UNNEEDED) +{ fprintf(stderr, "amount_sat called!\n"); abort(); } +/* Generated stub for amount_sat_add */ + bool amount_sat_add(struct amount_sat *val UNNEEDED, + struct amount_sat a UNNEEDED, + struct amount_sat b UNNEEDED) +{ fprintf(stderr, "amount_sat_add called!\n"); abort(); } +/* Generated stub for amount_sat_eq */ +bool amount_sat_eq(struct amount_sat a UNNEEDED, struct amount_sat b UNNEEDED) +{ fprintf(stderr, "amount_sat_eq called!\n"); abort(); } +/* Generated stub for amount_sat_greater_eq */ +bool amount_sat_greater_eq(struct amount_sat a UNNEEDED, struct amount_sat b UNNEEDED) +{ fprintf(stderr, "amount_sat_greater_eq called!\n"); abort(); } +/* Generated stub for amount_sat_sub */ + bool amount_sat_sub(struct amount_sat *val UNNEEDED, + struct amount_sat a UNNEEDED, + struct amount_sat b UNNEEDED) +{ fprintf(stderr, "amount_sat_sub called!\n"); abort(); } +/* Generated stub for amount_sat_to_asset */ +struct amount_asset amount_sat_to_asset(struct amount_sat *sat UNNEEDED, const u8 *asset UNNEEDED) +{ fprintf(stderr, "amount_sat_to_asset called!\n"); abort(); } +/* Generated stub for amount_tx_fee */ +struct amount_sat amount_tx_fee(u32 fee_per_kw UNNEEDED, size_t weight UNNEEDED) +{ fprintf(stderr, "amount_tx_fee called!\n"); abort(); } +/* Generated stub for fromwire */ +const u8 *fromwire(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, void *copy UNNEEDED, size_t n UNNEEDED) +{ fprintf(stderr, "fromwire called!\n"); abort(); } +/* Generated stub for fromwire_bool */ +bool fromwire_bool(const u8 **cursor UNNEEDED, size_t *max UNNEEDED) +{ fprintf(stderr, "fromwire_bool called!\n"); abort(); } +/* Generated stub for fromwire_fail */ +void *fromwire_fail(const u8 **cursor UNNEEDED, size_t *max UNNEEDED) +{ fprintf(stderr, "fromwire_fail called!\n"); abort(); } +/* Generated stub for fromwire_secp256k1_ecdsa_signature */ +void fromwire_secp256k1_ecdsa_signature(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, + secp256k1_ecdsa_signature *signature UNNEEDED) +{ fprintf(stderr, "fromwire_secp256k1_ecdsa_signature called!\n"); abort(); } +/* Generated stub for fromwire_sha256 */ +void fromwire_sha256(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, struct sha256 *sha256 UNNEEDED) +{ fprintf(stderr, "fromwire_sha256 called!\n"); abort(); } +/* Generated stub for fromwire_tal_arrn */ +u8 *fromwire_tal_arrn(const tal_t *ctx UNNEEDED, + const u8 **cursor UNNEEDED, size_t *max UNNEEDED, size_t num UNNEEDED) +{ fprintf(stderr, "fromwire_tal_arrn called!\n"); abort(); } +/* Generated stub for fromwire_u32 */ +u32 fromwire_u32(const u8 **cursor UNNEEDED, size_t *max UNNEEDED) +{ fprintf(stderr, "fromwire_u32 called!\n"); abort(); } +/* Generated stub for fromwire_u64 */ +u64 fromwire_u64(const u8 **cursor UNNEEDED, size_t *max UNNEEDED) +{ fprintf(stderr, "fromwire_u64 called!\n"); abort(); } +/* Generated stub for fromwire_u8 */ +u8 fromwire_u8(const u8 **cursor UNNEEDED, size_t *max UNNEEDED) +{ fprintf(stderr, "fromwire_u8 called!\n"); abort(); } +/* Generated stub for fromwire_u8_array */ +void fromwire_u8_array(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, u8 *arr UNNEEDED, size_t num UNNEEDED) +{ fprintf(stderr, "fromwire_u8_array called!\n"); abort(); } +/* Generated stub for siphash_seed */ +const struct siphash_seed *siphash_seed(void) +{ fprintf(stderr, "siphash_seed called!\n"); abort(); } +/* Generated stub for towire */ +void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED) +{ fprintf(stderr, "towire called!\n"); abort(); } +/* Generated stub for towire_bool */ +void towire_bool(u8 **pptr UNNEEDED, bool v UNNEEDED) +{ fprintf(stderr, "towire_bool called!\n"); abort(); } +/* Generated stub for towire_secp256k1_ecdsa_signature */ +void towire_secp256k1_ecdsa_signature(u8 **pptr UNNEEDED, + const secp256k1_ecdsa_signature *signature UNNEEDED) +{ fprintf(stderr, "towire_secp256k1_ecdsa_signature called!\n"); abort(); } +/* Generated stub for towire_sha256 */ +void towire_sha256(u8 **pptr UNNEEDED, const struct sha256 *sha256 UNNEEDED) +{ fprintf(stderr, "towire_sha256 called!\n"); abort(); } +/* Generated stub for towire_u32 */ +void towire_u32(u8 **pptr UNNEEDED, u32 v UNNEEDED) +{ fprintf(stderr, "towire_u32 called!\n"); abort(); } +/* Generated stub for towire_u64 */ +void towire_u64(u8 **pptr UNNEEDED, u64 v UNNEEDED) +{ fprintf(stderr, "towire_u64 called!\n"); abort(); } +/* Generated stub for towire_u8 */ +void towire_u8(u8 **pptr UNNEEDED, u8 v UNNEEDED) +{ fprintf(stderr, "towire_u8 called!\n"); abort(); } +/* Generated stub for towire_u8_array */ +void towire_u8_array(u8 **pptr UNNEEDED, const u8 *arr UNNEEDED, size_t num UNNEEDED) +{ fprintf(stderr, "towire_u8_array called!\n"); abort(); } +/* AUTOGENERATED MOCKS END */ + +static void test_str_to_u64(void) +{ + u64 val; + + /* Empty input */ + assert(!str_to_u64("", 0, &val)); + + /* Single digit */ + assert(str_to_u64("0", 1, &val) && val == 0); + assert(str_to_u64("5", 1, &val) && val == 5); + assert(str_to_u64("9", 1, &val) && val == 9); + + /* Multi-digit */ + assert(str_to_u64("123", 3, &val) && val == 123); + assert(str_to_u64("000", 3, &val) && val == 0); + assert(str_to_u64("000123", 6, &val) && val == 123); + + /* Exact length prefix */ + assert(str_to_u64("1234", 2, &val) && val == 12); + + /* Max value (2^64-1) */ + assert(str_to_u64("18446744073709551615", 20, &val) && + val == 18446744073709551615ULL); + + /* Overflow */ + assert(!str_to_u64("18446744073709551616", 20, &val)); + assert(!str_to_u64("184467440737095516150", 21, &val)); + + /* Invalid characters */ + assert(!str_to_u64("12a3", 4, &val)); + assert(!str_to_u64("-123", 4, &val)); + assert(!str_to_u64("1.23", 4, &val)); + assert(!str_to_u64("123 ", 4, &val)); + assert(!str_to_u64(" 123", 4, &val)); + + /* Non-digit at various positions */ + assert(!str_to_u64("x", 1, &val)); + assert(!str_to_u64("1x", 2, &val)); + assert(!str_to_u64("12x", 3, &val)); + + /* Long string of zeros (21) must succeed as 0 (leading zeros are + * allowed) */ + assert(str_to_u64("000000000000000000000", 21, &val) && val == 0); + + /* Max value with leading zeros */ + assert(str_to_u64("0018446744073709551615", 22, &val) && + val == 18446744073709551615ULL); + assert(str_to_u64("0000000000000000000000000000000000000000000000000000" + "000000000000000000000000000018446744073709551615", + 100, &val) && + val == 18446744073709551615ULL); + + /* 1 followed by 20 zeros (10^20), must overflow */ + assert(!str_to_u64("100000000000000000000", 21, &val)); + + /* 1 followed by 19 zeros (10^19), fits */ + assert(str_to_u64("10000000000000000000", 20, &val) && + val == 10000000000000000000ULL); + + /* 999...9 (20 times) overflows */ + assert(!str_to_u64("", 20, &val)); + + /* Just below UINT64_MAX */ + assert(str_to_u64("18446744073709551614", 20, &val) && + val == 18446744073709551614ULL); + + /* Prefix of the max (first 19 chars of the 20-digit max) */ + assert(str_to_u64("18446744073709551615", 19, &val) && + val == 1844674407370955161ULL); + + /* Ensure we do not write *num on failure paths */ + { + u64 before = 0xdeadbeefcafebabeULL; + val = before; + + assert(!str_to_u64("12a3", 4, &val)); + assert(val == before); + + assert(!str_to_u64("", 0, &val)); + assert(val == before); + + assert(!str_to_u64("18446744073709551616", 20, &val)); + assert(val == before); + + assert(!str_to_u64("1234567890", 0, &val)); + assert(val == before); + } +} + +int main(int argc, char *argv[]) +{ + common_setup(argv[0]); + + test_str_to_u64(); + + common_shutdown(); +} From 170db33fa18e9bd18175cc6fede1fab2d82cc04b Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 19 May 2026 18:01:27 +0930 Subject: [PATCH 07/20] common: hoist amount+currency parsing into common code. Currently used for offers, we will use it for repeatpay too. Signed-off-by: Rusty Russell --- common/iso4217.c | 87 ++++++++++++++++++++++++++++++++++++++++++ common/iso4217.h | 13 +++++++ plugins/offers_offer.c | 84 ++++++---------------------------------- 3 files changed, 112 insertions(+), 72 deletions(-) diff --git a/common/iso4217.c b/common/iso4217.c index a164e91c4c04..25da13f4e3d5 100644 --- a/common/iso4217.c +++ b/common/iso4217.c @@ -1,7 +1,11 @@ #include "config.h" #include #include +#include +#include #include +#include +#include /* Wikipedia leads me to: https://www.currency-iso.org/en/home/tables/table-a1.html @@ -202,3 +206,86 @@ const struct iso4217_name_and_divisor *find_iso4217(const utf8 *prefix, } return NULL; } + +static bool msat_or_any(const tal_t *ctx, + const char *buf, + size_t buflen, + u64 **amount) +{ + struct amount_msat msat; + + if (memeqstr(buf, buflen, "any")) { + *amount = NULL; + return true; + } + + if (!parse_amount_msat(&msat, buf, buflen)) + return false; + + *amount = tal_dup(ctx, u64, &msat.millisatoshis); /* Raw: parsing */ + return true; +} + +const char *parse_currency_amount(const tal_t *ctx, + const char *buf, + size_t buflen, + const struct iso4217_name_and_divisor **isocode, + u64 **amount) +{ + const char *dot; + size_t wholelen; + u64 cents; + u64 total; + + if (msat_or_any(ctx, buf, buflen, amount)) { + *isocode = NULL; + return NULL; + } + + /* BOLT #12: + * + * - MUST specify `offer_currency` `iso4217` as an ISO 4217 three-letter code. + * - MUST specify `offer_amount` in the currency unit adjusted by the ISO 4217 + * exponent (e.g. USD cents). + */ + if (buflen < ISO4217_NAMELEN) + return tal_fmt(ctx, "Not a number, and too short for currency"); + + *isocode = find_iso4217(buf + buflen - ISO4217_NAMELEN, ISO4217_NAMELEN); + if (!*isocode) + return tal_fmt(ctx, "Unknown currency suffix %.*s", + ISO4217_NAMELEN, + buf + buflen - ISO4217_NAMELEN); + + buflen -= ISO4217_NAMELEN; + dot = memchr(buf, '.', buflen); + if (!dot) { + wholelen = buflen; + cents = 0; + } else { + const char *afterdot = dot + 1; + size_t partlen = buf + buflen - afterdot; + wholelen = dot - buf; + if (partlen != (*isocode)->minor_unit) + return tal_fmt(ctx, "Currency %s requires %u minor units", + (*isocode)->name, (*isocode)->minor_unit); + if (!str_to_u64(afterdot, partlen, ¢s)) + return tal_fmt(ctx, "Bad minor units number"); + } + + if (!str_to_u64(buf, wholelen, &total)) + return tal_fmt(ctx, "Not a valid number"); + + for (size_t i = 0; i < (*isocode)->minor_unit; i++) { + if (mul_overflows_u64(total, 10)) + return tal_fmt(ctx, "excessively large value"); + total *= 10; + } + + if (add_overflows_u64(total, cents)) + return tal_fmt(ctx, "excessively large value"); + + total += cents; + *amount = tal_dup(ctx, u64, &total); + return NULL; +} diff --git a/common/iso4217.h b/common/iso4217.h index e57c5baae054..a77a6d9fd077 100644 --- a/common/iso4217.h +++ b/common/iso4217.h @@ -18,4 +18,17 @@ struct iso4217_name_and_divisor { const struct iso4217_name_and_divisor *find_iso4217(const utf8 *prefix, size_t len); + +/** + * parse_currency_amount - convert msat amount, any, or currency amount. + * + * Returns error message or NULL. On success: + * if *iso4217 == NULL: currency is BTC. If *amount == NULL, "any". + * if *iso4217 != NULL: *amount is amount in cents in that currency, never NULL. + */ +const char *parse_currency_amount(const tal_t *ctx, + const char *buf, + size_t buflen, + const struct iso4217_name_and_divisor **iso4217, + u64 **amount); #endif /* LIGHTNING_COMMON_ISO4217_H */ diff --git a/plugins/offers_offer.c b/plugins/offers_offer.c index 59570e2608a6..77c3cf9be7e1 100644 --- a/plugins/offers_offer.c +++ b/plugins/offers_offer.c @@ -13,87 +13,27 @@ #include #include -static bool msat_or_any(const char *buffer, - const jsmntok_t *tok, - struct tlv_offer *offer) -{ - struct amount_msat msat; - if (json_tok_streq(buffer, tok, "any")) - return true; - - if (!parse_amount_msat(&msat, - buffer + tok->start, tok->end - tok->start)) - return false; - - offer->offer_amount = tal_dup(offer, u64, - &msat.millisatoshis); /* Raw: other currencies */ - return true; -} - static struct command_result *param_amount(struct command *cmd, const char *name, const char *buffer, const jsmntok_t *tok, struct tlv_offer *offer) { + const char *err; const struct iso4217_name_and_divisor *isocode; - jsmntok_t number, whole, frac; - u64 cents; - - if (msat_or_any(buffer, tok, offer)) - return NULL; - offer->offer_amount = tal(offer, u64); - - /* BOLT #12: - * - * - MUST specify `offer_currency` `iso4217` as an ISO 4217 three-letter code. - * - MUST specify `offer_amount` in the currency unit adjusted by the ISO 4217 - * exponent (e.g. USD cents). - */ - if (tok->end - tok->start < ISO4217_NAMELEN) - return command_fail_badparam(cmd, name, buffer, tok, - "should be 'any', msatoshis or [.]"); - - isocode = find_iso4217(buffer + tok->end - ISO4217_NAMELEN, ISO4217_NAMELEN); - if (!isocode) - return command_fail(cmd, JSONRPC2_INVALID_PARAMS, - "Unknown currency suffix %.*s", - ISO4217_NAMELEN, - buffer + tok->end - ISO4217_NAMELEN); - - offer->offer_currency - = tal_dup_arr(offer, utf8, isocode->name, ISO4217_NAMELEN, 0); - - number = *tok; - number.end -= ISO4217_NAMELEN; - if (!split_tok(buffer, &number, '.', &whole, &frac)) { - whole = number; - cents = 0; - } else { - if (frac.end - frac.start != isocode->minor_unit) - return command_fail(cmd, JSONRPC2_INVALID_PARAMS, - "Currency %s requires %u minor units", - isocode->name, isocode->minor_unit); - if (!json_to_u64(buffer, &frac, ¢s)) - return command_fail_badparam(cmd, name, buffer, - &number, - "Bad minor units"); + err = parse_currency_amount(offer, + buffer + tok->start, + tok->end - tok->start, + &isocode, + &offer->offer_amount); + if (err) + return command_fail_badparam(cmd, name, buffer, tok, err); + + if (isocode) { + offer->offer_currency + = tal_dup_arr(offer, utf8, isocode->name, ISO4217_NAMELEN, 0); } - - if (!json_to_u64(buffer, &whole, offer->offer_amount)) - return command_fail_badparam(cmd, name, buffer, tok, - "should be 'any', msatoshis or [.]"); - - for (size_t i = 0; i < isocode->minor_unit; i++) { - if (mul_overflows_u64(*offer->offer_amount, 10)) - return command_fail_badparam(cmd, name, buffer, - &whole, - "excessively large value"); - *offer->offer_amount *= 10; - } - - *offer->offer_amount += cents; return NULL; } From 355aafff3b2b61ffaeb8850addd0935668baacac Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 15:49:44 +0930 Subject: [PATCH 08/20] askrene: add APIs for "impressions" which are *relative* constraints. Normal constraints are clamps on min/max caused by failed payments: min for the channels that succeeded, max for the channel which failed. Impressions are the results of successful payments, which alter both min and max (negatively in the forward direction, positively in the reverse). impression: n 1. An effect, feeling, or image retained as a consequence of experience. 2. A vague notion, remembrance, or belief. 3. A mark produced on a surface by pressure. Unlike constraints, this is the result of our own effect on the network: they're related but different enough to get their own API and terminology. The name conveys both we made an impression on the channel, and that the results are a bit vague (due to other changes since then, which we won't know about). Signed-off-by: Rusty Russell Changelog-Added: JSON-RPC: `askrene` layers now contain "impressions" representing the effects of successful payments we made through channels. --- .msggen.json | 73 +- cln-grpc/proto/node.proto | 22 + cln-grpc/src/convert.rs | 40 ++ cln-rpc/src/model.rs | 30 +- contrib/msggen/msggen/schema.json | 117 +++- contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py | 630 +++++++++--------- contrib/pyln-testing/pyln/testing/grpc2py.py | 28 + doc/schemas/askrene-create-layer.json | 37 +- doc/schemas/askrene-inform-channel.json | 46 +- doc/schemas/askrene-listlayers.json | 34 + plugins/askrene/askrene.c | 12 +- plugins/askrene/child/route_query.c | 8 +- plugins/askrene/datastore_wire.c | 29 + plugins/askrene/datastore_wire.h | 11 + plugins/askrene/layer.c | 154 +++++ plugins/askrene/layer.h | 14 +- tests/test_askrene.py | 31 + tools/lightning-downgrade.c | 3 + 18 files changed, 992 insertions(+), 327 deletions(-) diff --git a/.msggen.json b/.msggen.json index 4d593d889f39..741fcaac7da0 100644 --- a/.msggen.json +++ b/.msggen.json @@ -760,6 +760,7 @@ "AskRene-Create-Layer.layers[].created_channels[]": 5, "AskRene-Create-Layer.layers[].disabled_channels[]": 4, "AskRene-Create-Layer.layers[].disabled_nodes[]": 3, + "AskRene-Create-Layer.layers[].impressions[]": 10, "AskRene-Create-Layer.layers[].layer": 1, "AskRene-Create-Layer.layers[].node_biases[]": 9, "AskRene-Create-Layer.layers[].persistent": 2 @@ -789,6 +790,11 @@ "AskRene-Create-Layer.layers[].created_channels[].short_channel_id": 3, "AskRene-Create-Layer.layers[].created_channels[].source": 1 }, + "Askrene-create-layerLayersImpressions": { + "AskRene-Create-Layer.layers[].impressions[].amount_msat": 1, + "AskRene-Create-Layer.layers[].impressions[].short_channel_id_dir": 2, + "AskRene-Create-Layer.layers[].impressions[].timestamp": 3 + }, "Askrene-create-layerLayersNodeBiases": { "AskRene-Create-Layer.layers[].node_biases[].description": 4, "AskRene-Create-Layer.layers[].node_biases[].in_bias": 2, @@ -821,6 +827,12 @@ "AskRene-Inform-Channel.constraints[].short_channel_id_dir": 1, "AskRene-Inform-Channel.constraints[].timestamp": 3 }, + "Askrene-inform-channelImpressions": { + "AskRene-Inform-Channel.impressions[].amount_msat": 1, + "AskRene-Inform-Channel.impressions[].layer": 2, + "AskRene-Inform-Channel.impressions[].short_channel_id_dir": 3, + "AskRene-Inform-Channel.impressions[].timestamp": 4 + }, "Askrene-inform-channelRequest": { "AskRene-Inform-Channel.amount_msat": 7, "AskRene-Inform-Channel.direction": 3, @@ -833,7 +845,8 @@ }, "Askrene-inform-channelResponse": { "AskRene-Inform-Channel.constraint": 1, - "AskRene-Inform-Channel.constraints[]": 2 + "AskRene-Inform-Channel.constraints[]": 2, + "AskRene-Inform-Channel.impressions[]": 3 }, "Askrene-listlayersLayers": { "AskRene-ListLayers.layers[].biases[]": 8, @@ -842,6 +855,7 @@ "AskRene-ListLayers.layers[].created_channels[]": 3, "AskRene-ListLayers.layers[].disabled_channels[]": 6, "AskRene-ListLayers.layers[].disabled_nodes[]": 2, + "AskRene-ListLayers.layers[].impressions[]": 10, "AskRene-ListLayers.layers[].layer": 1, "AskRene-ListLayers.layers[].node_biases[]": 9, "AskRene-ListLayers.layers[].persistent": 5 @@ -880,6 +894,11 @@ "AskRene-ListLayers.layers[].created_channels[].short_channel_id": 3, "AskRene-ListLayers.layers[].created_channels[].source": 1 }, + "Askrene-listlayersLayersImpressions": { + "AskRene-ListLayers.layers[].impressions[].amount_msat": 1, + "AskRene-ListLayers.layers[].impressions[].short_channel_id_dir": 2, + "AskRene-ListLayers.layers[].impressions[].timestamp": 3 + }, "Askrene-listlayersLayersNodeBiases": { "AskRene-ListLayers.layers[].node_biases[].description": 4, "AskRene-ListLayers.layers[].node_biases[].in_bias": 2, @@ -4852,6 +4871,22 @@ "added": "v24.11", "deprecated": null }, + "AskRene-Create-Layer.layers[].impressions[]": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-Create-Layer.layers[].impressions[].amount_msat": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-Create-Layer.layers[].impressions[].short_channel_id_dir": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-Create-Layer.layers[].impressions[].timestamp": { + "added": "v26.09", + "deprecated": null + }, "AskRene-Create-Layer.layers[].layer": { "added": "v24.11", "deprecated": null @@ -4960,6 +4995,26 @@ "added": "v24.11", "deprecated": null }, + "AskRene-Inform-Channel.impressions[]": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-Inform-Channel.impressions[].amount_msat": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-Inform-Channel.impressions[].layer": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-Inform-Channel.impressions[].short_channel_id_dir": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-Inform-Channel.impressions[].timestamp": { + "added": "v26.09", + "deprecated": null + }, "AskRene-Inform-Channel.inform": { "added": "v24.11", "deprecated": null @@ -5124,6 +5179,22 @@ "added": "v24.11", "deprecated": null }, + "AskRene-ListLayers.layers[].impressions[]": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-ListLayers.layers[].impressions[].amount_msat": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-ListLayers.layers[].impressions[].short_channel_id_dir": { + "added": "v26.09", + "deprecated": null + }, + "AskRene-ListLayers.layers[].impressions[].timestamp": { + "added": "v26.09", + "deprecated": null + }, "AskRene-ListLayers.layers[].layer": { "added": "v24.11", "deprecated": null diff --git a/cln-grpc/proto/node.proto b/cln-grpc/proto/node.proto index ed692dedca63..546d84f12ead 100644 --- a/cln-grpc/proto/node.proto +++ b/cln-grpc/proto/node.proto @@ -3991,6 +3991,7 @@ message AskrenelistlayersLayers { repeated AskrenelistlayersLayersChannelUpdates channel_updates = 7; repeated AskrenelistlayersLayersBiases biases = 8; repeated AskrenelistlayersLayersNodeBiases node_biases = 9; + repeated AskrenelistlayersLayersImpressions impressions = 10; } message AskrenelistlayersLayersBiases { @@ -4024,6 +4025,12 @@ message AskrenelistlayersLayersCreatedChannels { Amount capacity_msat = 4; } +message AskrenelistlayersLayersImpressions { + Amount amount_msat = 1; + string short_channel_id_dir = 2; + uint64 timestamp = 3; +} + message AskrenelistlayersLayersNodeBiases { bytes node = 1; sint64 in_bias = 2; @@ -4051,6 +4058,7 @@ message AskrenecreatelayerLayers { repeated AskrenecreatelayerLayersConstraints constraints = 7; repeated AskrenecreatelayerLayersBiases biases = 8; repeated AskrenecreatelayerLayersNodeBiases node_biases = 9; + repeated AskrenecreatelayerLayersImpressions impressions = 10; } message AskrenecreatelayerLayersBiases { @@ -4082,6 +4090,12 @@ message AskrenecreatelayerLayersCreatedChannels { Amount capacity_msat = 4; } +message AskrenecreatelayerLayersImpressions { + Amount amount_msat = 1; + string short_channel_id_dir = 2; + uint64 timestamp = 3; +} + message AskrenecreatelayerLayersNodeBiases { bytes node = 1; sint64 in_bias = 2; @@ -4187,6 +4201,7 @@ message AskreneinformchannelRequest { message AskreneinformchannelResponse { repeated AskreneinformchannelConstraints constraints = 2; + repeated AskreneinformchannelImpressions impressions = 3; } message AskreneinformchannelConstraints { @@ -4197,6 +4212,13 @@ message AskreneinformchannelConstraints { optional Amount minimum_msat = 5; } +message AskreneinformchannelImpressions { + Amount amount_msat = 1; + string layer = 2; + string short_channel_id_dir = 3; + uint64 timestamp = 4; +} + message AskrenecreatechannelRequest { string layer = 1; bytes source = 2; diff --git a/cln-grpc/src/convert.rs b/cln-grpc/src/convert.rs index d10a2fb6b40e..30197d5ccfab 100644 --- a/cln-grpc/src/convert.rs +++ b/cln-grpc/src/convert.rs @@ -4334,6 +4334,17 @@ impl From for pb::Askrenelist } } +#[allow(unused_variables)] +impl From for pb::AskrenelistlayersLayersImpressions { + fn from(c: responses::AskrenelistlayersLayersImpressions) -> Self { + Self { + amount_msat: Some(c.amount_msat.into()), // Rule #2 for type msat + short_channel_id_dir: c.short_channel_id_dir.to_string(), // Rule #2 for type short_channel_id_dir + timestamp: c.timestamp, // Rule #2 for type u64 + } + } +} + #[allow(unused_variables)] impl From for pb::AskrenelistlayersLayersNodeBiases { fn from(c: responses::AskrenelistlayersLayersNodeBiases) -> Self { @@ -4363,6 +4374,8 @@ impl From for pb::AskrenelistlayersLayers { disabled_channels: c.disabled_channels.map(|arr| arr.into_iter().map(|i| i.to_string()).collect()).unwrap_or(vec![]), // Rule #3 // Field: AskRene-ListLayers.layers[].disabled_nodes[] disabled_nodes: c.disabled_nodes.into_iter().map(|i| i.serialize().to_vec()).collect(), // Rule #3 for type pubkey + // Field: AskRene-ListLayers.layers[].impressions[] + impressions: c.impressions.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 layer: c.layer, // Rule #2 for type string // Field: AskRene-ListLayers.layers[].node_biases[] node_biases: c.node_biases.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 @@ -4430,6 +4443,17 @@ impl From for pb::Askrenecre } } +#[allow(unused_variables)] +impl From for pb::AskrenecreatelayerLayersImpressions { + fn from(c: responses::AskrenecreatelayerLayersImpressions) -> Self { + Self { + amount_msat: Some(c.amount_msat.into()), // Rule #2 for type msat + short_channel_id_dir: c.short_channel_id_dir.to_string(), // Rule #2 for type short_channel_id_dir + timestamp: c.timestamp, // Rule #2 for type u64 + } + } +} + #[allow(unused_variables)] impl From for pb::AskrenecreatelayerLayersNodeBiases { fn from(c: responses::AskrenecreatelayerLayersNodeBiases) -> Self { @@ -4459,6 +4483,8 @@ impl From for pb::AskrenecreatelayerLayers disabled_channels: c.disabled_channels.map(|arr| arr.into_iter().map(|i| i.to_string()).collect()).unwrap_or(vec![]), // Rule #3 // Field: AskRene-Create-Layer.layers[].disabled_nodes[] disabled_nodes: c.disabled_nodes.into_iter().map(|i| i.serialize().to_vec()).collect(), // Rule #3 for type pubkey + // Field: AskRene-Create-Layer.layers[].impressions[] + impressions: c.impressions.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 layer: c.layer, // Rule #2 for type string // Field: AskRene-Create-Layer.layers[].node_biases[] node_biases: c.node_biases.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 @@ -4577,12 +4603,26 @@ impl From for pb::Askreneinformchann } } +#[allow(unused_variables)] +impl From for pb::AskreneinformchannelImpressions { + fn from(c: responses::AskreneinformchannelImpressions) -> Self { + Self { + amount_msat: Some(c.amount_msat.into()), // Rule #2 for type msat + layer: c.layer, // Rule #2 for type string + short_channel_id_dir: c.short_channel_id_dir.to_string(), // Rule #2 for type short_channel_id_dir + timestamp: c.timestamp, // Rule #2 for type u64 + } + } +} + #[allow(unused_variables)] impl From for pb::AskreneinformchannelResponse { fn from(c: responses::AskreneinformchannelResponse) -> Self { Self { // Field: AskRene-Inform-Channel.constraints[] constraints: c.constraints.into_iter().map(|i| i.into()).collect(), // Rule #3 for type AskreneinformchannelConstraints + // Field: AskRene-Inform-Channel.impressions[] + impressions: c.impressions.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 } } } diff --git a/cln-rpc/src/model.rs b/cln-rpc/src/model.rs index 1f336f7e5a2f..4ba99b9497f8 100644 --- a/cln-rpc/src/model.rs +++ b/cln-rpc/src/model.rs @@ -4740,7 +4740,7 @@ pub mod requests { "askrene-disable-node" } } - /// ['Whether this payment passed (implying capacity of at least that amount), failed (implying maximum capacity of one msat less), or succeeded (implying capacity has been reduced in this direction)'] + /// ['Whether this payment passed (implying capacity of at least that amount), failed (implying maximum capacity of one msat less), or succeeded (implying capacity has been reduced in this direction)', 'If `succeeded`, then an `impression` is created and returned, otherwise a `constraint` is created and returned.'] #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] #[allow(non_camel_case_types)] pub enum AskreneinformchannelInform { @@ -12404,6 +12404,13 @@ pub mod responses { pub short_channel_id_dir: ShortChannelIdDir, } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct AskrenelistlayersLayersImpressions { + pub amount_msat: Amount, + pub short_channel_id_dir: ShortChannelIdDir, + pub timestamp: u64, + } + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AskrenelistlayersLayersNodeBiases { #[serde(skip_serializing_if = "Option::is_none")] @@ -12457,6 +12464,8 @@ pub mod responses { #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub disabled_channels: Option>, #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub impressions: Option>, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub node_biases: Option>, pub channel_updates: Vec, pub constraints: Vec, @@ -12492,6 +12501,13 @@ pub mod responses { pub short_channel_id_dir: ShortChannelIdDir, } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct AskrenecreatelayerLayersImpressions { + pub amount_msat: Amount, + pub short_channel_id_dir: ShortChannelIdDir, + pub timestamp: u64, + } + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AskrenecreatelayerLayersNodeBiases { #[serde(skip_serializing_if = "Option::is_none")] @@ -12541,6 +12557,8 @@ pub mod responses { #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub disabled_channels: Option>, #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub impressions: Option>, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub node_biases: Option>, pub channel_updates: Vec, pub constraints: Vec, @@ -12694,6 +12712,14 @@ pub mod responses { } } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct AskreneinformchannelImpressions { + pub amount_msat: Amount, + pub layer: String, + pub short_channel_id_dir: ShortChannelIdDir, + pub timestamp: u64, + } + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AskreneinformchannelConstraints { #[serde(skip_serializing_if = "Option::is_none")] @@ -12707,6 +12733,8 @@ pub mod responses { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct AskreneinformchannelResponse { + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub impressions: Option>, pub constraints: Vec, } diff --git a/contrib/msggen/msggen/schema.json b/contrib/msggen/msggen/schema.json index 8f83713d92be..e2875359e7f0 100644 --- a/contrib/msggen/msggen/schema.json +++ b/contrib/msggen/msggen/schema.json @@ -753,7 +753,8 @@ "disabled_nodes", "created_channels", "channel_updates", - "constraints" + "constraints", + "impressions" ], "properties": { "layer": { @@ -904,6 +905,39 @@ } } }, + "impressions": { + "added": "v26.09", + "type": "array", + "items": { + "type": "object", + "required": [ + "short_channel_id_dir", + "timestamp", + "amount_msat" + ], + "additionalProperties": false, + "properties": { + "short_channel_id_dir": { + "type": "short_channel_id_dir", + "description": [ + "The short channel id and direction." + ] + }, + "timestamp": { + "type": "u64", + "description": [ + "The UNIX timestamp when this constraint was created." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "The amount we successfully sent through this channel (implying its capacity is that much less, and the reverse direction that much more)" + ] + } + } + } + }, "biases": { "type": "array", "items": { @@ -1031,6 +1065,7 @@ "created_channels": [], "channel_updates": [], "constraints": [], + "impressions": [], "biases": [], "node_biases": [] } @@ -1145,14 +1180,16 @@ "succeeded" ], "description": [ - "Whether this payment passed (implying capacity of at least that amount), failed (implying maximum capacity of one msat less), or succeeded (implying capacity has been reduced in this direction)" + "Whether this payment passed (implying capacity of at least that amount), failed (implying maximum capacity of one msat less), or succeeded (implying capacity has been reduced in this direction)", + "If `succeeded`, then an `impression` is created and returned, otherwise a `constraint` is created and returned." ] } } }, "response": { "required": [ - "constraints" + "constraints", + "impressions" ], "additionalProperties": false, "properties": { @@ -1199,6 +1236,46 @@ } } } + }, + "impressions": { + "added": "v26.09", + "type": "array", + "items": { + "type": "object", + "required": [ + "layer", + "short_channel_id_dir", + "timestamp", + "amount_msat" + ], + "additionalProperties": false, + "properties": { + "short_channel_id_dir": { + "type": "short_channel_id_dir", + "description": [ + "The short channel id and direction." + ] + }, + "layer": { + "type": "string", + "description": [ + "The name of the layer to apply this change to." + ] + }, + "timestamp": { + "type": "u64", + "description": [ + "The UNIX timestamp when this constraint was created." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "The amount we successfully sent through this channel (implying its capacity is that much less, and the reverse direction that much more)" + ] + } + } + } } } }, @@ -1278,6 +1355,7 @@ "disabled_nodes", "created_channels", "channel_updates", + "impressions", "constraints" ], "properties": { @@ -1440,6 +1518,39 @@ } } }, + "impressions": { + "added": "v26.09", + "type": "array", + "items": { + "type": "object", + "required": [ + "short_channel_id_dir", + "timestamp", + "amount_msat" + ], + "additionalProperties": false, + "properties": { + "short_channel_id_dir": { + "type": "short_channel_id_dir", + "description": [ + "The short channel id and direction." + ] + }, + "timestamp": { + "type": "u64", + "description": [ + "The UNIX timestamp when this constraint was created." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "The amount we successfully sent through this channel (implying its capacity is that much less, and the reverse direction that much more)" + ] + } + } + } + }, "biases": { "type": "array", "items": { diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py index 1ba734f0e396..6953a66d17b9 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py @@ -25,7 +25,7 @@ from pyln.grpc import primitives_pb2 as primitives__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xb1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x03 \x01(\x0c\x12\x11\n\tnum_peers\x18\x04 \x01(\r\x12\x1c\n\x14num_pending_channels\x18\x05 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x06 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\rlightning_dir\x18\t \x01(\t\x12\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\x00\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0b \x01(\r\x12\x0f\n\x07network\x18\x0c \x01(\t\x12(\n\x13\x66\x65\x65s_collected_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x07\x61\x64\x64ress\x18\x0e \x03(\x0b\x32\x13.cln.GetinfoAddress\x12$\n\x07\x62inding\x18\x0f \x03(\x0b\x32\x13.cln.GetinfoBinding\x12\"\n\x15warning_bitcoind_sync\x18\x10 \x01(\tH\x01\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x02\x88\x01\x01\x42\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xc9\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cnum_channels\x18\x08 \x01(\rB\x0b\n\t_featuresB\x0e\n\x0c_remote_addr\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\x97\x02\n\x11ListfundsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12$\n\x0four_amount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x04 \x01(\x0c\x12\x16\n\x0e\x66unding_output\x18\x05 \x01(\r\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12 \n\x05state\x18\x07 \x01(\x0e\x32\x11.cln.ChannelState\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\t \x01(\x0c\x42\x13\n\x11_short_channel_id\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\x96\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\xe6\x02\n\x0cSendpayRoute\x12\x0f\n\x02id\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07\x63hannel\x18\x04 \x01(\tH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\x07 \x01(\x0cH\x05\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\t \x01(\rH\x07\x88\x01\x01\x42\x05\n\x03_idB\x08\n\x06_delayB\n\n\x08_channelB\x0e\n\x0c_amount_msatB\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_node_id_outB\x12\n\x10_amount_out_msatB\x0b\n\t_cltv_out\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xac\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1c\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xe6\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\t\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xcf\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x07\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\n\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"\x8a\x01\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\x12\x1f\n\x12\x63\x61n_create_penalty\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x15\x62\x61\x63ked_up_channel_ids\x18\x03 \x03(\x0c\x42\x15\n\x13_can_create_penalty\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"x\n\x0fRecoverResponse\x12\x32\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResult\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\xfe\x02\n\x0fInvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x16\n\x0epayment_secret\x18\x03 \x01(\x0c\x12\x12\n\nexpires_at\x18\x04 \x01(\x04\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x15\n\rcreated_index\x18\n \x01(\x04\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mpp\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xbc\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0b\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xd0\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0e \x01(\x04\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\x08\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xe5\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\n\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\xc7\x04\n\nPayRequest\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12\x1b\n\nriskfactor\x18\x08 \x01(\x01\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\n \x03(\tB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x06\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x0c \x01(\tB\x02\x18\x01H\x07\x88\x01\x01\x12)\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x08\x88\x01\x01\x12\x1e\n\rlocalinvreqid\x18\x0e \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12*\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\xab\x03\n\x0bPayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12.\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatusB\x02\x18\x01\">\n\tPayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"*\n\x10ListnodesRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListnodesResponse\x12\"\n\x05nodes\x18\x01 \x03(\x0b\x32\x13.cln.ListnodesNodes\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xe8\x01\n\x17ListnodesNodesAddresses\x12K\n\titem_type\x18\x01 \x01(\x0e\x32\x38.cln.ListnodesNodesAddresses.ListnodesNodesAddressesType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"P\n\x1bListnodesNodesAddressesType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"g\n\x15WaitanyinvoiceRequest\x12\x1a\n\rlastpay_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x10\n\x0e_lastpay_indexB\n\n\x08_timeout\"\xbc\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\t\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xad\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\t\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\xf7\x04\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0f \x01(\x04\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb9\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12!\n\x07satoshi\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xd7\x03\n\x0eKeysendRequest\x12\x17\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12/\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListB\x02\x18\x01H\x05\x88\x01\x01\x12*\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamB\x02\x18\x01H\x06\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\x9a\x03\n\x0fKeysendResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x36\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatusB\x02\x18\x01\"!\n\rKeysendStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"\xa4\x03\n\x0f\x46undpsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x14\n\x07minconf\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nnonwrapped\x18\t \x01(\x08H\x05\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\x13\n\x11_excess_as_changeB\r\n\x0b_nonwrappedB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10\x46undpsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.FundpsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14\x46undpsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"A\n\x0fSendpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa0\x03\n\x0fUtxopsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xd1\x1a\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x43\n\x0c\x63hannel_type\x18\x05 \x01(\x0b\x32(.cln.ListpeerchannelsChannelsChannelTypeH\x01\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x02\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\t\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\x0b\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0c\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\r\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\x0e\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0f\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x15\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12@\n\rstate_changes\x18* \x03(\x0b\x32).cln.ListpeerchannelsChannelsStateChanges\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18? \x03(\tB\x0f\n\r_scratch_txidB\x0f\n\r_channel_typeB\n\n\x08_feerateB\x08\n\x06_ownerB\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\x12\n\x10_initial_feerateB\x0f\n\r_last_feerateB\x0f\n\r_next_feerateB\x10\n\x0e_next_fee_stepB\x0b\n\t_close_toB\n\n\x08_privateB\t\n\x07_closerB\n\n\x08_fundingB\r\n\x0b_to_us_msatB\x11\n\x0f_min_to_us_msatB\x11\n\x0f_max_to_us_msatB\r\n\x0b_total_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x12\n\x10_dust_limit_msatB\x15\n\x13_their_reserve_msatB\x13\n\x11_our_reserve_msatB\x11\n\x0f_spendable_msatB\x12\n\x10_receivable_msatB\x17\n\x15_minimum_htlc_in_msatB\x18\n\x16_minimum_htlc_out_msatB\x18\n\x16_maximum_htlc_out_msatB\x16\n\x14_their_to_self_delayB\x14\n\x12_our_to_self_delayB\x15\n\x13_max_accepted_htlcsB\x08\n\x06_aliasB\x16\n\x14_in_payments_offeredB\x12\n\x10_in_offered_msatB\x18\n\x16_in_payments_fulfilledB\x14\n\x12_in_fulfilled_msatB\x17\n\x15_out_payments_offeredB\x13\n\x11_out_offered_msatB\x19\n\x17_out_payments_fulfilledB\x15\n\x13_out_fulfilled_msatB\x10\n\x0e_close_to_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"]\n\x1dListpeerchannelsChannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"X\n#ListpeerchannelsChannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"\xf4\x01\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\rsplice_amount\x18\x07 \x01(\x12\x42\x0f\n\r_scratch_txid\"\xf0\x02\n$ListpeerchannelsChannelsStateChanges\x12\x11\n\ttimestamp\x18\x01 \x01(\t\x12$\n\told_state\x18\x02 \x01(\x0e\x32\x11.cln.ChannelState\x12$\n\tnew_state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x62\n\x05\x63\x61use\x18\x04 \x01(\x0e\x32S.cln.ListpeerchannelsChannelsStateChanges.ListpeerchannelsChannelsStateChangesCause\x12\x0f\n\x07message\x18\x05 \x01(\t\"t\n)ListpeerchannelsChannelsStateChangesCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"3\n\x19ListclosedchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"[\n\x1aListclosedchannelsResponse\x12=\n\x0e\x63losedchannels\x18\x01 \x03(\x0b\x32%.cln.ListclosedchannelsClosedchannels\"\xae\x0b\n ListclosedchannelsClosedchannels\x12\x14\n\x07peer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12>\n\x05\x61lias\x18\x04 \x01(\x0b\x32*.cln.ListclosedchannelsClosedchannelsAliasH\x02\x88\x01\x01\x12 \n\x06opener\x18\x05 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x06 \x01(\x0e\x32\x10.cln.ChannelSideH\x03\x88\x01\x01\x12\x0f\n\x07private\x18\x07 \x01(\x08\x12K\n\x0c\x63hannel_type\x18\x08 \x01(\x0b\x32\x30.cln.ListclosedchannelsClosedchannelsChannelTypeH\x04\x88\x01\x01\x12\x1f\n\x17total_local_commitments\x18\t \x01(\x04\x12 \n\x18total_remote_commitments\x18\n \x01(\x04\x12\x18\n\x10total_htlcs_sent\x18\x0b \x01(\x04\x12\x14\n\x0c\x66unding_txid\x18\x0c \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\r \x01(\r\x12\x0e\n\x06leased\x18\x0e \x01(\x08\x12/\n\x15\x66unding_fee_paid_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12/\n\x15\x66unding_fee_rcvd_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12-\n\x13\x66unding_pushed_msat\x18\x11 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x1f\n\ntotal_msat\x18\x12 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x66inal_to_us_msat\x18\x13 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emin_to_us_msat\x18\x14 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emax_to_us_msat\x18\x15 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14last_commitment_txid\x18\x16 \x01(\x0cH\x08\x88\x01\x01\x12\x32\n\x18last_commitment_fee_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0c\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x0f\n\r_channel_typeB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"`\n+ListclosedchannelsClosedchannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\xbd.\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\x39\n\x10offer_recurrence\x18\x12 \x01(\x0b\x32\x1a.cln.DecodeOfferRecurrenceH\x0c\x88\x01\x01\x12\x37\n\x12unknown_offer_tlvs\x18\x13 \x03(\x0b\x32\x1b.cln.DecodeUnknownOfferTlvs\x12.\n!warning_invalid_offer_description\x18\x15 \x01(\tH\r\x88\x01\x01\x12.\n!warning_missing_offer_description\x18\x16 \x01(\tH\x0e\x88\x01\x01\x12+\n\x1ewarning_invalid_offer_currency\x18\x17 \x01(\tH\x0f\x88\x01\x01\x12)\n\x1cwarning_invalid_offer_issuer\x18\x18 \x01(\tH\x10\x88\x01\x01\x12\x1c\n\x0finvreq_metadata\x18\x19 \x01(\x0cH\x11\x88\x01\x01\x12\x1c\n\x0finvreq_payer_id\x18\x1a \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0cinvreq_chain\x18\x1b \x01(\x0cH\x13\x88\x01\x01\x12,\n\x12invreq_amount_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12\x1c\n\x0finvreq_features\x18\x1d \x01(\x0cH\x15\x88\x01\x01\x12\x1c\n\x0finvreq_quantity\x18\x1e \x01(\x04H\x16\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x1f \x01(\tH\x17\x88\x01\x01\x12&\n\x19invreq_recurrence_counter\x18 \x01(\rH\x18\x88\x01\x01\x12$\n\x17invreq_recurrence_start\x18! \x01(\rH\x19\x88\x01\x01\x12J\n\x1cunknown_invoice_request_tlvs\x18\" \x03(\x0b\x32$.cln.DecodeUnknownInvoiceRequestTlvs\x12,\n\x1fwarning_missing_invreq_metadata\x18# \x01(\tH\x1a\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_payer_id\x18$ \x01(\tH\x1b\x88\x01\x01\x12.\n!warning_invalid_invreq_payer_note\x18% \x01(\tH\x1c\x88\x01\x01\x12\x36\n)warning_missing_invoice_request_signature\x18& \x01(\tH\x1d\x88\x01\x01\x12\x36\n)warning_invalid_invoice_request_signature\x18\' \x01(\tH\x1e\x88\x01\x01\x12.\n\rinvoice_paths\x18( \x03(\x0b\x32\x17.cln.DecodeInvoicePaths\x12\x1f\n\x12invoice_created_at\x18) \x01(\x04H\x1f\x88\x01\x01\x12$\n\x17invoice_relative_expiry\x18* \x01(\rH \x88\x01\x01\x12!\n\x14invoice_payment_hash\x18+ \x01(\x0cH!\x88\x01\x01\x12-\n\x13invoice_amount_msat\x18, \x01(\x0b\x32\x0b.cln.AmountH\"\x88\x01\x01\x12\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH#\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH$\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H%\x88\x01\x01\x12;\n\x14unknown_invoice_tlvs\x18\x31 \x03(\x0b\x32\x1d.cln.DecodeUnknownInvoiceTlvs\x12*\n\x1dwarning_missing_invoice_paths\x18\x32 \x01(\tH&\x88\x01\x01\x12/\n\"warning_missing_invoice_blindedpay\x18\x33 \x01(\tH\'\x88\x01\x01\x12/\n\"warning_missing_invoice_created_at\x18\x34 \x01(\tH(\x88\x01\x01\x12\x31\n$warning_missing_invoice_payment_hash\x18\x35 \x01(\tH)\x88\x01\x01\x12+\n\x1ewarning_missing_invoice_amount\x18\x36 \x01(\tH*\x88\x01\x01\x12\x38\n+warning_missing_invoice_recurrence_basetime\x18\x37 \x01(\tH+\x88\x01\x01\x12,\n\x1fwarning_missing_invoice_node_id\x18\x38 \x01(\tH,\x88\x01\x01\x12.\n!warning_missing_invoice_signature\x18\x39 \x01(\tH-\x88\x01\x01\x12.\n!warning_invalid_invoice_signature\x18: \x01(\tH.\x88\x01\x01\x12\'\n\tfallbacks\x18; \x03(\x0b\x32\x14.cln.DecodeFallbacks\x12\x17\n\ncreated_at\x18< \x01(\x04H/\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18= \x01(\x04H0\x88\x01\x01\x12\x12\n\x05payee\x18> \x01(\x0cH1\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18? \x01(\x0cH2\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18@ \x01(\x0cH3\x88\x01\x01\x12\"\n\x15min_final_cltv_expiry\x18\x41 \x01(\rH4\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x42 \x01(\x0cH5\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x43 \x01(\x0cH6\x88\x01\x01\x12\x1f\n\x05\x65xtra\x18\x45 \x03(\x0b\x32\x10.cln.DecodeExtra\x12\x16\n\tunique_id\x18\x46 \x01(\tH7\x88\x01\x01\x12\x14\n\x07version\x18G \x01(\tH8\x88\x01\x01\x12\x13\n\x06string\x18H \x01(\tH9\x88\x01\x01\x12-\n\x0crestrictions\x18I \x03(\x0b\x32\x17.cln.DecodeRestrictions\x12&\n\x19warning_rune_invalid_utf8\x18J \x01(\tH:\x88\x01\x01\x12\x10\n\x03hex\x18K \x01(\x0cH;\x88\x01\x01\x12\x16\n\tdecrypted\x18L \x01(\x0cH<\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH=\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH>\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH?\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tH@\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHA\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHB\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHC\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHD\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHE\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHF\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHG\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHH\x88\x01\x01\x12%\n\x18invreq_recurrence_cancel\x18Z \x01(\x08HI\x88\x01\x01\x12=\n0warning_invreq_recurrence_cancel_without_counter\x18[ \x01(\tHJ\x88\x01\x01\x12?\n2warning_invreq_recurrence_cancel_with_zero_counter\x18\\ \x01(\tHK\x88\x01\x01\x12\x1b\n\x0eproof_preimage\x18] \x01(\x0cHL\x88\x01\x01\x12\x1a\n\x12proof_omitted_tlvs\x18^ \x03(\x04\x12\x1c\n\x14proof_missing_hashes\x18_ \x03(\x0c\x12\x19\n\x11proof_leaf_hashes\x18` \x03(\x0c\x12\x17\n\nproof_note\x18\x61 \x01(\tHM\x88\x01\x01\x12\x1c\n\x0fproof_signature\x18\x62 \x01(\tHN\x88\x01\x01\x12\x42\n\x18unknown_payer_proof_tlvs\x18\x63 \x03(\x0b\x32 .cln.DecodeUnknownPayerProofTlvs\"\x9b\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\x12\x16\n\x12\x42OLT12_PAYER_PROOF\x10\x06\x42\x0b\n\t_offer_idB\x11\n\x0f_offer_metadataB\x11\n\x0f_offer_currencyB!\n\x1f_warning_unknown_offer_currencyB\x16\n\x14_currency_minor_unitB\x0f\n\r_offer_amountB\x14\n\x12_offer_amount_msatB\x14\n\x12_offer_descriptionB\x0f\n\r_offer_issuerB\x11\n\x0f_offer_featuresB\x18\n\x16_offer_absolute_expiryB\x15\n\x13_offer_quantity_maxB\x13\n\x11_offer_recurrenceB$\n\"_warning_invalid_offer_descriptionB$\n\"_warning_missing_offer_descriptionB!\n\x1f_warning_invalid_offer_currencyB\x1f\n\x1d_warning_invalid_offer_issuerB\x12\n\x10_invreq_metadataB\x12\n\x10_invreq_payer_idB\x0f\n\r_invreq_chainB\x15\n\x13_invreq_amount_msatB\x12\n\x10_invreq_featuresB\x12\n\x10_invreq_quantityB\x14\n\x12_invreq_payer_noteB\x1c\n\x1a_invreq_recurrence_counterB\x1a\n\x18_invreq_recurrence_startB\"\n _warning_missing_invreq_metadataB\"\n _warning_missing_invreq_payer_idB$\n\"_warning_invalid_invreq_payer_noteB,\n*_warning_missing_invoice_request_signatureB,\n*_warning_invalid_invoice_request_signatureB\x15\n\x13_invoice_created_atB\x1a\n\x18_invoice_relative_expiryB\x17\n\x15_invoice_payment_hashB\x16\n\x14_invoice_amount_msatB\x13\n\x11_invoice_featuresB\x12\n\x10_invoice_node_idB\x1e\n\x1c_invoice_recurrence_basetimeB \n\x1e_warning_missing_invoice_pathsB%\n#_warning_missing_invoice_blindedpayB%\n#_warning_missing_invoice_created_atB\'\n%_warning_missing_invoice_payment_hashB!\n\x1f_warning_missing_invoice_amountB.\n,_warning_missing_invoice_recurrence_basetimeB\"\n _warning_missing_invoice_node_idB$\n\"_warning_missing_invoice_signatureB$\n\"_warning_invalid_invoice_signatureB\r\n\x0b_created_atB\t\n\x07_expiryB\x08\n\x06_payeeB\x0f\n\r_payment_hashB\x13\n\x11_description_hashB\x18\n\x16_min_final_cltv_expiryB\x11\n\x0f_payment_secretB\x13\n\x11_payment_metadataB\x0c\n\n_unique_idB\n\n\x08_versionB\t\n\x07_stringB\x1c\n\x1a_warning_rune_invalid_utf8B\x06\n\x04_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalidB\x1b\n\x19_invreq_recurrence_cancelB3\n1_warning_invreq_recurrence_cancel_without_counterB5\n3_warning_invreq_recurrence_cancel_with_zero_counterB\x11\n\x0f_proof_preimageB\r\n\x0b_proof_noteB\x12\n\x10_proof_signature\"(\n\x0b\x44\x65\x63odeExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\xc4\x01\n\x0f\x44\x65\x63odeFallbacks\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42\x07\n\x05_addr\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xa6\x02\n\x12\x44\x65\x63odeInvoicePaths\x12)\n\x04path\x18\x01 \x03(\x0b\x32\x1b.cln.DecodeInvoicePathsPath\x12/\n\x07payinfo\x18\x02 \x01(\x0b\x32\x1e.cln.DecodeInvoicePathsPayinfo\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_path_keyB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scid\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\x97\x02\n\x19\x44\x65\x63odeInvoicePathsPayinfo\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\"\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x19\n\x11\x63ltv_expiry_delta\x18\x06 \x01(\rB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msat\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"\xf3\x01\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xf1\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\'\n\x04path\x18\x03 \x03(\x0b\x32\x19.cln.DecodeOfferPathsPath\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"Q\n\x14\x44\x65\x63odeOfferPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xab\x02\n\x15\x44\x65\x63odeOfferRecurrence\x12\x11\n\ttime_unit\x18\x01 \x01(\r\x12\x1d\n\x10\x63ompulsory_field\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0etime_unit_name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06period\x18\x04 \x01(\r\x12\x15\n\x08\x62\x61setime\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12;\n\tpaywindow\x18\x06 \x01(\x0b\x32#.cln.DecodeOfferRecurrencePaywindowH\x03\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\x13\n\x11_compulsory_fieldB\x11\n\x0f_time_unit_nameB\x0b\n\t_basetimeB\x0c\n\n_paywindowB\x08\n\x06_limit\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\";\n\x12\x44\x65\x63odeRestrictions\x12\x14\n\x0c\x61lternatives\x18\x01 \x03(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"S\n\x1f\x44\x65\x63odeUnknownInvoiceRequestTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"L\n\x18\x44\x65\x63odeUnknownInvoiceTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"J\n\x16\x44\x65\x63odeUnknownOfferTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"O\n\x1b\x44\x65\x63odeUnknownPayerProofTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xb4\x05\n\x0e\x44\x65lpayPayments\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\n\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdc\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdb\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"\x84\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x84\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\xfb\x03\n\x12\x46undchannelRequest\x12 \n\x06\x61mount\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12!\n\x07reserve\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xce\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xd6\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1b\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12!\n\x07reserve\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\x8c\x02\n\x0fGetrouteRequest\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\nriskfactor\x18\x03 \x01(\x04\x42\x02\x18\x01\x12\x15\n\x04\x63ltv\x18\x04 \x01(\rB\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x66romid\x18\x05 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x66uzzpercent\x18\x06 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\x07 \x03(\tB\x02\x18\x01\x12\x18\n\x07maxhops\x18\x08 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x42\x07\n\x05_cltvB\t\n\x07_fromidB\x0e\n\x0c_fuzzpercentB\n\n\x08_maxhops\"9\n\x10GetrouteResponse\x12%\n\x05route\x18\x01 \x03(\x0b\x32\x12.cln.GetrouteRouteB\x02\x18\x01\"\xe1\x01\n\rGetrouteRoute\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x13\n\x07\x63hannel\x18\x02 \x01(\tB\x02\x18\x01\x12\x15\n\tdirection\x18\x03 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x11\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01\x12\x38\n\x05style\x18\x06 \x01(\x0e\x32%.cln.GetrouteRoute.GetrouteRouteStyleB\x02\x18\x01\"!\n\x12GetrouteRouteStyle\x12\x0b\n\x03TLV\x10\x00\x1a\x02\x08\x01\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"L\n\x12ListforwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\x9d\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x07\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\x08\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\t\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xd8\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\xff\x02\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x06\x61mount\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12%\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12!\n\x07reserve\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xb2\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12@\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelType\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xe2\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\x0e\x66ronting_nodes\x18\x0f \x03(\x0c\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\xbc\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_force_paths\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\x9e\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1b\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x12\n\x10_funding_feerate\"\xed\x01\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x35\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9f\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1b\n\x06\x61mount\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\xed\x01\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x35\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelType\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\x95\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x37\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"@\n\x14RenepaystatusRequest\x12\x1a\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x42\x0c\n\n_invstring\"K\n\x15RenepaystatusResponse\x12\x32\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatusB\x02\x18\x01\"\x9a\x04\n\x16RenepaystatusPaystatus\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12!\n\x10payment_preimage\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x13\n\x07groupid\x18\x05 \x01(\rB\x02\x18\x01\x12\x16\n\x05parts\x18\x06 \x01(\rB\x02\x18\x01H\x01\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12.\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x02\x88\x01\x01\x12L\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\n \x01(\x0c\x42\x02\x18\x01H\x03\x88\x01\x01\x12\x11\n\x05notes\x18\x0b \x03(\tB\x02\x18\x01\"Q\n\x1cRenepaystatusPaystatusStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xfe\x02\n\x0eRenepayRequest\x12\x15\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01\x12)\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12$\n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x01\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x04 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x16\n\x05label\x18\x07 \x01(\tB\x02\x18\x01H\x05\x88\x01\x01\x12\x1f\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\t \x03(\tB\x02\x18\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xdd\x03\n\x0fRenepayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x18\n\x0cpayment_hash\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x03 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x04 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x36\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\t \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\n \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x18\n\x07groupid\x18\x0b \x01(\x04\x42\x02\x18\x01H\x03\x88\x01\x01\"B\n\rRenepayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xb8\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x15\n\rcreated_index\x18\x08 \x01(\x04\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\xaa\x02\n\x11SetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x07\x66\x65\x65\x62\x61se\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x66\x65\x65ppm\x18\x03 \x01(\rH\x01\x88\x01\x01\x12!\n\x07htlcmin\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12!\n\x07htlcmax\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x19\n\x0c\x65nforcedelay\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1c\n\x0fignorefeelimits\x18\x07 \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_feebaseB\t\n\x07_feeppmB\n\n\x08_htlcminB\n\n\x08_htlcmaxB\x0f\n\r_enforcedelayB\x12\n\x10_ignorefeelimits\"?\n\x12SetchannelResponse\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.cln.SetchannelChannels\"\xaf\x03\n\x12SetchannelChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\x12*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x19\n\x11ignore_fee_limits\x18\n \x01(\x08\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_high\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xda\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x03\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x05\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07sources\x18\n \x03(\t\x12\x12\n\nvalues_str\x18\x0b \x03(\tB\t\n\x07_sourceB\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"2\n\x0fSpliceinRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\"b\n\x10SpliceinResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\x8b\x01\n\x10SpliceoutRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_destinationB\x10\n\x0e_force_feerate\"c\n\x11SpliceoutResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"~\n\x15UpgradewalletResponse\x12\x15\n\rupgraded_outs\x18\x01 \x01(\x04\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"\xf4\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12*\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsB\x02\x18\x01H\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\xd0\x05\n\x0bWaitDetails\x12;\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusB\x02\x18\x01H\x00\x88\x01\x01\x12\x16\n\x05label\x18\x02 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\x04 \x01(\tB\x02\x18\x01H\x03\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\x05 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x17\n\x06partid\x18\x06 \x01(\x04\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x18\n\x07groupid\x18\x07 \x01(\x04\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x1d\n\x0cpayment_hash\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x07\x88\x01\x01\x12\x1b\n\nin_channel\x18\t \x01(\tB\x02\x18\x01H\x08\x88\x01\x01\x12\x1b\n\nin_htlc_id\x18\n \x01(\x04\x42\x02\x18\x01H\t\x88\x01\x01\x12%\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x12\x1c\n\x0bout_channel\x18\x0c \x01(\tB\x02\x18\x01H\x0b\x88\x01\x01\"\xad\x01\n\x11WaitDetailsStatus\x12\x0e\n\x06UNPAID\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x04PAID\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x07\x45XPIRED\x10\x02\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x03\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x04\x1a\x02\x08\x01\x12\x10\n\x08\x43OMPLETE\x10\x05\x1a\x02\x08\x01\x12\x0f\n\x07OFFERED\x10\x06\x1a\x02\x08\x01\x12\x0f\n\x07SETTLED\x10\x07\x1a\x02\x08\x01\x12\x14\n\x0cLOCAL_FAILED\x10\x08\x1a\x02\x08\x01\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\x94.\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12S\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingB\x02\x18\x01H\x15\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x16\x88\x01\x01\x12V\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageH\x17\x88\x01\x01\x12M\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsH\x18\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x19\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1a\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1b\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1c\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1d\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH\x1e\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH\x1f\x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH \x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH!\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH\"\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH#\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH$\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH%\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH&\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH\'\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH(\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH)\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH*\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH+\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH,\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH-\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH.\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH/\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH0\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH1\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH2\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH3\x88\x01\x01\x12?\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmH4\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH5\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH6\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH7\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH8\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH9\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH:\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH;\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH<\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH=\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsH>\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsH?\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeH@\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHA\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHB\x88\x01\x01\x12R\n\x17\x63urrencyrate_add_source\x18J \x01(\x0b\x32,.cln.ListconfigsConfigsCurrencyrateaddsourceHC\x88\x01\x01\x12Z\n\x1b\x63urrencyrate_disable_source\x18K \x01(\x0b\x32\x30.cln.ListconfigsConfigsCurrencyratedisablesourceHD\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peersB\x1a\n\x18_currencyrate_add_sourceB\x1e\n\x1c_currencyrate_disable_source\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\"n\n\'ListconfigsConfigsCurrencyrateaddsource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"r\n+ListconfigsConfigsCurrencyratedisablesource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsEncryptedhsm\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n%ListconfigsConfigsExperimentalanchors\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n&ListconfigsConfigsExperimentalsplicing\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\r\n\x0bStopRequest\"a\n\x0cStopResponse\x12,\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResult\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xcd\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\x12\x19\n\x0c\x63urrencyrate\x18\x11 \x01(\x01H\t\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_idB\x0f\n\r_currencyrate\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\xb0\x01\n\x11\x42kprreportRequest\x12\x13\n\x06\x66ormat\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07headers\x18\x02 \x03(\t\x12\x13\n\x06\x65scape\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\rH\x03\x88\x01\x01\x42\t\n\x07_formatB\t\n\x07_escapeB\r\n\x0b_start_timeB\x0b\n\t_end_time\"$\n\x12\x42kprreportResponse\x12\x0e\n\x06report\x18\x01 \x03(\t\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"r\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\x12\x1b\n\x0e\x64\x65v_remove_all\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x11\n\x0f_dev_remove_all\"\x1a\n\x18\x41skreneunreserveResponse\"t\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xaa\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x12\n\npersistent\x18\x05 \x01(\x08\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiases\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xda\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x05 \x01(\t\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x02\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x0c\n\n_timestamp\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xb0\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\"P\n!AskreneremovechannelupdateRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\"$\n\"AskreneremovechannelupdateResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"r\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xe7\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\nfinal_cltv\x18\x07 \x01(\r\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x01\x88\x01\x01\x42\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x88\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x12\n\nfinal_cltv\x18\x04 \x01(\r\"\xd4\x03\n\x13GetroutesRoutesPath\x12)\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12\x1d\n\x0cnext_node_id\x18\x04 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x16\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12(\n\x0e\x61mount_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x17\n\nnode_id_in\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x14\n\x07\x63ltv_in\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\x0c \x01(\rH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0f\n\r_next_node_idB\x08\n\x06_delayB\x11\n\x0f_amount_in_msatB\x12\n\x10_amount_out_msatB\r\n\x0b_node_id_inB\x0e\n\x0c_node_id_outB\n\n\x08_cltv_inB\x0b\n\t_cltv_out\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\x8a\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12K\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInform\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\"Y\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xf5\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x0b \x01(\x0cH\x04\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msatB\x0e\n\x0c_destination\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbb\x03\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x12\n\x05label\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\n \x01(\x0cH\x07\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x0b \x01(\x08H\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_labelB\x10\n\x0e_localinvreqidB\x11\n\x0f_dev_use_shadow\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\xf6\x01\n\x1a\x43lnrestregisterpathRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nrpc_method\x18\x02 \x01(\t\x12H\n\x11rune_restrictions\x18\x03 \x01(\x0b\x32(.cln.ClnrestregisterpathRuneRestrictionsH\x00\x88\x01\x01\x12\x1a\n\rrune_required\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0bhttp_method\x18\x05 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_rune_restrictionsB\x10\n\x0e_rune_requiredB\x0e\n\x0c_http_method\"\x1d\n\x1b\x43lnrestregisterpathResponse\"\xda\x01\n#ClnrestregisterpathRuneRestrictions\x12\x13\n\x06nodeid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x44\n\x06params\x18\x03 \x03(\x0b\x32\x34.cln.ClnrestregisterpathRuneRestrictions.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_nodeidB\t\n\x07_method\",\n\x18ListcurrencyratesRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\"W\n\x19ListcurrencyratesResponse\x12:\n\rcurrencyrates\x18\x01 \x03(\x0b\x32#.cln.ListcurrencyratesCurrencyrates\"@\n\x1eListcurrencyratesCurrencyrates\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x01\":\n\x16\x43urrencyconvertRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x01\x12\x10\n\x08\x63urrency\x18\x02 \x01(\t\"4\n\x17\x43urrencyconvertResponse\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\"G\n\x13\x43urrencyrateRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_source\"$\n\x14\x43urrencyrateResponse\x12\x0c\n\x04rate\x18\x01 \x01(\x01\"\x95\x02\n\x11SendamountRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x17\n\npayer_note\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05label\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_label\"\xa7\x01\n\x12SendamountResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"e\n\x12\x43reateproofRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\x11\n\x04note\x18\x02 \x01(\tH\x00\x88\x01\x01\x12 \n\x07include\x18\x03 \x03(\x0b\x32\x0f.cln.ProofFieldB\x07\n\x05_note\"=\n\x13\x43reateproofResponse\x12&\n\x06proofs\x18\x01 \x03(\x0b\x32\x16.cln.CreateproofProofs\"\xb6\x01\n\x11\x43reateproofProofs\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\x12.\n\x15offer_fields_included\x18\x02 \x03(\x0b\x32\x0f.cln.ProofField\x12/\n\x16invreq_fields_included\x18\x03 \x03(\x0b\x32\x0f.cln.ProofField\x12\x30\n\x17invoice_fields_included\x18\x04 \x03(\x0b\x32\x0f.cln.ProofField\"\xd7\x02\n\x0fXkeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x05 \x03(\t\x12\x16\n\tretry_for\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x36\n\textratlvs\x18\x08 \x03(\x0b\x32#.cln.XkeysendRequest.ExtratlvsEntry\x1a\x30\n\x0e\x45xtratlvsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06_labelB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelay\"\xa5\x01\n\x10XkeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"3\n\x0fGracefulRequest\x12\x14\n\x07timeout\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\"H\n\x10GracefulResponse\x12\x1d\n\x15pending_htlc_expiries\x18\x01 \x03(\r\x12\x15\n\rpending_peers\x18\x02 \x03(\x0c\"\x1e\n\x1cStreamBalanceSnapshotRequest\"\x86\x01\n\x1b\x42\x61lanceSnapshotNotification\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12.\n\x08\x61\x63\x63ounts\x18\x04 \x03(\x0b\x32\x1c.cln.BalanceSnapshotAccounts\"c\n\x17\x42\x61lanceSnapshotAccounts\x12\x12\n\naccount_id\x18\x01 \x01(\t\x12!\n\x0c\x62\x61lance_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x03 \x01(\t\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x1b\n\x19StreamCoinMovementRequest\"\xaf\x0b\n\x18\x43oinMovementNotification\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\x0c\x12\x41\n\titem_type\x18\x04 \x01(\x0e\x32..cln.CoinMovementNotification.CoinMovementType\x12\x1a\n\rcreated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\naccount_id\x18\x06 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\t \x01(\x04\x12\x10\n\x04tags\x18\n \x03(\tB\x02\x18\x01\x12N\n\x0bprimary_tag\x18\x0b \x01(\x0e\x32\x34.cln.CoinMovementNotification.CoinMovementPrimaryTagH\x01\x88\x01\x01\x12\x12\n\nextra_tags\x18\x0c \x03(\t\x12\x19\n\x0cpayment_hash\x18\r \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07part_id\x18\x0e \x01(\x04H\x03\x88\x01\x01\x12\x15\n\x08group_id\x18\x0f \x01(\x04H\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12 \n\x04utxo\x18\x11 \x01(\x0b\x32\r.cln.OutpointH\x06\x88\x01\x01\x12\x14\n\x07peer_id\x18\x12 \x01(\x0cH\x07\x88\x01\x01\x12 \n\x13originating_account\x18\x13 \x01(\tH\x08\x88\x01\x01\x12\x15\n\x04txid\x18\x14 \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12\x1a\n\rspending_txid\x18\x15 \x01(\x0cH\n\x88\x01\x01\x12\x1a\n\tutxo_txid\x18\x16 \x01(\x0c\x42\x02\x18\x01H\x0b\x88\x01\x01\x12\x15\n\x04vout\x18\x17 \x01(\rB\x02\x18\x01H\x0c\x88\x01\x01\x12%\n\x0boutput_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x19\n\x0coutput_count\x18\x19 \x01(\rH\x0e\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\x1a \x01(\rH\x0f\x88\x01\x01\"\xf7\x02\n\x16\x43oinMovementPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x12\x0b\n\x07INVOICE\x10\x10\x12\n\n\x06ROUTED\x10\x11\x12\n\n\x06PUSHED\x10\x12\x12\r\n\tLEASE_FEE\x10\x13\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x14\x12\x0f\n\x0bPENALTY_ADJ\x10\x15\x12\x11\n\rJOURNAL_ENTRY\x10\x16\"2\n\x10\x43oinMovementType\x12\x0f\n\x0b\x43HANNEL_MVT\x10\x00\x12\r\n\tCHAIN_MVT\x10\x01\x42\x10\n\x0e_created_indexB\x0e\n\x0c_primary_tagB\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_idB\x0c\n\n_fees_msatB\x07\n\x05_utxoB\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x07\n\x05_txidB\x10\n\x0e_spending_txidB\x0c\n\n_utxo_txidB\x07\n\x05_voutB\x0e\n\x0c_output_msatB\x0f\n\r_output_countB\x0e\n\x0c_blockheight\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\" \n\x1eStreamDeprecatedOneshotRequest\"6\n\x1d\x44\x65precatedOneshotNotification\x12\x15\n\rdeprecated_ok\x18\x01 \x01(\x08\"\x19\n\x17StreamDisconnectRequest\"$\n\x16\x44isconnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\"\x1b\n\x19StreamForwardEventRequest\"\x88\x05\n\x18\x46orwardEventNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x12\n\nin_channel\x18\x02 \x01(\t\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x08out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12@\n\x06status\x18\x07 \x01(\x0e\x32\x30.cln.ForwardEventNotification.ForwardEventStatus\x12\x15\n\x08\x66\x61ilcode\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x17\n\nfailreason\x18\t \x01(\tH\x04\x88\x01\x01\x12\x43\n\x05style\x18\n \x01(\x0e\x32/.cln.ForwardEventNotification.ForwardEventStyleH\x05\x88\x01\x01\x12\x15\n\rreceived_time\x18\x0b \x01(\x01\x12\x1a\n\rresolved_time\x18\x0c \x01(\x01H\x06\x88\x01\x01\"L\n\x12\x46orwardEventStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"(\n\x11\x46orwardEventStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_out_msatB\x0b\n\t_fee_msatB\x0b\n\t_failcodeB\r\n\x0b_failreasonB\x08\n\x06_styleB\x10\n\x0e_resolved_time\"\x1e\n\x1cStreamInvoiceCreationRequest\"\x8b\x01\n\x1bInvoiceCreationNotification\x12\x1e\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12\r\n\x05label\x18\x03 \x01(\t\x12\x15\n\x08offer_id\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x42\x07\n\x05_msatB\x0b\n\t_offer_id\"\x1d\n\x1bStreamInvoicePaymentRequest\"\x8b\x01\n\x1aInvoicePaymentNotification\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12$\n\x08outpoint\x18\x03 \x01(\x0b\x32\r.cln.OutpointH\x00\x88\x01\x01\x12\r\n\x05label\x18\x04 \x01(\tB\x0b\n\t_outpoint\"\x12\n\x10StreamLogRequest\"\xca\x01\n\x0fLogNotification\x12,\n\x05level\x18\x01 \x01(\x0e\x32\x1d.cln.LogNotification.LogLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"K\n\x08LogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\"&\n$StreamOnionMessageForwardFailRequest\"\xef\x01\n#OnionMessageForwardFailNotification\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x10\n\x08incoming\x18\x02 \x01(\x0c\x12\x10\n\x08path_key\x18\x03 \x01(\x0c\x12\x15\n\x08outgoing\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x19\n\x0cnext_node_id\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19next_short_channel_id_dir\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_outgoingB\x0f\n\r_next_node_idB\x1c\n\x1a_next_short_channel_id_dir\"\"\n StreamOpenChannelPeerSigsRequest\"J\n\x1fOpenChannelPeerSigsNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"\x1c\n\x1aStreamPluginStartedRequest\"V\n\x19PluginStartedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1c\n\x1aStreamPluginStoppedRequest\"V\n\x19PluginStoppedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1d\n\x1bStreamSendPayFailureRequest\"b\n\x1aSendPayFailureNotification\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.cln.SendpayFailureData\"\xc1\t\n\x12SendpayFailureData\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x17\n\ncreated_at\x18\n \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\n\x88\x01\x01\x12\x45\n\x06status\x18\x0c \x01(\x0e\x32\x30.cln.SendpayFailureData.SendpayFailureDataStatusH\x0b\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x0c\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\x10\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\x11\x88\x01\x01\x12\x17\n\nonionreply\x18\x13 \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0c\x65rring_index\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x19\n\x0c\x66\x61ilcodename\x18\x16 \x01(\tH\x15\x88\x01\x01\x12\x18\n\x0b\x65rring_node\x18\x17 \x01(\x0cH\x16\x88\x01\x01\x12\x1b\n\x0e\x65rring_channel\x18\x18 \x01(\tH\x17\x88\x01\x01\x12\x1d\n\x10\x65rring_direction\x18\x19 \x01(\rH\x18\x88\x01\x01\x12\x18\n\x0braw_message\x18\x1a \x01(\x0cH\x19\x88\x01\x01\"A\n\x18SendpayFailureDataStatus\x12\n\n\x06\x46\x41ILED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\x05\n\x03_idB\x0f\n\r_payment_hashB\n\n\x08_groupidB\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_created_atB\x0f\n\r_completed_atB\t\n\x07_statusB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronionB\r\n\x0b_onionreplyB\x0f\n\r_erring_indexB\x0b\n\t_failcodeB\x0f\n\r_failcodenameB\x0e\n\x0c_erring_nodeB\x11\n\x0f_erring_channelB\x13\n\x11_erring_directionB\x0e\n\x0c_raw_message\"\x1d\n\x1bStreamSendPaySuccessRequest\"\xcc\x05\n\x1aSendPaySuccessNotification\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\ncreated_at\x18\n \x01(\x04\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x44\n\x06status\x18\x0c \x01(\x0e\x32\x34.cln.SendPaySuccessNotification.SendpaySuccessStatus\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x05\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x08\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\n\x88\x01\x01\"$\n\x14SendpaySuccessStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x0f\n\r_completed_atB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronion\"\x17\n\x15StreamShutdownRequest\"\x16\n\x14ShutdownNotification\"\x16\n\x14StreamWarningRequest\"\xae\x01\n\x13WarningNotification\x12\x34\n\x05level\x18\x01 \x01(\x0e\x32%.cln.WarningNotification.WarningLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"#\n\x0cWarningLevel\x12\x08\n\x04WARN\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\x19\n\x17StreamPayPartEndRequest\"\xf1\x03\n\x16PayPartEndNotification\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.cln.PayPartEndNotification.PayPartEndStatus\x12\x10\n\x08\x64uration\x18\x02 \x01(\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x17\n\nfailed_msg\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x61iled_node_id\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12$\n\x17\x66\x61iled_short_channel_id\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x66\x61iled_direction\x18\t \x01(\rH\x03\x88\x01\x01\x12\x17\n\nerror_code\x18\n \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0b \x01(\tH\x05\x88\x01\x01\",\n\x10PayPartEndStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x42\r\n\x0b_failed_msgB\x11\n\x0f_failed_node_idB\x1a\n\x18_failed_short_channel_idB\x13\n\x11_failed_directionB\r\n\x0b_error_codeB\x10\n\x0e_error_message\"\x1b\n\x19StreamPayPartStartRequest\"\xc2\x01\n\x18PayPartStartNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x0e\n\x06partid\x18\x03 \x01(\x04\x12\'\n\x12total_payment_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x0c\x61ttempt_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x04hops\x18\x06 \x03(\x0b\x32\x15.cln.PayPartStartHops\"\x9f\x01\n\x10PayPartStartHops\x12\x11\n\tnext_node\x18\x01 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\r\x12$\n\x0f\x63hannel_in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x63hannel_out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount2\xbah\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\x00\x12\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12\x39\n\x08SpliceIn\x12\x14.cln.SpliceinRequest\x1a\x15.cln.SpliceinResponse\"\x00\x12<\n\tSpliceOut\x12\x15.cln.SpliceoutRequest\x1a\x16.cln.SpliceoutResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12?\n\nBkprReport\x12\x16.cln.BkprreportRequest\x1a\x17.cln.BkprreportResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12o\n\x1a\x41skReneRemoveChannelUpdate\x12&.cln.AskreneremovechannelupdateRequest\x1a\'.cln.AskreneremovechannelupdateResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12Z\n\x13\x43lnrestRegisterPath\x12\x1f.cln.ClnrestregisterpathRequest\x1a .cln.ClnrestregisterpathResponse\"\x00\x12T\n\x11ListCurrencyRates\x12\x1d.cln.ListcurrencyratesRequest\x1a\x1e.cln.ListcurrencyratesResponse\"\x00\x12N\n\x0f\x43urrencyConvert\x12\x1b.cln.CurrencyconvertRequest\x1a\x1c.cln.CurrencyconvertResponse\"\x00\x12\x45\n\x0c\x43urrencyRate\x12\x18.cln.CurrencyrateRequest\x1a\x19.cln.CurrencyrateResponse\"\x00\x12?\n\nSendAmount\x12\x16.cln.SendamountRequest\x1a\x17.cln.SendamountResponse\"\x00\x12\x42\n\x0b\x43reateProof\x12\x17.cln.CreateproofRequest\x1a\x18.cln.CreateproofResponse\"\x00\x12\x39\n\x08Xkeysend\x12\x14.cln.XkeysendRequest\x1a\x15.cln.XkeysendResponse\"\x00\x12\x39\n\x08Graceful\x12\x14.cln.GracefulRequest\x1a\x15.cln.GracefulResponse\"\x00\x12\x63\n\x18SubscribeBalanceSnapshot\x12!.cln.StreamBalanceSnapshotRequest\x1a .cln.BalanceSnapshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeCoinMovement\x12\x1e.cln.StreamCoinMovementRequest\x1a\x1d.cln.CoinMovementNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12i\n\x1aSubscribeDeprecatedOneshot\x12#.cln.StreamDeprecatedOneshotRequest\x1a\".cln.DeprecatedOneshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeDisconnect\x12\x1c.cln.StreamDisconnectRequest\x1a\x1b.cln.DisconnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeForwardEvent\x12\x1e.cln.StreamForwardEventRequest\x1a\x1d.cln.ForwardEventNotification\"\x00\x30\x01\x12\x63\n\x18SubscribeInvoiceCreation\x12!.cln.StreamInvoiceCreationRequest\x1a .cln.InvoiceCreationNotification\"\x00\x30\x01\x12`\n\x17SubscribeInvoicePayment\x12 .cln.StreamInvoicePaymentRequest\x1a\x1f.cln.InvoicePaymentNotification\"\x00\x30\x01\x12?\n\x0cSubscribeLog\x12\x15.cln.StreamLogRequest\x1a\x14.cln.LogNotification\"\x00\x30\x01\x12{\n SubscribeOnionMessageForwardFail\x12).cln.StreamOnionMessageForwardFailRequest\x1a(.cln.OnionMessageForwardFailNotification\"\x00\x30\x01\x12o\n\x1cSubscribeOpenChannelPeerSigs\x12%.cln.StreamOpenChannelPeerSigsRequest\x1a$.cln.OpenChannelPeerSigsNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStarted\x12\x1f.cln.StreamPluginStartedRequest\x1a\x1e.cln.PluginStartedNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStopped\x12\x1f.cln.StreamPluginStoppedRequest\x1a\x1e.cln.PluginStoppedNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPayFailure\x12 .cln.StreamSendPayFailureRequest\x1a\x1f.cln.SendPayFailureNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPaySuccess\x12 .cln.StreamSendPaySuccessRequest\x1a\x1f.cln.SendPaySuccessNotification\"\x00\x30\x01\x12N\n\x11SubscribeShutdown\x12\x1a.cln.StreamShutdownRequest\x1a\x19.cln.ShutdownNotification\"\x00\x30\x01\x12K\n\x10SubscribeWarning\x12\x19.cln.StreamWarningRequest\x1a\x18.cln.WarningNotification\"\x00\x30\x01\x12T\n\x13SubscribePayPartEnd\x12\x1c.cln.StreamPayPartEndRequest\x1a\x1b.cln.PayPartEndNotification\"\x00\x30\x01\x12Z\n\x15SubscribePayPartStart\x12\x1e.cln.StreamPayPartStartRequest\x1a\x1d.cln.PayPartStartNotification\"\x00\x30\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xb1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x03 \x01(\x0c\x12\x11\n\tnum_peers\x18\x04 \x01(\r\x12\x1c\n\x14num_pending_channels\x18\x05 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x06 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\rlightning_dir\x18\t \x01(\t\x12\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\x00\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0b \x01(\r\x12\x0f\n\x07network\x18\x0c \x01(\t\x12(\n\x13\x66\x65\x65s_collected_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x07\x61\x64\x64ress\x18\x0e \x03(\x0b\x32\x13.cln.GetinfoAddress\x12$\n\x07\x62inding\x18\x0f \x03(\x0b\x32\x13.cln.GetinfoBinding\x12\"\n\x15warning_bitcoind_sync\x18\x10 \x01(\tH\x01\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x02\x88\x01\x01\x42\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xc9\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cnum_channels\x18\x08 \x01(\rB\x0b\n\t_featuresB\x0e\n\x0c_remote_addr\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\x97\x02\n\x11ListfundsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12$\n\x0four_amount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x04 \x01(\x0c\x12\x16\n\x0e\x66unding_output\x18\x05 \x01(\r\x12\x11\n\tconnected\x18\x06 \x01(\x08\x12 \n\x05state\x18\x07 \x01(\x0e\x32\x11.cln.ChannelState\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\t \x01(\x0c\x42\x13\n\x11_short_channel_id\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\x96\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\xe6\x02\n\x0cSendpayRoute\x12\x0f\n\x02id\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07\x63hannel\x18\x04 \x01(\tH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\x07 \x01(\x0cH\x05\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\t \x01(\rH\x07\x88\x01\x01\x42\x05\n\x03_idB\x08\n\x06_delayB\n\n\x08_channelB\x0e\n\x0c_amount_msatB\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_node_id_outB\x12\n\x10_amount_out_msatB\x0b\n\t_cltv_out\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xac\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1c\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xe6\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\t\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xcf\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x07\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\n\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"\x8a\x01\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\x12\x1f\n\x12\x63\x61n_create_penalty\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1d\n\x15\x62\x61\x63ked_up_channel_ids\x18\x03 \x03(\x0c\x42\x15\n\x13_can_create_penalty\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"x\n\x0fRecoverResponse\x12\x32\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResult\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\xfe\x02\n\x0fInvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x16\n\x0epayment_secret\x18\x03 \x01(\x0c\x12\x12\n\nexpires_at\x18\x04 \x01(\x04\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x15\n\rcreated_index\x18\n \x01(\x04\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mpp\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xbc\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0b\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xd0\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0e \x01(\x04\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\x08\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xe5\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x10 \x01(\x04\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\n\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\xc7\x04\n\nPayRequest\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12\x1b\n\nriskfactor\x18\x08 \x01(\x01\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\n \x03(\tB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x06\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x0c \x01(\tB\x02\x18\x01H\x07\x88\x01\x01\x12)\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x08\x88\x01\x01\x12\x1e\n\rlocalinvreqid\x18\x0e \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12*\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\xab\x03\n\x0bPayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12.\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatusB\x02\x18\x01\">\n\tPayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"*\n\x10ListnodesRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListnodesResponse\x12\"\n\x05nodes\x18\x01 \x03(\x0b\x32\x13.cln.ListnodesNodes\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xe8\x01\n\x17ListnodesNodesAddresses\x12K\n\titem_type\x18\x01 \x01(\x0e\x32\x38.cln.ListnodesNodesAddresses.ListnodesNodesAddressesType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"P\n\x1bListnodesNodesAddressesType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"g\n\x15WaitanyinvoiceRequest\x12\x1a\n\rlastpay_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\x10\n\x0e_lastpay_indexB\n\n\x08_timeout\"\xbc\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\t\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xad\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x15\n\rcreated_index\x18\r \x01(\x04\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\t\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\xf7\x04\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0f \x01(\x04\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb9\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12!\n\x07satoshi\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xd7\x03\n\x0eKeysendRequest\x12\x17\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\x05label\x18\x03 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x12\x1e\n\rmaxfeepercent\x18\x04 \x01(\x01\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x06 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\'\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x04\x88\x01\x01\x12/\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListB\x02\x18\x01H\x05\x88\x01\x01\x12*\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamB\x02\x18\x01H\x06\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12$\n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\x9a\x03\n\x0fKeysendResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x05 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12+\n\x1awarning_partial_completion\x18\x08 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x36\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatusB\x02\x18\x01\"!\n\rKeysendStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\x1d\n\x1b_warning_partial_completion\"\xa4\x03\n\x0f\x46undpsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x14\n\x07minconf\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nnonwrapped\x18\t \x01(\x08H\x05\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\x13\n\x11_excess_as_changeB\r\n\x0b_nonwrappedB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10\x46undpsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.FundpsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14\x46undpsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"A\n\x0fSendpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa0\x03\n\x0fUtxopsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xd1\x1a\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x43\n\x0c\x63hannel_type\x18\x05 \x01(\x0b\x32(.cln.ListpeerchannelsChannelsChannelTypeH\x01\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x02\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\t\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\x0b\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0c\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\r\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\x0e\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0f\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x15\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12@\n\rstate_changes\x18* \x03(\x0b\x32).cln.ListpeerchannelsChannelsStateChanges\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18? \x03(\tB\x0f\n\r_scratch_txidB\x0f\n\r_channel_typeB\n\n\x08_feerateB\x08\n\x06_ownerB\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\x12\n\x10_initial_feerateB\x0f\n\r_last_feerateB\x0f\n\r_next_feerateB\x10\n\x0e_next_fee_stepB\x0b\n\t_close_toB\n\n\x08_privateB\t\n\x07_closerB\n\n\x08_fundingB\r\n\x0b_to_us_msatB\x11\n\x0f_min_to_us_msatB\x11\n\x0f_max_to_us_msatB\r\n\x0b_total_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x12\n\x10_dust_limit_msatB\x15\n\x13_their_reserve_msatB\x13\n\x11_our_reserve_msatB\x11\n\x0f_spendable_msatB\x12\n\x10_receivable_msatB\x17\n\x15_minimum_htlc_in_msatB\x18\n\x16_minimum_htlc_out_msatB\x18\n\x16_maximum_htlc_out_msatB\x16\n\x14_their_to_self_delayB\x14\n\x12_our_to_self_delayB\x15\n\x13_max_accepted_htlcsB\x08\n\x06_aliasB\x16\n\x14_in_payments_offeredB\x12\n\x10_in_offered_msatB\x18\n\x16_in_payments_fulfilledB\x14\n\x12_in_fulfilled_msatB\x17\n\x15_out_payments_offeredB\x13\n\x11_out_offered_msatB\x19\n\x17_out_payments_fulfilledB\x15\n\x13_out_fulfilled_msatB\x10\n\x0e_close_to_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"]\n\x1dListpeerchannelsChannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"X\n#ListpeerchannelsChannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"\xf4\x01\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\rsplice_amount\x18\x07 \x01(\x12\x42\x0f\n\r_scratch_txid\"\xf0\x02\n$ListpeerchannelsChannelsStateChanges\x12\x11\n\ttimestamp\x18\x01 \x01(\t\x12$\n\told_state\x18\x02 \x01(\x0e\x32\x11.cln.ChannelState\x12$\n\tnew_state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x62\n\x05\x63\x61use\x18\x04 \x01(\x0e\x32S.cln.ListpeerchannelsChannelsStateChanges.ListpeerchannelsChannelsStateChangesCause\x12\x0f\n\x07message\x18\x05 \x01(\t\"t\n)ListpeerchannelsChannelsStateChangesCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"3\n\x19ListclosedchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"[\n\x1aListclosedchannelsResponse\x12=\n\x0e\x63losedchannels\x18\x01 \x03(\x0b\x32%.cln.ListclosedchannelsClosedchannels\"\xae\x0b\n ListclosedchannelsClosedchannels\x12\x14\n\x07peer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x01\x88\x01\x01\x12>\n\x05\x61lias\x18\x04 \x01(\x0b\x32*.cln.ListclosedchannelsClosedchannelsAliasH\x02\x88\x01\x01\x12 \n\x06opener\x18\x05 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x06 \x01(\x0e\x32\x10.cln.ChannelSideH\x03\x88\x01\x01\x12\x0f\n\x07private\x18\x07 \x01(\x08\x12K\n\x0c\x63hannel_type\x18\x08 \x01(\x0b\x32\x30.cln.ListclosedchannelsClosedchannelsChannelTypeH\x04\x88\x01\x01\x12\x1f\n\x17total_local_commitments\x18\t \x01(\x04\x12 \n\x18total_remote_commitments\x18\n \x01(\x04\x12\x18\n\x10total_htlcs_sent\x18\x0b \x01(\x04\x12\x14\n\x0c\x66unding_txid\x18\x0c \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\r \x01(\r\x12\x0e\n\x06leased\x18\x0e \x01(\x08\x12/\n\x15\x66unding_fee_paid_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12/\n\x15\x66unding_fee_rcvd_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12-\n\x13\x66unding_pushed_msat\x18\x11 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x1f\n\ntotal_msat\x18\x12 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x66inal_to_us_msat\x18\x13 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emin_to_us_msat\x18\x14 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0emax_to_us_msat\x18\x15 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14last_commitment_txid\x18\x16 \x01(\x0cH\x08\x88\x01\x01\x12\x32\n\x18last_commitment_fee_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0c\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x0f\n\r_channel_typeB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"`\n+ListclosedchannelsClosedchannelsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\xbd.\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\x39\n\x10offer_recurrence\x18\x12 \x01(\x0b\x32\x1a.cln.DecodeOfferRecurrenceH\x0c\x88\x01\x01\x12\x37\n\x12unknown_offer_tlvs\x18\x13 \x03(\x0b\x32\x1b.cln.DecodeUnknownOfferTlvs\x12.\n!warning_invalid_offer_description\x18\x15 \x01(\tH\r\x88\x01\x01\x12.\n!warning_missing_offer_description\x18\x16 \x01(\tH\x0e\x88\x01\x01\x12+\n\x1ewarning_invalid_offer_currency\x18\x17 \x01(\tH\x0f\x88\x01\x01\x12)\n\x1cwarning_invalid_offer_issuer\x18\x18 \x01(\tH\x10\x88\x01\x01\x12\x1c\n\x0finvreq_metadata\x18\x19 \x01(\x0cH\x11\x88\x01\x01\x12\x1c\n\x0finvreq_payer_id\x18\x1a \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0cinvreq_chain\x18\x1b \x01(\x0cH\x13\x88\x01\x01\x12,\n\x12invreq_amount_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12\x1c\n\x0finvreq_features\x18\x1d \x01(\x0cH\x15\x88\x01\x01\x12\x1c\n\x0finvreq_quantity\x18\x1e \x01(\x04H\x16\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x1f \x01(\tH\x17\x88\x01\x01\x12&\n\x19invreq_recurrence_counter\x18 \x01(\rH\x18\x88\x01\x01\x12$\n\x17invreq_recurrence_start\x18! \x01(\rH\x19\x88\x01\x01\x12J\n\x1cunknown_invoice_request_tlvs\x18\" \x03(\x0b\x32$.cln.DecodeUnknownInvoiceRequestTlvs\x12,\n\x1fwarning_missing_invreq_metadata\x18# \x01(\tH\x1a\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_payer_id\x18$ \x01(\tH\x1b\x88\x01\x01\x12.\n!warning_invalid_invreq_payer_note\x18% \x01(\tH\x1c\x88\x01\x01\x12\x36\n)warning_missing_invoice_request_signature\x18& \x01(\tH\x1d\x88\x01\x01\x12\x36\n)warning_invalid_invoice_request_signature\x18\' \x01(\tH\x1e\x88\x01\x01\x12.\n\rinvoice_paths\x18( \x03(\x0b\x32\x17.cln.DecodeInvoicePaths\x12\x1f\n\x12invoice_created_at\x18) \x01(\x04H\x1f\x88\x01\x01\x12$\n\x17invoice_relative_expiry\x18* \x01(\rH \x88\x01\x01\x12!\n\x14invoice_payment_hash\x18+ \x01(\x0cH!\x88\x01\x01\x12-\n\x13invoice_amount_msat\x18, \x01(\x0b\x32\x0b.cln.AmountH\"\x88\x01\x01\x12\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH#\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH$\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H%\x88\x01\x01\x12;\n\x14unknown_invoice_tlvs\x18\x31 \x03(\x0b\x32\x1d.cln.DecodeUnknownInvoiceTlvs\x12*\n\x1dwarning_missing_invoice_paths\x18\x32 \x01(\tH&\x88\x01\x01\x12/\n\"warning_missing_invoice_blindedpay\x18\x33 \x01(\tH\'\x88\x01\x01\x12/\n\"warning_missing_invoice_created_at\x18\x34 \x01(\tH(\x88\x01\x01\x12\x31\n$warning_missing_invoice_payment_hash\x18\x35 \x01(\tH)\x88\x01\x01\x12+\n\x1ewarning_missing_invoice_amount\x18\x36 \x01(\tH*\x88\x01\x01\x12\x38\n+warning_missing_invoice_recurrence_basetime\x18\x37 \x01(\tH+\x88\x01\x01\x12,\n\x1fwarning_missing_invoice_node_id\x18\x38 \x01(\tH,\x88\x01\x01\x12.\n!warning_missing_invoice_signature\x18\x39 \x01(\tH-\x88\x01\x01\x12.\n!warning_invalid_invoice_signature\x18: \x01(\tH.\x88\x01\x01\x12\'\n\tfallbacks\x18; \x03(\x0b\x32\x14.cln.DecodeFallbacks\x12\x17\n\ncreated_at\x18< \x01(\x04H/\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18= \x01(\x04H0\x88\x01\x01\x12\x12\n\x05payee\x18> \x01(\x0cH1\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18? \x01(\x0cH2\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18@ \x01(\x0cH3\x88\x01\x01\x12\"\n\x15min_final_cltv_expiry\x18\x41 \x01(\rH4\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x42 \x01(\x0cH5\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x43 \x01(\x0cH6\x88\x01\x01\x12\x1f\n\x05\x65xtra\x18\x45 \x03(\x0b\x32\x10.cln.DecodeExtra\x12\x16\n\tunique_id\x18\x46 \x01(\tH7\x88\x01\x01\x12\x14\n\x07version\x18G \x01(\tH8\x88\x01\x01\x12\x13\n\x06string\x18H \x01(\tH9\x88\x01\x01\x12-\n\x0crestrictions\x18I \x03(\x0b\x32\x17.cln.DecodeRestrictions\x12&\n\x19warning_rune_invalid_utf8\x18J \x01(\tH:\x88\x01\x01\x12\x10\n\x03hex\x18K \x01(\x0cH;\x88\x01\x01\x12\x16\n\tdecrypted\x18L \x01(\x0cH<\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH=\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH>\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH?\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tH@\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHA\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHB\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHC\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHD\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHE\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHF\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHG\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHH\x88\x01\x01\x12%\n\x18invreq_recurrence_cancel\x18Z \x01(\x08HI\x88\x01\x01\x12=\n0warning_invreq_recurrence_cancel_without_counter\x18[ \x01(\tHJ\x88\x01\x01\x12?\n2warning_invreq_recurrence_cancel_with_zero_counter\x18\\ \x01(\tHK\x88\x01\x01\x12\x1b\n\x0eproof_preimage\x18] \x01(\x0cHL\x88\x01\x01\x12\x1a\n\x12proof_omitted_tlvs\x18^ \x03(\x04\x12\x1c\n\x14proof_missing_hashes\x18_ \x03(\x0c\x12\x19\n\x11proof_leaf_hashes\x18` \x03(\x0c\x12\x17\n\nproof_note\x18\x61 \x01(\tHM\x88\x01\x01\x12\x1c\n\x0fproof_signature\x18\x62 \x01(\tHN\x88\x01\x01\x12\x42\n\x18unknown_payer_proof_tlvs\x18\x63 \x03(\x0b\x32 .cln.DecodeUnknownPayerProofTlvs\"\x9b\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\x12\x16\n\x12\x42OLT12_PAYER_PROOF\x10\x06\x42\x0b\n\t_offer_idB\x11\n\x0f_offer_metadataB\x11\n\x0f_offer_currencyB!\n\x1f_warning_unknown_offer_currencyB\x16\n\x14_currency_minor_unitB\x0f\n\r_offer_amountB\x14\n\x12_offer_amount_msatB\x14\n\x12_offer_descriptionB\x0f\n\r_offer_issuerB\x11\n\x0f_offer_featuresB\x18\n\x16_offer_absolute_expiryB\x15\n\x13_offer_quantity_maxB\x13\n\x11_offer_recurrenceB$\n\"_warning_invalid_offer_descriptionB$\n\"_warning_missing_offer_descriptionB!\n\x1f_warning_invalid_offer_currencyB\x1f\n\x1d_warning_invalid_offer_issuerB\x12\n\x10_invreq_metadataB\x12\n\x10_invreq_payer_idB\x0f\n\r_invreq_chainB\x15\n\x13_invreq_amount_msatB\x12\n\x10_invreq_featuresB\x12\n\x10_invreq_quantityB\x14\n\x12_invreq_payer_noteB\x1c\n\x1a_invreq_recurrence_counterB\x1a\n\x18_invreq_recurrence_startB\"\n _warning_missing_invreq_metadataB\"\n _warning_missing_invreq_payer_idB$\n\"_warning_invalid_invreq_payer_noteB,\n*_warning_missing_invoice_request_signatureB,\n*_warning_invalid_invoice_request_signatureB\x15\n\x13_invoice_created_atB\x1a\n\x18_invoice_relative_expiryB\x17\n\x15_invoice_payment_hashB\x16\n\x14_invoice_amount_msatB\x13\n\x11_invoice_featuresB\x12\n\x10_invoice_node_idB\x1e\n\x1c_invoice_recurrence_basetimeB \n\x1e_warning_missing_invoice_pathsB%\n#_warning_missing_invoice_blindedpayB%\n#_warning_missing_invoice_created_atB\'\n%_warning_missing_invoice_payment_hashB!\n\x1f_warning_missing_invoice_amountB.\n,_warning_missing_invoice_recurrence_basetimeB\"\n _warning_missing_invoice_node_idB$\n\"_warning_missing_invoice_signatureB$\n\"_warning_invalid_invoice_signatureB\r\n\x0b_created_atB\t\n\x07_expiryB\x08\n\x06_payeeB\x0f\n\r_payment_hashB\x13\n\x11_description_hashB\x18\n\x16_min_final_cltv_expiryB\x11\n\x0f_payment_secretB\x13\n\x11_payment_metadataB\x0c\n\n_unique_idB\n\n\x08_versionB\t\n\x07_stringB\x1c\n\x1a_warning_rune_invalid_utf8B\x06\n\x04_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalidB\x1b\n\x19_invreq_recurrence_cancelB3\n1_warning_invreq_recurrence_cancel_without_counterB5\n3_warning_invreq_recurrence_cancel_with_zero_counterB\x11\n\x0f_proof_preimageB\r\n\x0b_proof_noteB\x12\n\x10_proof_signature\"(\n\x0b\x44\x65\x63odeExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\xc4\x01\n\x0f\x44\x65\x63odeFallbacks\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42\x07\n\x05_addr\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xa6\x02\n\x12\x44\x65\x63odeInvoicePaths\x12)\n\x04path\x18\x01 \x03(\x0b\x32\x1b.cln.DecodeInvoicePathsPath\x12/\n\x07payinfo\x18\x02 \x01(\x0b\x32\x1e.cln.DecodeInvoicePathsPayinfo\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x06 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_path_keyB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scid\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\x97\x02\n\x19\x44\x65\x63odeInvoicePathsPayinfo\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\"\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x19\n\x11\x63ltv_expiry_delta\x18\x06 \x01(\rB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msat\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"\xf3\x01\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xf1\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\'\n\x04path\x18\x03 \x03(\x0b\x32\x19.cln.DecodeOfferPathsPath\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"Q\n\x14\x44\x65\x63odeOfferPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"\xab\x02\n\x15\x44\x65\x63odeOfferRecurrence\x12\x11\n\ttime_unit\x18\x01 \x01(\r\x12\x1d\n\x10\x63ompulsory_field\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0etime_unit_name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06period\x18\x04 \x01(\r\x12\x15\n\x08\x62\x61setime\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12;\n\tpaywindow\x18\x06 \x01(\x0b\x32#.cln.DecodeOfferRecurrencePaywindowH\x03\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\x13\n\x11_compulsory_fieldB\x11\n\x0f_time_unit_nameB\x0b\n\t_basetimeB\x0c\n\n_paywindowB\x08\n\x06_limit\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\";\n\x12\x44\x65\x63odeRestrictions\x12\x14\n\x0c\x61lternatives\x18\x01 \x03(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"S\n\x1f\x44\x65\x63odeUnknownInvoiceRequestTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"L\n\x18\x44\x65\x63odeUnknownInvoiceTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"J\n\x16\x44\x65\x63odeUnknownOfferTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"O\n\x1b\x44\x65\x63odeUnknownPayerProofTlvs\x12\x11\n\titem_type\x18\x01 \x01(\x04\x12\x0e\n\x06length\x18\x02 \x01(\x04\x12\r\n\x05value\x18\x03 \x01(\x0c\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xb4\x05\n\x0e\x44\x65lpayPayments\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\n\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdc\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xdb\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"\x84\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x84\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x03\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\r\n\x05\x66loor\x18\n \x01(\r\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x13\n\x06splice\x18\x0c \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\n\n\x08_penaltyB\x1a\n\x18_unilateral_anchor_closeB\t\n\x07_splice\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\xfb\x03\n\x12\x46undchannelRequest\x12 \n\x06\x61mount\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12!\n\x07reserve\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xce\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x31\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xd6\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1b\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12!\n\x07reserve\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\x8c\x02\n\x0fGetrouteRequest\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\nriskfactor\x18\x03 \x01(\x04\x42\x02\x18\x01\x12\x15\n\x04\x63ltv\x18\x04 \x01(\rB\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x66romid\x18\x05 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x66uzzpercent\x18\x06 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\x07 \x03(\tB\x02\x18\x01\x12\x18\n\x07maxhops\x18\x08 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x42\x07\n\x05_cltvB\t\n\x07_fromidB\x0e\n\x0c_fuzzpercentB\n\n\x08_maxhops\"9\n\x10GetrouteResponse\x12%\n\x05route\x18\x01 \x03(\x0b\x32\x12.cln.GetrouteRouteB\x02\x18\x01\"\xe1\x01\n\rGetrouteRoute\x12\x0e\n\x02id\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x13\n\x07\x63hannel\x18\x02 \x01(\tB\x02\x18\x01\x12\x15\n\tdirection\x18\x03 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x11\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01\x12\x38\n\x05style\x18\x06 \x01(\x0e\x32%.cln.GetrouteRoute.GetrouteRouteStyleB\x02\x18\x01\"!\n\x12GetrouteRouteStyle\x12\x0b\n\x03TLV\x10\x00\x1a\x02\x08\x01\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"L\n\x12ListforwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\x9d\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x15\n\rcreated_index\x18\x0c \x01(\x04\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x07\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\x08\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\t\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xd8\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_descriptionB\x0e\n\x0c_force_paths\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\xff\x02\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x06\x61mount\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12%\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12!\n\x07reserve\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xb2\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12@\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelType\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x42\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xe2\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\x0e\x66ronting_nodes\x18\x0f \x03(\x0c\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\xbc\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x66orce_paths\x18\x08 \x01(\x08H\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_force_paths\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\x9e\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1b\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x12\n\x10_funding_feerate\"\xed\x01\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x35\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9f\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1b\n\x06\x61mount\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\xed\x01\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x35\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelType\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x00\x88\x01\x01\x42\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\x95\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x37\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelType\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"@\n\x14RenepaystatusRequest\x12\x1a\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01H\x00\x88\x01\x01\x42\x0c\n\n_invstring\"K\n\x15RenepaystatusResponse\x12\x32\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatusB\x02\x18\x01\"\x9a\x04\n\x16RenepaystatusPaystatus\x12\x12\n\x06\x62olt11\x18\x01 \x01(\tB\x02\x18\x01\x12!\n\x10payment_preimage\x18\x02 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x18\n\x0cpayment_hash\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x04 \x01(\x01\x42\x02\x18\x01\x12\x13\n\x07groupid\x18\x05 \x01(\rB\x02\x18\x01\x12\x16\n\x05parts\x18\x06 \x01(\rB\x02\x18\x01H\x01\x88\x01\x01\x12$\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12.\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x02\x88\x01\x01\x12L\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\n \x01(\x0c\x42\x02\x18\x01H\x03\x88\x01\x01\x12\x11\n\x05notes\x18\x0b \x03(\tB\x02\x18\x01\"Q\n\x1cRenepaystatusPaystatusStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xfe\x02\n\x0eRenepayRequest\x12\x15\n\tinvstring\x18\x01 \x01(\tB\x02\x18\x01\x12)\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12$\n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x01\x88\x01\x01\x12\x19\n\x08maxdelay\x18\x04 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1a\n\tretry_for\x18\x05 \x01(\rB\x02\x18\x01H\x03\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x06 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x16\n\x05label\x18\x07 \x01(\tB\x02\x18\x01H\x05\x88\x01\x01\x12\x1f\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x13\n\x07\x65xclude\x18\t \x03(\tB\x02\x18\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xdd\x03\n\x0fRenepayResponse\x12\x1c\n\x10payment_preimage\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x18\n\x0cpayment_hash\x18\x02 \x01(\x0c\x42\x02\x18\x01\x12\x16\n\ncreated_at\x18\x03 \x01(\x01\x42\x02\x18\x01\x12\x11\n\x05parts\x18\x04 \x01(\rB\x02\x18\x01\x12$\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12)\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01\x12\x36\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatusB\x02\x18\x01\x12\x1c\n\x0b\x64\x65stination\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x00\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\t \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\n \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x18\n\x07groupid\x18\x0b \x01(\x04\x42\x02\x18\x01H\x03\x88\x01\x01\"B\n\rRenepayStatus\x12\x10\n\x08\x43OMPLETE\x10\x00\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x01\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x02\x1a\x02\x08\x01\x42\x0e\n\x0c_destinationB\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xb8\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x15\n\rcreated_index\x18\x08 \x01(\x04\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x06\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_updated_indexB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimage\"\xaa\x02\n\x11SetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12!\n\x07\x66\x65\x65\x62\x61se\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x66\x65\x65ppm\x18\x03 \x01(\rH\x01\x88\x01\x01\x12!\n\x07htlcmin\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12!\n\x07htlcmax\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x19\n\x0c\x65nforcedelay\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1c\n\x0fignorefeelimits\x18\x07 \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_feebaseB\t\n\x07_feeppmB\n\n\x08_htlcminB\n\n\x08_htlcmaxB\x0f\n\r_enforcedelayB\x12\n\x10_ignorefeelimits\"?\n\x12SetchannelResponse\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.cln.SetchannelChannels\"\xaf\x03\n\x12SetchannelChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\x12*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x19\n\x11ignore_fee_limits\x18\n \x01(\x08\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_high\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xda\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x03\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x05\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07sources\x18\n \x03(\t\x12\x12\n\nvalues_str\x18\x0b \x03(\tB\t\n\x07_sourceB\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"2\n\x0fSpliceinRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\"b\n\x10SpliceinResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\x8b\x01\n\x10SpliceoutRequest\x12\x0f\n\x07\x63hannel\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\t\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_destinationB\x10\n\x0e_force_feerate\"c\n\x11SpliceoutResponse\x12\x11\n\x04psbt\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"~\n\x15UpgradewalletResponse\x12\x15\n\rupgraded_outs\x18\x01 \x01(\x04\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"\xf4\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12*\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsB\x02\x18\x01H\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\xd0\x05\n\x0bWaitDetails\x12;\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusB\x02\x18\x01H\x00\x88\x01\x01\x12\x16\n\x05label\x18\x02 \x01(\tB\x02\x18\x01H\x01\x88\x01\x01\x12\x1c\n\x0b\x64\x65scription\x18\x03 \x01(\tB\x02\x18\x01H\x02\x88\x01\x01\x12\x17\n\x06\x62olt11\x18\x04 \x01(\tB\x02\x18\x01H\x03\x88\x01\x01\x12\x17\n\x06\x62olt12\x18\x05 \x01(\tB\x02\x18\x01H\x04\x88\x01\x01\x12\x17\n\x06partid\x18\x06 \x01(\x04\x42\x02\x18\x01H\x05\x88\x01\x01\x12\x18\n\x07groupid\x18\x07 \x01(\x04\x42\x02\x18\x01H\x06\x88\x01\x01\x12\x1d\n\x0cpayment_hash\x18\x08 \x01(\x0c\x42\x02\x18\x01H\x07\x88\x01\x01\x12\x1b\n\nin_channel\x18\t \x01(\tB\x02\x18\x01H\x08\x88\x01\x01\x12\x1b\n\nin_htlc_id\x18\n \x01(\x04\x42\x02\x18\x01H\t\x88\x01\x01\x12%\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\n\x88\x01\x01\x12\x1c\n\x0bout_channel\x18\x0c \x01(\tB\x02\x18\x01H\x0b\x88\x01\x01\"\xad\x01\n\x11WaitDetailsStatus\x12\x0e\n\x06UNPAID\x10\x00\x1a\x02\x08\x01\x12\x0c\n\x04PAID\x10\x01\x1a\x02\x08\x01\x12\x0f\n\x07\x45XPIRED\x10\x02\x1a\x02\x08\x01\x12\x0f\n\x07PENDING\x10\x03\x1a\x02\x08\x01\x12\x0e\n\x06\x46\x41ILED\x10\x04\x1a\x02\x08\x01\x12\x10\n\x08\x43OMPLETE\x10\x05\x1a\x02\x08\x01\x12\x0f\n\x07OFFERED\x10\x06\x1a\x02\x08\x01\x12\x0f\n\x07SETTLED\x10\x07\x1a\x02\x08\x01\x12\x14\n\x0cLOCAL_FAILED\x10\x08\x1a\x02\x08\x01\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\x94.\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12S\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingB\x02\x18\x01H\x15\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x16\x88\x01\x01\x12V\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageH\x17\x88\x01\x01\x12M\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsH\x18\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x19\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1a\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1b\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1c\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1d\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH\x1e\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH\x1f\x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH \x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH!\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH\"\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH#\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH$\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH%\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH&\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH\'\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH(\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH)\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH*\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH+\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH,\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH-\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH.\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH/\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH0\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH1\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH2\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH3\x88\x01\x01\x12?\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmH4\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH5\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH6\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH7\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH8\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH9\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH:\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH;\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH<\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH=\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsH>\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsH?\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeH@\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHA\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHB\x88\x01\x01\x12R\n\x17\x63urrencyrate_add_source\x18J \x01(\x0b\x32,.cln.ListconfigsConfigsCurrencyrateaddsourceHC\x88\x01\x01\x12Z\n\x1b\x63urrencyrate_disable_source\x18K \x01(\x0b\x32\x30.cln.ListconfigsConfigsCurrencyratedisablesourceHD\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peersB\x1a\n\x18_currencyrate_add_sourceB\x1e\n\x1c_currencyrate_disable_source\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\"n\n\'ListconfigsConfigsCurrencyrateaddsource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"r\n+ListconfigsConfigsCurrencyratedisablesource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"=\n\x1eListconfigsConfigsEncryptedhsm\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n%ListconfigsConfigsExperimentalanchors\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n&ListconfigsConfigsExperimentalsplicing\x12\x0f\n\x03set\x18\x01 \x01(\x08\x42\x02\x18\x01\x12\x12\n\x06source\x18\x02 \x01(\tB\x02\x18\x01\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\r\n\x0bStopRequest\"a\n\x0cStopResponse\x12,\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResult\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xcd\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\x12\x19\n\x0c\x63urrencyrate\x18\x11 \x01(\x01H\t\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_idB\x0f\n\r_currencyrate\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\xb0\x01\n\x11\x42kprreportRequest\x12\x13\n\x06\x66ormat\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07headers\x18\x02 \x03(\t\x12\x13\n\x06\x65scape\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\rH\x03\x88\x01\x01\x42\t\n\x07_formatB\t\n\x07_escapeB\r\n\x0b_start_timeB\x0b\n\t_end_time\"$\n\x12\x42kprreportResponse\x12\x0e\n\x06report\x18\x01 \x03(\t\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"r\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\x12\x1b\n\x0e\x64\x65v_remove_all\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x11\n\x0f_dev_remove_all\"\x1a\n\x18\x41skreneunreserveResponse\"t\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xe8\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x12\n\npersistent\x18\x05 \x01(\x08\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiases\x12<\n\x0bimpressions\x18\n \x03(\x0b\x32\'.cln.AskrenelistlayersLayersImpressions\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xda\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x05 \x01(\t\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x02\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x0c\n\n_timestamp\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"w\n\"AskrenelistlayersLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xef\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\x12=\n\x0bimpressions\x18\n \x03(\x0b\x32(.cln.AskrenecreatelayerLayersImpressions\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"x\n#AskrenecreatelayerLayersImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\"P\n!AskreneremovechannelupdateRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\"$\n\"AskreneremovechannelupdateResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"r\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1c\n\x14short_channel_id_dir\x18\x04 \x01(\t\x12\x12\n\x05layer\x18\x05 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xe7\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\nfinal_cltv\x18\x07 \x01(\r\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x01\x88\x01\x01\x42\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x88\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x12\n\nfinal_cltv\x18\x04 \x01(\r\"\xd4\x03\n\x13GetroutesRoutesPath\x12)\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountB\x02\x18\x01H\x00\x88\x01\x01\x12\x1d\n\x0cnext_node_id\x18\x04 \x01(\x0c\x42\x02\x18\x01H\x01\x88\x01\x01\x12\x16\n\x05\x64\x65lay\x18\x05 \x01(\rB\x02\x18\x01H\x02\x88\x01\x01\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12(\n\x0e\x61mount_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12)\n\x0f\x61mount_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x17\n\nnode_id_in\x18\t \x01(\x0cH\x05\x88\x01\x01\x12\x18\n\x0bnode_id_out\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x14\n\x07\x63ltv_in\x18\x0b \x01(\rH\x07\x88\x01\x01\x12\x15\n\x08\x63ltv_out\x18\x0c \x01(\rH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0f\n\r_next_node_idB\x08\n\x06_delayB\x11\n\x0f_amount_in_msatB\x12\n\x10_amount_out_msatB\r\n\x0b_node_id_inB\x0e\n\x0c_node_id_outB\n\n\x08_cltv_inB\x0b\n\t_cltv_out\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\x8a\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x06 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12K\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInform\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\"\x94\x01\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\x12\x39\n\x0bimpressions\x18\x03 \x03(\x0b\x32$.cln.AskreneinformchannelImpressions\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x83\x01\n\x1f\x41skreneinformchannelImpressions\x12 \n\x0b\x61mount_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xf5\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x0b \x01(\x0cH\x04\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msatB\x0e\n\x0c_destination\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbb\x03\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x12\n\x05label\x18\t \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\n \x01(\x0cH\x07\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x0b \x01(\x08H\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_labelB\x10\n\x0e_localinvreqidB\x11\n\x0f_dev_use_shadow\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\xf6\x01\n\x1a\x43lnrestregisterpathRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nrpc_method\x18\x02 \x01(\t\x12H\n\x11rune_restrictions\x18\x03 \x01(\x0b\x32(.cln.ClnrestregisterpathRuneRestrictionsH\x00\x88\x01\x01\x12\x1a\n\rrune_required\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0bhttp_method\x18\x05 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_rune_restrictionsB\x10\n\x0e_rune_requiredB\x0e\n\x0c_http_method\"\x1d\n\x1b\x43lnrestregisterpathResponse\"\xda\x01\n#ClnrestregisterpathRuneRestrictions\x12\x13\n\x06nodeid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x44\n\x06params\x18\x03 \x03(\x0b\x32\x34.cln.ClnrestregisterpathRuneRestrictions.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_nodeidB\t\n\x07_method\",\n\x18ListcurrencyratesRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\"W\n\x19ListcurrencyratesResponse\x12:\n\rcurrencyrates\x18\x01 \x03(\x0b\x32#.cln.ListcurrencyratesCurrencyrates\"@\n\x1eListcurrencyratesCurrencyrates\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x01\":\n\x16\x43urrencyconvertRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x01\x12\x10\n\x08\x63urrency\x18\x02 \x01(\t\"4\n\x17\x43urrencyconvertResponse\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\"G\n\x13\x43urrencyrateRequest\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x13\n\x06source\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_source\"$\n\x14\x43urrencyrateResponse\x12\x0c\n\x04rate\x18\x01 \x01(\x01\"\x95\x02\n\x11SendamountRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x17\n\npayer_note\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05label\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\r\n\x0b_payer_noteB\x08\n\x06_label\"\xa7\x01\n\x12SendamountResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"e\n\x12\x43reateproofRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\x11\n\x04note\x18\x02 \x01(\tH\x00\x88\x01\x01\x12 \n\x07include\x18\x03 \x03(\x0b\x32\x0f.cln.ProofFieldB\x07\n\x05_note\"=\n\x13\x43reateproofResponse\x12&\n\x06proofs\x18\x01 \x03(\x0b\x32\x16.cln.CreateproofProofs\"\xb6\x01\n\x11\x43reateproofProofs\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\x12.\n\x15offer_fields_included\x18\x02 \x03(\x0b\x32\x0f.cln.ProofField\x12/\n\x16invreq_fields_included\x18\x03 \x03(\x0b\x32\x0f.cln.ProofField\x12\x30\n\x17invoice_fields_included\x18\x04 \x03(\x0b\x32\x0f.cln.ProofField\"\xd7\x02\n\x0fXkeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x05 \x03(\t\x12\x16\n\tretry_for\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x03\x88\x01\x01\x12\x36\n\textratlvs\x18\x08 \x03(\x0b\x32#.cln.XkeysendRequest.ExtratlvsEntry\x1a\x30\n\x0e\x45xtratlvsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06_labelB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0b\n\t_maxdelay\"\xa5\x01\n\x10XkeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"3\n\x0fGracefulRequest\x12\x14\n\x07timeout\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\"H\n\x10GracefulResponse\x12\x1d\n\x15pending_htlc_expiries\x18\x01 \x03(\r\x12\x15\n\rpending_peers\x18\x02 \x03(\x0c\"\x1e\n\x1cStreamBalanceSnapshotRequest\"\x86\x01\n\x1b\x42\x61lanceSnapshotNotification\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x02 \x01(\r\x12\x11\n\ttimestamp\x18\x03 \x01(\r\x12.\n\x08\x61\x63\x63ounts\x18\x04 \x03(\x0b\x32\x1c.cln.BalanceSnapshotAccounts\"c\n\x17\x42\x61lanceSnapshotAccounts\x12\x12\n\naccount_id\x18\x01 \x01(\t\x12!\n\x0c\x62\x61lance_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x03 \x01(\t\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x1b\n\x19StreamCoinMovementRequest\"\xaf\x0b\n\x18\x43oinMovementNotification\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\t\x12\x0f\n\x07node_id\x18\x03 \x01(\x0c\x12\x41\n\titem_type\x18\x04 \x01(\x0e\x32..cln.CoinMovementNotification.CoinMovementType\x12\x1a\n\rcreated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x12\n\naccount_id\x18\x06 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\t \x01(\x04\x12\x10\n\x04tags\x18\n \x03(\tB\x02\x18\x01\x12N\n\x0bprimary_tag\x18\x0b \x01(\x0e\x32\x34.cln.CoinMovementNotification.CoinMovementPrimaryTagH\x01\x88\x01\x01\x12\x12\n\nextra_tags\x18\x0c \x03(\t\x12\x19\n\x0cpayment_hash\x18\r \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07part_id\x18\x0e \x01(\x04H\x03\x88\x01\x01\x12\x15\n\x08group_id\x18\x0f \x01(\x04H\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12 \n\x04utxo\x18\x11 \x01(\x0b\x32\r.cln.OutpointH\x06\x88\x01\x01\x12\x14\n\x07peer_id\x18\x12 \x01(\x0cH\x07\x88\x01\x01\x12 \n\x13originating_account\x18\x13 \x01(\tH\x08\x88\x01\x01\x12\x15\n\x04txid\x18\x14 \x01(\x0c\x42\x02\x18\x01H\t\x88\x01\x01\x12\x1a\n\rspending_txid\x18\x15 \x01(\x0cH\n\x88\x01\x01\x12\x1a\n\tutxo_txid\x18\x16 \x01(\x0c\x42\x02\x18\x01H\x0b\x88\x01\x01\x12\x15\n\x04vout\x18\x17 \x01(\rB\x02\x18\x01H\x0c\x88\x01\x01\x12%\n\x0boutput_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x19\n\x0coutput_count\x18\x19 \x01(\rH\x0e\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\x1a \x01(\rH\x0f\x88\x01\x01\"\xf7\x02\n\x16\x43oinMovementPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x12\x0b\n\x07INVOICE\x10\x10\x12\n\n\x06ROUTED\x10\x11\x12\n\n\x06PUSHED\x10\x12\x12\r\n\tLEASE_FEE\x10\x13\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x14\x12\x0f\n\x0bPENALTY_ADJ\x10\x15\x12\x11\n\rJOURNAL_ENTRY\x10\x16\"2\n\x10\x43oinMovementType\x12\x0f\n\x0b\x43HANNEL_MVT\x10\x00\x12\r\n\tCHAIN_MVT\x10\x01\x42\x10\n\x0e_created_indexB\x0e\n\x0c_primary_tagB\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_idB\x0c\n\n_fees_msatB\x07\n\x05_utxoB\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x07\n\x05_txidB\x10\n\x0e_spending_txidB\x0c\n\n_utxo_txidB\x07\n\x05_voutB\x0e\n\x0c_output_msatB\x0f\n\r_output_countB\x0e\n\x0c_blockheight\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\" \n\x1eStreamDeprecatedOneshotRequest\"6\n\x1d\x44\x65precatedOneshotNotification\x12\x15\n\rdeprecated_ok\x18\x01 \x01(\x08\"\x19\n\x17StreamDisconnectRequest\"$\n\x16\x44isconnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\"\x1b\n\x19StreamForwardEventRequest\"\x88\x05\n\x18\x46orwardEventNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x12\n\nin_channel\x18\x02 \x01(\t\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x08out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12@\n\x06status\x18\x07 \x01(\x0e\x32\x30.cln.ForwardEventNotification.ForwardEventStatus\x12\x15\n\x08\x66\x61ilcode\x18\x08 \x01(\rH\x03\x88\x01\x01\x12\x17\n\nfailreason\x18\t \x01(\tH\x04\x88\x01\x01\x12\x43\n\x05style\x18\n \x01(\x0e\x32/.cln.ForwardEventNotification.ForwardEventStyleH\x05\x88\x01\x01\x12\x15\n\rreceived_time\x18\x0b \x01(\x01\x12\x1a\n\rresolved_time\x18\x0c \x01(\x01H\x06\x88\x01\x01\"L\n\x12\x46orwardEventStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"(\n\x11\x46orwardEventStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_out_msatB\x0b\n\t_fee_msatB\x0b\n\t_failcodeB\r\n\x0b_failreasonB\x08\n\x06_styleB\x10\n\x0e_resolved_time\"\x1e\n\x1cStreamInvoiceCreationRequest\"\x8b\x01\n\x1bInvoiceCreationNotification\x12\x1e\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12\r\n\x05label\x18\x03 \x01(\t\x12\x15\n\x08offer_id\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x42\x07\n\x05_msatB\x0b\n\t_offer_id\"\x1d\n\x1bStreamInvoicePaymentRequest\"\x8b\x01\n\x1aInvoicePaymentNotification\x12\x19\n\x04msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08preimage\x18\x02 \x01(\x0c\x12$\n\x08outpoint\x18\x03 \x01(\x0b\x32\r.cln.OutpointH\x00\x88\x01\x01\x12\r\n\x05label\x18\x04 \x01(\tB\x0b\n\t_outpoint\"\x12\n\x10StreamLogRequest\"\xca\x01\n\x0fLogNotification\x12,\n\x05level\x18\x01 \x01(\x0e\x32\x1d.cln.LogNotification.LogLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"K\n\x08LogLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x0b\n\x07UNUSUAL\x10\x04\x12\n\n\x06\x42ROKEN\x10\x05\"&\n$StreamOnionMessageForwardFailRequest\"\xef\x01\n#OnionMessageForwardFailNotification\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x10\n\x08incoming\x18\x02 \x01(\x0c\x12\x10\n\x08path_key\x18\x03 \x01(\x0c\x12\x15\n\x08outgoing\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12\x19\n\x0cnext_node_id\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19next_short_channel_id_dir\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_outgoingB\x0f\n\r_next_node_idB\x1c\n\x1a_next_short_channel_id_dir\"\"\n StreamOpenChannelPeerSigsRequest\"J\n\x1fOpenChannelPeerSigsNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"\x1c\n\x1aStreamPluginStartedRequest\"V\n\x19PluginStartedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1c\n\x1aStreamPluginStoppedRequest\"V\n\x19PluginStoppedNotification\x12\x13\n\x0bplugin_name\x18\x01 \x01(\t\x12\x13\n\x0bplugin_path\x18\x02 \x01(\t\x12\x0f\n\x07methods\x18\x03 \x03(\t\"\x1d\n\x1bStreamSendPayFailureRequest\"b\n\x1aSendPayFailureNotification\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x17.cln.SendpayFailureData\"\xc1\t\n\x12SendpayFailureData\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x06\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x17\n\ncreated_at\x18\n \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\n\x88\x01\x01\x12\x45\n\x06status\x18\x0c \x01(\x0e\x32\x30.cln.SendpayFailureData.SendpayFailureDataStatusH\x0b\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x0c\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\x10\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\x11\x88\x01\x01\x12\x17\n\nonionreply\x18\x13 \x01(\x0cH\x12\x88\x01\x01\x12\x19\n\x0c\x65rring_index\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x19\n\x0c\x66\x61ilcodename\x18\x16 \x01(\tH\x15\x88\x01\x01\x12\x18\n\x0b\x65rring_node\x18\x17 \x01(\x0cH\x16\x88\x01\x01\x12\x1b\n\x0e\x65rring_channel\x18\x18 \x01(\tH\x17\x88\x01\x01\x12\x1d\n\x10\x65rring_direction\x18\x19 \x01(\rH\x18\x88\x01\x01\x12\x18\n\x0braw_message\x18\x1a \x01(\x0cH\x19\x88\x01\x01\"A\n\x18SendpayFailureDataStatus\x12\n\n\x06\x46\x41ILED\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\x05\n\x03_idB\x0f\n\r_payment_hashB\n\n\x08_groupidB\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_created_atB\x0f\n\r_completed_atB\t\n\x07_statusB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronionB\r\n\x0b_onionreplyB\x0f\n\r_erring_indexB\x0b\n\t_failcodeB\x0f\n\r_failcodenameB\x0e\n\x0c_erring_nodeB\x11\n\x0f_erring_channelB\x13\n\x11_erring_directionB\x0e\n\x0c_raw_message\"\x1d\n\x1bStreamSendPaySuccessRequest\"\xcc\x05\n\x1aSendPaySuccessNotification\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x1a\n\rupdated_index\x18\x05 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\ncreated_at\x18\n \x01(\x04\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12\x44\n\x06status\x18\x0c \x01(\x0e\x32\x34.cln.SendPaySuccessNotification.SendpaySuccessStatus\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x05\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\x08\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x17\n\nerroronion\x18\x12 \x01(\x0cH\n\x88\x01\x01\"$\n\x14SendpaySuccessStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\x10\n\x0e_updated_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x0f\n\r_completed_atB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_descriptionB\r\n\x0b_erroronion\"\x17\n\x15StreamShutdownRequest\"\x16\n\x14ShutdownNotification\"\x16\n\x14StreamWarningRequest\"\xae\x01\n\x13WarningNotification\x12\x34\n\x05level\x18\x01 \x01(\x0e\x32%.cln.WarningNotification.WarningLevel\x12\x0c\n\x04time\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0b\n\x03log\x18\x05 \x01(\t\"#\n\x0cWarningLevel\x12\x08\n\x04WARN\x10\x00\x12\t\n\x05\x45RROR\x10\x01\"\x19\n\x17StreamPayPartEndRequest\"\xf1\x03\n\x16PayPartEndNotification\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.cln.PayPartEndNotification.PayPartEndStatus\x12\x10\n\x08\x64uration\x18\x02 \x01(\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x0f\n\x07groupid\x18\x04 \x01(\x04\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x17\n\nfailed_msg\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x61iled_node_id\x18\x07 \x01(\x0cH\x01\x88\x01\x01\x12$\n\x17\x66\x61iled_short_channel_id\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x66\x61iled_direction\x18\t \x01(\rH\x03\x88\x01\x01\x12\x17\n\nerror_code\x18\n \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0b \x01(\tH\x05\x88\x01\x01\",\n\x10PayPartEndStatus\x12\x0b\n\x07SUCCESS\x10\x00\x12\x0b\n\x07\x46\x41ILURE\x10\x01\x42\r\n\x0b_failed_msgB\x11\n\x0f_failed_node_idB\x1a\n\x18_failed_short_channel_idB\x13\n\x11_failed_directionB\r\n\x0b_error_codeB\x10\n\x0e_error_message\"\x1b\n\x19StreamPayPartStartRequest\"\xc2\x01\n\x18PayPartStartNotification\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x0e\n\x06partid\x18\x03 \x01(\x04\x12\'\n\x12total_payment_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x0c\x61ttempt_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x04hops\x18\x06 \x03(\x0b\x32\x15.cln.PayPartStartHops\"\x9f\x01\n\x10PayPartStartHops\x12\x11\n\tnext_node\x18\x01 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\r\x12$\n\x0f\x63hannel_in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x63hannel_out_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount2\xbah\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\x00\x12\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12\x39\n\x08SpliceIn\x12\x14.cln.SpliceinRequest\x1a\x15.cln.SpliceinResponse\"\x00\x12<\n\tSpliceOut\x12\x15.cln.SpliceoutRequest\x1a\x16.cln.SpliceoutResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12?\n\nBkprReport\x12\x16.cln.BkprreportRequest\x1a\x17.cln.BkprreportResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12o\n\x1a\x41skReneRemoveChannelUpdate\x12&.cln.AskreneremovechannelupdateRequest\x1a\'.cln.AskreneremovechannelupdateResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12Z\n\x13\x43lnrestRegisterPath\x12\x1f.cln.ClnrestregisterpathRequest\x1a .cln.ClnrestregisterpathResponse\"\x00\x12T\n\x11ListCurrencyRates\x12\x1d.cln.ListcurrencyratesRequest\x1a\x1e.cln.ListcurrencyratesResponse\"\x00\x12N\n\x0f\x43urrencyConvert\x12\x1b.cln.CurrencyconvertRequest\x1a\x1c.cln.CurrencyconvertResponse\"\x00\x12\x45\n\x0c\x43urrencyRate\x12\x18.cln.CurrencyrateRequest\x1a\x19.cln.CurrencyrateResponse\"\x00\x12?\n\nSendAmount\x12\x16.cln.SendamountRequest\x1a\x17.cln.SendamountResponse\"\x00\x12\x42\n\x0b\x43reateProof\x12\x17.cln.CreateproofRequest\x1a\x18.cln.CreateproofResponse\"\x00\x12\x39\n\x08Xkeysend\x12\x14.cln.XkeysendRequest\x1a\x15.cln.XkeysendResponse\"\x00\x12\x39\n\x08Graceful\x12\x14.cln.GracefulRequest\x1a\x15.cln.GracefulResponse\"\x00\x12\x63\n\x18SubscribeBalanceSnapshot\x12!.cln.StreamBalanceSnapshotRequest\x1a .cln.BalanceSnapshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeCoinMovement\x12\x1e.cln.StreamCoinMovementRequest\x1a\x1d.cln.CoinMovementNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12i\n\x1aSubscribeDeprecatedOneshot\x12#.cln.StreamDeprecatedOneshotRequest\x1a\".cln.DeprecatedOneshotNotification\"\x00\x30\x01\x12T\n\x13SubscribeDisconnect\x12\x1c.cln.StreamDisconnectRequest\x1a\x1b.cln.DisconnectNotification\"\x00\x30\x01\x12Z\n\x15SubscribeForwardEvent\x12\x1e.cln.StreamForwardEventRequest\x1a\x1d.cln.ForwardEventNotification\"\x00\x30\x01\x12\x63\n\x18SubscribeInvoiceCreation\x12!.cln.StreamInvoiceCreationRequest\x1a .cln.InvoiceCreationNotification\"\x00\x30\x01\x12`\n\x17SubscribeInvoicePayment\x12 .cln.StreamInvoicePaymentRequest\x1a\x1f.cln.InvoicePaymentNotification\"\x00\x30\x01\x12?\n\x0cSubscribeLog\x12\x15.cln.StreamLogRequest\x1a\x14.cln.LogNotification\"\x00\x30\x01\x12{\n SubscribeOnionMessageForwardFail\x12).cln.StreamOnionMessageForwardFailRequest\x1a(.cln.OnionMessageForwardFailNotification\"\x00\x30\x01\x12o\n\x1cSubscribeOpenChannelPeerSigs\x12%.cln.StreamOpenChannelPeerSigsRequest\x1a$.cln.OpenChannelPeerSigsNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStarted\x12\x1f.cln.StreamPluginStartedRequest\x1a\x1e.cln.PluginStartedNotification\"\x00\x30\x01\x12]\n\x16SubscribePluginStopped\x12\x1f.cln.StreamPluginStoppedRequest\x1a\x1e.cln.PluginStoppedNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPayFailure\x12 .cln.StreamSendPayFailureRequest\x1a\x1f.cln.SendPayFailureNotification\"\x00\x30\x01\x12`\n\x17SubscribeSendPaySuccess\x12 .cln.StreamSendPaySuccessRequest\x1a\x1f.cln.SendPaySuccessNotification\"\x00\x30\x01\x12N\n\x11SubscribeShutdown\x12\x1a.cln.StreamShutdownRequest\x1a\x19.cln.ShutdownNotification\"\x00\x30\x01\x12K\n\x10SubscribeWarning\x12\x19.cln.StreamWarningRequest\x1a\x18.cln.WarningNotification\"\x00\x30\x01\x12T\n\x13SubscribePayPartEnd\x12\x1c.cln.StreamPayPartEndRequest\x1a\x1b.cln.PayPartEndNotification\"\x00\x30\x01\x12Z\n\x15SubscribePayPartStart\x12\x1e.cln.StreamPayPartStartRequest\x1a\x1d.cln.PayPartStartNotification\"\x00\x30\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -1343,315 +1343,321 @@ _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_start=91535 _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_end=91608 _globals['_ASKRENELISTLAYERSLAYERS']._serialized_start=91611 - _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=92037 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=92040 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=92195 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=92198 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=92622 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=92625 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=92843 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=92846 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=92985 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=92988 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=93133 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=93135 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=93217 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=93219 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=93294 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=93297 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=93729 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=93732 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=93888 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=93891 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=94228 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=94231 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=94427 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=94430 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=94570 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=94573 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=94719 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=94721 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=94763 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=94765 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=94793 - _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_start=94795 - _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_end=94875 - _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_start=94877 - _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_end=94913 - _globals['_ASKRENERESERVEREQUEST']._serialized_start=94915 - _globals['_ASKRENERESERVEREQUEST']._serialized_end=94977 - _globals['_ASKRENERESERVERESPONSE']._serialized_start=94979 - _globals['_ASKRENERESERVERESPONSE']._serialized_end=95003 - _globals['_ASKRENERESERVEPATH']._serialized_start=95005 - _globals['_ASKRENERESERVEPATH']._serialized_end=95119 - _globals['_ASKRENEAGEREQUEST']._serialized_start=95121 - _globals['_ASKRENEAGEREQUEST']._serialized_end=95171 - _globals['_ASKRENEAGERESPONSE']._serialized_start=95173 - _globals['_ASKRENEAGERESPONSE']._serialized_end=95229 - _globals['_GETROUTESREQUEST']._serialized_start=95232 - _globals['_GETROUTESREQUEST']._serialized_end=95463 - _globals['_GETROUTESRESPONSE']._serialized_start=95465 - _globals['_GETROUTESRESPONSE']._serialized_end=95547 - _globals['_GETROUTESROUTES']._serialized_start=95550 - _globals['_GETROUTESROUTES']._serialized_end=95686 - _globals['_GETROUTESROUTESPATH']._serialized_start=95689 - _globals['_GETROUTESROUTESPATH']._serialized_end=96157 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=96159 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=96215 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=96217 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=96245 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=96248 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=96514 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=96435 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=96514 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=96516 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=96605 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=96608 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=96819 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=96822 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=96965 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=96967 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=96997 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=97000 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=97429 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=97431 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=97461 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=97464 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=97628 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=97630 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=97705 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=97708 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=97873 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=97876 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=98040 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=98042 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=98120 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=98123 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=98275 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=98277 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=98309 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=98311 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=98408 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=98411 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=98556 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=98559 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=98932 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=98934 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=99053 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=99055 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=99117 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=99119 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=99147 - _globals['_XPAYREQUEST']._serialized_start=99150 - _globals['_XPAYREQUEST']._serialized_end=99593 - _globals['_XPAYRESPONSE']._serialized_start=99596 - _globals['_XPAYRESPONSE']._serialized_end=99757 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=99759 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=99820 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=99822 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=99918 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=99921 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=100126 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=100060 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=100096 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=100128 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=100211 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=100214 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=100767 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=100575 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=100725 - _globals['_LISTCHAINMOVESREQUEST']._serialized_start=100770 - _globals['_LISTCHAINMOVESREQUEST']._serialized_end=100967 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=100903 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=100937 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=100969 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=101044 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=101047 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=101899 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=101534 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=101811 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=101902 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=102135 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=102061 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=102098 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=102137 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=102224 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=102227 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=102469 - _globals['_DELNETWORKEVENTREQUEST']._serialized_start=102471 - _globals['_DELNETWORKEVENTREQUEST']._serialized_end=102518 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=102520 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=102545 - _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_start=102548 - _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_end=102794 - _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_start=102796 - _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_end=102825 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_start=102828 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_end=103046 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_start=102979 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_end=103024 - _globals['_LISTCURRENCYRATESREQUEST']._serialized_start=103048 - _globals['_LISTCURRENCYRATESREQUEST']._serialized_end=103092 - _globals['_LISTCURRENCYRATESRESPONSE']._serialized_start=103094 - _globals['_LISTCURRENCYRATESRESPONSE']._serialized_end=103181 - _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_start=103183 - _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_end=103247 - _globals['_CURRENCYCONVERTREQUEST']._serialized_start=103249 - _globals['_CURRENCYCONVERTREQUEST']._serialized_end=103307 - _globals['_CURRENCYCONVERTRESPONSE']._serialized_start=103309 - _globals['_CURRENCYCONVERTRESPONSE']._serialized_end=103361 - _globals['_CURRENCYRATEREQUEST']._serialized_start=103363 - _globals['_CURRENCYRATEREQUEST']._serialized_end=103434 - _globals['_CURRENCYRATERESPONSE']._serialized_start=103436 - _globals['_CURRENCYRATERESPONSE']._serialized_end=103472 - _globals['_SENDAMOUNTREQUEST']._serialized_start=103475 - _globals['_SENDAMOUNTREQUEST']._serialized_end=103752 - _globals['_SENDAMOUNTRESPONSE']._serialized_start=103755 - _globals['_SENDAMOUNTRESPONSE']._serialized_end=103922 - _globals['_CREATEPROOFREQUEST']._serialized_start=103924 - _globals['_CREATEPROOFREQUEST']._serialized_end=104025 - _globals['_CREATEPROOFRESPONSE']._serialized_start=104027 - _globals['_CREATEPROOFRESPONSE']._serialized_end=104088 - _globals['_CREATEPROOFPROOFS']._serialized_start=104091 - _globals['_CREATEPROOFPROOFS']._serialized_end=104273 - _globals['_XKEYSENDREQUEST']._serialized_start=104276 - _globals['_XKEYSENDREQUEST']._serialized_end=104619 - _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_start=104523 - _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_end=104571 - _globals['_XKEYSENDRESPONSE']._serialized_start=104622 - _globals['_XKEYSENDRESPONSE']._serialized_end=104787 - _globals['_GRACEFULREQUEST']._serialized_start=104789 - _globals['_GRACEFULREQUEST']._serialized_end=104840 - _globals['_GRACEFULRESPONSE']._serialized_start=104842 - _globals['_GRACEFULRESPONSE']._serialized_end=104914 - _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_start=104916 - _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_end=104946 - _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_start=104949 - _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_end=105083 - _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_start=105085 - _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_end=105184 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=105186 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=105211 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=105213 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=105267 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=105269 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=105301 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=105303 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=105354 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=105356 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=105384 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=105386 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=105505 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=105507 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=105541 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=105544 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=105993 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=105847 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=105946 - _globals['_STREAMCONNECTREQUEST']._serialized_start=105995 - _globals['_STREAMCONNECTREQUEST']._serialized_end=106017 - _globals['_PEERCONNECTNOTIFICATION']._serialized_start=106020 - _globals['_PEERCONNECTNOTIFICATION']._serialized_end=106210 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=106171 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=106210 - _globals['_PEERCONNECTADDRESS']._serialized_start=106213 - _globals['_PEERCONNECTADDRESS']._serialized_end=106495 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=106364 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=106463 - _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_start=106497 - _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_end=106524 - _globals['_COINMOVEMENTNOTIFICATION']._serialized_start=106527 - _globals['_COINMOVEMENTNOTIFICATION']._serialized_end=107982 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_start=107321 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_end=107696 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_start=107698 - _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_end=107748 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=107984 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=108008 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=108010 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=108067 - _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_start=108069 - _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_end=108101 - _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_start=108103 - _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_end=108157 - _globals['_STREAMDISCONNECTREQUEST']._serialized_start=108159 - _globals['_STREAMDISCONNECTREQUEST']._serialized_end=108184 - _globals['_DISCONNECTNOTIFICATION']._serialized_start=108186 - _globals['_DISCONNECTNOTIFICATION']._serialized_end=108222 - _globals['_STREAMFORWARDEVENTREQUEST']._serialized_start=108224 - _globals['_STREAMFORWARDEVENTREQUEST']._serialized_end=108251 - _globals['_FORWARDEVENTNOTIFICATION']._serialized_start=108254 - _globals['_FORWARDEVENTNOTIFICATION']._serialized_end=108902 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_start=108686 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_end=108762 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_start=108764 - _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_end=108804 - _globals['_STREAMINVOICECREATIONREQUEST']._serialized_start=108904 - _globals['_STREAMINVOICECREATIONREQUEST']._serialized_end=108934 - _globals['_INVOICECREATIONNOTIFICATION']._serialized_start=108937 - _globals['_INVOICECREATIONNOTIFICATION']._serialized_end=109076 - _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_start=109078 - _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_end=109107 - _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_start=109110 - _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_end=109249 - _globals['_STREAMLOGREQUEST']._serialized_start=109251 - _globals['_STREAMLOGREQUEST']._serialized_end=109269 - _globals['_LOGNOTIFICATION']._serialized_start=109272 - _globals['_LOGNOTIFICATION']._serialized_end=109474 - _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_start=109399 - _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_end=109474 - _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_start=109476 - _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_end=109514 - _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_start=109517 - _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_end=109756 - _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_start=109758 - _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_end=109792 - _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_start=109794 - _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_end=109868 - _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_start=109870 - _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_end=109898 - _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_start=109900 - _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_end=109986 - _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_start=109988 - _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_end=110016 - _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_start=110018 - _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_end=110104 - _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_start=110106 - _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_end=110135 - _globals['_SENDPAYFAILURENOTIFICATION']._serialized_start=110137 - _globals['_SENDPAYFAILURENOTIFICATION']._serialized_end=110235 - _globals['_SENDPAYFAILUREDATA']._serialized_start=110238 - _globals['_SENDPAYFAILUREDATA']._serialized_end=111455 - _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_start=110993 - _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_end=111058 - _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_start=111457 - _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_end=111486 - _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_start=111489 - _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_end=112205 - _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_start=112007 - _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_end=112043 - _globals['_STREAMSHUTDOWNREQUEST']._serialized_start=112207 - _globals['_STREAMSHUTDOWNREQUEST']._serialized_end=112230 - _globals['_SHUTDOWNNOTIFICATION']._serialized_start=112232 - _globals['_SHUTDOWNNOTIFICATION']._serialized_end=112254 - _globals['_STREAMWARNINGREQUEST']._serialized_start=112256 - _globals['_STREAMWARNINGREQUEST']._serialized_end=112278 - _globals['_WARNINGNOTIFICATION']._serialized_start=112281 - _globals['_WARNINGNOTIFICATION']._serialized_end=112455 - _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_start=112420 - _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_end=112455 - _globals['_STREAMPAYPARTENDREQUEST']._serialized_start=112457 - _globals['_STREAMPAYPARTENDREQUEST']._serialized_end=112482 - _globals['_PAYPARTENDNOTIFICATION']._serialized_start=112485 - _globals['_PAYPARTENDNOTIFICATION']._serialized_end=112982 - _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_start=112822 - _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_end=112866 - _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_start=112984 - _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_end=113011 - _globals['_PAYPARTSTARTNOTIFICATION']._serialized_start=113014 - _globals['_PAYPARTSTARTNOTIFICATION']._serialized_end=113208 - _globals['_PAYPARTSTARTHOPS']._serialized_start=113211 - _globals['_PAYPARTSTARTHOPS']._serialized_end=113370 - _globals['_NODE']._serialized_start=113373 - _globals['_NODE']._serialized_end=126743 + _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=92099 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=92102 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=92257 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=92260 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=92684 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=92687 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=92905 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=92908 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=93047 + _globals['_ASKRENELISTLAYERSLAYERSIMPRESSIONS']._serialized_start=93049 + _globals['_ASKRENELISTLAYERSLAYERSIMPRESSIONS']._serialized_end=93168 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=93171 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=93316 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=93318 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=93400 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=93402 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=93477 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=93480 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=93975 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=93978 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=94134 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=94137 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=94474 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=94477 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=94673 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=94676 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=94816 + _globals['_ASKRENECREATELAYERLAYERSIMPRESSIONS']._serialized_start=94818 + _globals['_ASKRENECREATELAYERLAYERSIMPRESSIONS']._serialized_end=94938 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=94941 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=95087 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=95089 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=95131 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=95133 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=95161 + _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_start=95163 + _globals['_ASKRENEREMOVECHANNELUPDATEREQUEST']._serialized_end=95243 + _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_start=95245 + _globals['_ASKRENEREMOVECHANNELUPDATERESPONSE']._serialized_end=95281 + _globals['_ASKRENERESERVEREQUEST']._serialized_start=95283 + _globals['_ASKRENERESERVEREQUEST']._serialized_end=95345 + _globals['_ASKRENERESERVERESPONSE']._serialized_start=95347 + _globals['_ASKRENERESERVERESPONSE']._serialized_end=95371 + _globals['_ASKRENERESERVEPATH']._serialized_start=95373 + _globals['_ASKRENERESERVEPATH']._serialized_end=95487 + _globals['_ASKRENEAGEREQUEST']._serialized_start=95489 + _globals['_ASKRENEAGEREQUEST']._serialized_end=95539 + _globals['_ASKRENEAGERESPONSE']._serialized_start=95541 + _globals['_ASKRENEAGERESPONSE']._serialized_end=95597 + _globals['_GETROUTESREQUEST']._serialized_start=95600 + _globals['_GETROUTESREQUEST']._serialized_end=95831 + _globals['_GETROUTESRESPONSE']._serialized_start=95833 + _globals['_GETROUTESRESPONSE']._serialized_end=95915 + _globals['_GETROUTESROUTES']._serialized_start=95918 + _globals['_GETROUTESROUTES']._serialized_end=96054 + _globals['_GETROUTESROUTESPATH']._serialized_start=96057 + _globals['_GETROUTESROUTESPATH']._serialized_end=96525 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=96527 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=96583 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=96585 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=96613 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=96616 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=96882 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=96803 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=96882 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=96885 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=97033 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=97036 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=97247 + _globals['_ASKRENEINFORMCHANNELIMPRESSIONS']._serialized_start=97250 + _globals['_ASKRENEINFORMCHANNELIMPRESSIONS']._serialized_end=97381 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=97384 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=97527 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=97529 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=97559 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=97562 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=97991 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=97993 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=98023 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=98026 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=98190 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=98192 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=98267 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=98270 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=98435 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=98438 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=98602 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=98604 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=98682 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=98685 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=98837 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=98839 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=98871 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=98873 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=98970 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=98973 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=99118 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=99121 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=99494 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=99496 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=99615 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=99617 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=99679 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=99681 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=99709 + _globals['_XPAYREQUEST']._serialized_start=99712 + _globals['_XPAYREQUEST']._serialized_end=100155 + _globals['_XPAYRESPONSE']._serialized_start=100158 + _globals['_XPAYRESPONSE']._serialized_end=100319 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=100321 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=100382 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=100384 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=100480 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=100483 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=100688 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=100622 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=100658 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=100690 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=100773 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=100776 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=101329 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=101137 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=101287 + _globals['_LISTCHAINMOVESREQUEST']._serialized_start=101332 + _globals['_LISTCHAINMOVESREQUEST']._serialized_end=101529 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=101465 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=101499 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=101531 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=101606 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=101609 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=102461 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=102096 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=102373 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=102464 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=102697 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=102623 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=102660 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=102699 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=102786 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=102789 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=103031 + _globals['_DELNETWORKEVENTREQUEST']._serialized_start=103033 + _globals['_DELNETWORKEVENTREQUEST']._serialized_end=103080 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=103082 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=103107 + _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_start=103110 + _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_end=103356 + _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_start=103358 + _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_end=103387 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_start=103390 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_end=103608 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_start=103541 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_end=103586 + _globals['_LISTCURRENCYRATESREQUEST']._serialized_start=103610 + _globals['_LISTCURRENCYRATESREQUEST']._serialized_end=103654 + _globals['_LISTCURRENCYRATESRESPONSE']._serialized_start=103656 + _globals['_LISTCURRENCYRATESRESPONSE']._serialized_end=103743 + _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_start=103745 + _globals['_LISTCURRENCYRATESCURRENCYRATES']._serialized_end=103809 + _globals['_CURRENCYCONVERTREQUEST']._serialized_start=103811 + _globals['_CURRENCYCONVERTREQUEST']._serialized_end=103869 + _globals['_CURRENCYCONVERTRESPONSE']._serialized_start=103871 + _globals['_CURRENCYCONVERTRESPONSE']._serialized_end=103923 + _globals['_CURRENCYRATEREQUEST']._serialized_start=103925 + _globals['_CURRENCYRATEREQUEST']._serialized_end=103996 + _globals['_CURRENCYRATERESPONSE']._serialized_start=103998 + _globals['_CURRENCYRATERESPONSE']._serialized_end=104034 + _globals['_SENDAMOUNTREQUEST']._serialized_start=104037 + _globals['_SENDAMOUNTREQUEST']._serialized_end=104314 + _globals['_SENDAMOUNTRESPONSE']._serialized_start=104317 + _globals['_SENDAMOUNTRESPONSE']._serialized_end=104484 + _globals['_CREATEPROOFREQUEST']._serialized_start=104486 + _globals['_CREATEPROOFREQUEST']._serialized_end=104587 + _globals['_CREATEPROOFRESPONSE']._serialized_start=104589 + _globals['_CREATEPROOFRESPONSE']._serialized_end=104650 + _globals['_CREATEPROOFPROOFS']._serialized_start=104653 + _globals['_CREATEPROOFPROOFS']._serialized_end=104835 + _globals['_XKEYSENDREQUEST']._serialized_start=104838 + _globals['_XKEYSENDREQUEST']._serialized_end=105181 + _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_start=105085 + _globals['_XKEYSENDREQUEST_EXTRATLVSENTRY']._serialized_end=105133 + _globals['_XKEYSENDRESPONSE']._serialized_start=105184 + _globals['_XKEYSENDRESPONSE']._serialized_end=105349 + _globals['_GRACEFULREQUEST']._serialized_start=105351 + _globals['_GRACEFULREQUEST']._serialized_end=105402 + _globals['_GRACEFULRESPONSE']._serialized_start=105404 + _globals['_GRACEFULRESPONSE']._serialized_end=105476 + _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_start=105478 + _globals['_STREAMBALANCESNAPSHOTREQUEST']._serialized_end=105508 + _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_start=105511 + _globals['_BALANCESNAPSHOTNOTIFICATION']._serialized_end=105645 + _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_start=105647 + _globals['_BALANCESNAPSHOTACCOUNTS']._serialized_end=105746 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=105748 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=105773 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=105775 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=105829 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=105831 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=105863 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=105865 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=105916 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=105918 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=105946 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=105948 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=106067 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=106069 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=106103 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=106106 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=106555 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=106409 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=106508 + _globals['_STREAMCONNECTREQUEST']._serialized_start=106557 + _globals['_STREAMCONNECTREQUEST']._serialized_end=106579 + _globals['_PEERCONNECTNOTIFICATION']._serialized_start=106582 + _globals['_PEERCONNECTNOTIFICATION']._serialized_end=106772 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=106733 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=106772 + _globals['_PEERCONNECTADDRESS']._serialized_start=106775 + _globals['_PEERCONNECTADDRESS']._serialized_end=107057 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=106926 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=107025 + _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_start=107059 + _globals['_STREAMCOINMOVEMENTREQUEST']._serialized_end=107086 + _globals['_COINMOVEMENTNOTIFICATION']._serialized_start=107089 + _globals['_COINMOVEMENTNOTIFICATION']._serialized_end=108544 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_start=107883 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTPRIMARYTAG']._serialized_end=108258 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_start=108260 + _globals['_COINMOVEMENTNOTIFICATION_COINMOVEMENTTYPE']._serialized_end=108310 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=108546 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=108570 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=108572 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=108629 + _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_start=108631 + _globals['_STREAMDEPRECATEDONESHOTREQUEST']._serialized_end=108663 + _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_start=108665 + _globals['_DEPRECATEDONESHOTNOTIFICATION']._serialized_end=108719 + _globals['_STREAMDISCONNECTREQUEST']._serialized_start=108721 + _globals['_STREAMDISCONNECTREQUEST']._serialized_end=108746 + _globals['_DISCONNECTNOTIFICATION']._serialized_start=108748 + _globals['_DISCONNECTNOTIFICATION']._serialized_end=108784 + _globals['_STREAMFORWARDEVENTREQUEST']._serialized_start=108786 + _globals['_STREAMFORWARDEVENTREQUEST']._serialized_end=108813 + _globals['_FORWARDEVENTNOTIFICATION']._serialized_start=108816 + _globals['_FORWARDEVENTNOTIFICATION']._serialized_end=109464 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_start=109248 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTATUS']._serialized_end=109324 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_start=109326 + _globals['_FORWARDEVENTNOTIFICATION_FORWARDEVENTSTYLE']._serialized_end=109366 + _globals['_STREAMINVOICECREATIONREQUEST']._serialized_start=109466 + _globals['_STREAMINVOICECREATIONREQUEST']._serialized_end=109496 + _globals['_INVOICECREATIONNOTIFICATION']._serialized_start=109499 + _globals['_INVOICECREATIONNOTIFICATION']._serialized_end=109638 + _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_start=109640 + _globals['_STREAMINVOICEPAYMENTREQUEST']._serialized_end=109669 + _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_start=109672 + _globals['_INVOICEPAYMENTNOTIFICATION']._serialized_end=109811 + _globals['_STREAMLOGREQUEST']._serialized_start=109813 + _globals['_STREAMLOGREQUEST']._serialized_end=109831 + _globals['_LOGNOTIFICATION']._serialized_start=109834 + _globals['_LOGNOTIFICATION']._serialized_end=110036 + _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_start=109961 + _globals['_LOGNOTIFICATION_LOGLEVEL']._serialized_end=110036 + _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_start=110038 + _globals['_STREAMONIONMESSAGEFORWARDFAILREQUEST']._serialized_end=110076 + _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_start=110079 + _globals['_ONIONMESSAGEFORWARDFAILNOTIFICATION']._serialized_end=110318 + _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_start=110320 + _globals['_STREAMOPENCHANNELPEERSIGSREQUEST']._serialized_end=110354 + _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_start=110356 + _globals['_OPENCHANNELPEERSIGSNOTIFICATION']._serialized_end=110430 + _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_start=110432 + _globals['_STREAMPLUGINSTARTEDREQUEST']._serialized_end=110460 + _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_start=110462 + _globals['_PLUGINSTARTEDNOTIFICATION']._serialized_end=110548 + _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_start=110550 + _globals['_STREAMPLUGINSTOPPEDREQUEST']._serialized_end=110578 + _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_start=110580 + _globals['_PLUGINSTOPPEDNOTIFICATION']._serialized_end=110666 + _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_start=110668 + _globals['_STREAMSENDPAYFAILUREREQUEST']._serialized_end=110697 + _globals['_SENDPAYFAILURENOTIFICATION']._serialized_start=110699 + _globals['_SENDPAYFAILURENOTIFICATION']._serialized_end=110797 + _globals['_SENDPAYFAILUREDATA']._serialized_start=110800 + _globals['_SENDPAYFAILUREDATA']._serialized_end=112017 + _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_start=111555 + _globals['_SENDPAYFAILUREDATA_SENDPAYFAILUREDATASTATUS']._serialized_end=111620 + _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_start=112019 + _globals['_STREAMSENDPAYSUCCESSREQUEST']._serialized_end=112048 + _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_start=112051 + _globals['_SENDPAYSUCCESSNOTIFICATION']._serialized_end=112767 + _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_start=112569 + _globals['_SENDPAYSUCCESSNOTIFICATION_SENDPAYSUCCESSSTATUS']._serialized_end=112605 + _globals['_STREAMSHUTDOWNREQUEST']._serialized_start=112769 + _globals['_STREAMSHUTDOWNREQUEST']._serialized_end=112792 + _globals['_SHUTDOWNNOTIFICATION']._serialized_start=112794 + _globals['_SHUTDOWNNOTIFICATION']._serialized_end=112816 + _globals['_STREAMWARNINGREQUEST']._serialized_start=112818 + _globals['_STREAMWARNINGREQUEST']._serialized_end=112840 + _globals['_WARNINGNOTIFICATION']._serialized_start=112843 + _globals['_WARNINGNOTIFICATION']._serialized_end=113017 + _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_start=112982 + _globals['_WARNINGNOTIFICATION_WARNINGLEVEL']._serialized_end=113017 + _globals['_STREAMPAYPARTENDREQUEST']._serialized_start=113019 + _globals['_STREAMPAYPARTENDREQUEST']._serialized_end=113044 + _globals['_PAYPARTENDNOTIFICATION']._serialized_start=113047 + _globals['_PAYPARTENDNOTIFICATION']._serialized_end=113544 + _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_start=113384 + _globals['_PAYPARTENDNOTIFICATION_PAYPARTENDSTATUS']._serialized_end=113428 + _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_start=113546 + _globals['_STREAMPAYPARTSTARTREQUEST']._serialized_end=113573 + _globals['_PAYPARTSTARTNOTIFICATION']._serialized_start=113576 + _globals['_PAYPARTSTARTNOTIFICATION']._serialized_end=113770 + _globals['_PAYPARTSTARTHOPS']._serialized_start=113773 + _globals['_PAYPARTSTARTHOPS']._serialized_end=113932 + _globals['_NODE']._serialized_start=113935 + _globals['_NODE']._serialized_end=127305 # @@protoc_insertion_point(module_scope) diff --git a/contrib/pyln-testing/pyln/testing/grpc2py.py b/contrib/pyln-testing/pyln/testing/grpc2py.py index c8f6f15adeeb..10ada6ad61b4 100644 --- a/contrib/pyln-testing/pyln/testing/grpc2py.py +++ b/contrib/pyln-testing/pyln/testing/grpc2py.py @@ -3058,6 +3058,14 @@ def askrene_listlayers_layers_created_channels2py(m): }) +def askrene_listlayers_layers_impressions2py(m): + return remove_default({ + "amount_msat": amount2msat(m.amount_msat), # PrimitiveField in generate_composite + "short_channel_id_dir": m.short_channel_id_dir, # PrimitiveField in generate_composite + "timestamp": m.timestamp, # PrimitiveField in generate_composite + }) + + def askrene_listlayers_layers_node_biases2py(m): return remove_default({ "description": m.description, # PrimitiveField in generate_composite @@ -3076,6 +3084,7 @@ def askrene_listlayers_layers2py(m): "created_channels": [askrene_listlayers_layers_created_channels2py(i) for i in m.created_channels], # ArrayField[composite] in generate_composite "disabled_channels": [m.disabled_channels for i in m.disabled_channels], # ArrayField[primitive] in generate_composite "disabled_nodes": [hexlify(m.disabled_nodes) for i in hexlify(m.disabled_nodes)], # ArrayField[primitive] in generate_composite + "impressions": [askrene_listlayers_layers_impressions2py(i) for i in m.impressions], # ArrayField[composite] in generate_composite "node_biases": [askrene_listlayers_layers_node_biases2py(i) for i in m.node_biases], # ArrayField[composite] in generate_composite "layer": m.layer, # PrimitiveField in generate_composite "persistent": m.persistent, # PrimitiveField in generate_composite @@ -3125,6 +3134,14 @@ def askrene_create_layer_layers_created_channels2py(m): }) +def askrene_create_layer_layers_impressions2py(m): + return remove_default({ + "amount_msat": amount2msat(m.amount_msat), # PrimitiveField in generate_composite + "short_channel_id_dir": m.short_channel_id_dir, # PrimitiveField in generate_composite + "timestamp": m.timestamp, # PrimitiveField in generate_composite + }) + + def askrene_create_layer_layers_node_biases2py(m): return remove_default({ "description": m.description, # PrimitiveField in generate_composite @@ -3143,6 +3160,7 @@ def askrene_create_layer_layers2py(m): "created_channels": [askrene_create_layer_layers_created_channels2py(i) for i in m.created_channels], # ArrayField[composite] in generate_composite "disabled_channels": [m.disabled_channels for i in m.disabled_channels], # ArrayField[primitive] in generate_composite "disabled_nodes": [hexlify(m.disabled_nodes) for i in hexlify(m.disabled_nodes)], # ArrayField[primitive] in generate_composite + "impressions": [askrene_create_layer_layers_impressions2py(i) for i in m.impressions], # ArrayField[composite] in generate_composite "node_biases": [askrene_create_layer_layers_node_biases2py(i) for i in m.node_biases], # ArrayField[composite] in generate_composite "layer": m.layer, # PrimitiveField in generate_composite "persistent": m.persistent, # PrimitiveField in generate_composite @@ -3223,9 +3241,19 @@ def askrene_inform_channel_constraints2py(m): }) +def askrene_inform_channel_impressions2py(m): + return remove_default({ + "amount_msat": amount2msat(m.amount_msat), # PrimitiveField in generate_composite + "layer": m.layer, # PrimitiveField in generate_composite + "short_channel_id_dir": m.short_channel_id_dir, # PrimitiveField in generate_composite + "timestamp": m.timestamp, # PrimitiveField in generate_composite + }) + + def askrene_inform_channel2py(m): return remove_default({ "constraints": [askrene_inform_channel_constraints2py(i) for i in m.constraints], # ArrayField[composite] in generate_composite + "impressions": [askrene_inform_channel_impressions2py(i) for i in m.impressions], # ArrayField[composite] in generate_composite }) diff --git a/doc/schemas/askrene-create-layer.json b/doc/schemas/askrene-create-layer.json index 8f2b967c5d6b..cec59e4d87c8 100644 --- a/doc/schemas/askrene-create-layer.json +++ b/doc/schemas/askrene-create-layer.json @@ -45,7 +45,8 @@ "disabled_nodes", "created_channels", "channel_updates", - "constraints" + "constraints", + "impressions" ], "properties": { "layer": { @@ -196,6 +197,39 @@ } } }, + "impressions": { + "added": "v26.09", + "type": "array", + "items": { + "type": "object", + "required": [ + "short_channel_id_dir", + "timestamp", + "amount_msat" + ], + "additionalProperties": false, + "properties": { + "short_channel_id_dir": { + "type": "short_channel_id_dir", + "description": [ + "The short channel id and direction." + ] + }, + "timestamp": { + "type": "u64", + "description": [ + "The UNIX timestamp when this constraint was created." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "The amount we successfully sent through this channel (implying its capacity is that much less, and the reverse direction that much more)" + ] + } + } + } + }, "biases": { "type": "array", "items": { @@ -323,6 +357,7 @@ "created_channels": [], "channel_updates": [], "constraints": [], + "impressions": [], "biases": [], "node_biases": [] } diff --git a/doc/schemas/askrene-inform-channel.json b/doc/schemas/askrene-inform-channel.json index 4450e9af2920..8e0b5bd64750 100644 --- a/doc/schemas/askrene-inform-channel.json +++ b/doc/schemas/askrene-inform-channel.json @@ -42,14 +42,16 @@ "succeeded" ], "description": [ - "Whether this payment passed (implying capacity of at least that amount), failed (implying maximum capacity of one msat less), or succeeded (implying capacity has been reduced in this direction)" + "Whether this payment passed (implying capacity of at least that amount), failed (implying maximum capacity of one msat less), or succeeded (implying capacity has been reduced in this direction)", + "If `succeeded`, then an `impression` is created and returned, otherwise a `constraint` is created and returned." ] } } }, "response": { "required": [ - "constraints" + "constraints", + "impressions" ], "additionalProperties": false, "properties": { @@ -96,6 +98,46 @@ } } } + }, + "impressions": { + "added": "v26.09", + "type": "array", + "items": { + "type": "object", + "required": [ + "layer", + "short_channel_id_dir", + "timestamp", + "amount_msat" + ], + "additionalProperties": false, + "properties": { + "short_channel_id_dir": { + "type": "short_channel_id_dir", + "description": [ + "The short channel id and direction." + ] + }, + "layer": { + "type": "string", + "description": [ + "The name of the layer to apply this change to." + ] + }, + "timestamp": { + "type": "u64", + "description": [ + "The UNIX timestamp when this constraint was created." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "The amount we successfully sent through this channel (implying its capacity is that much less, and the reverse direction that much more)" + ] + } + } + } } } }, diff --git a/doc/schemas/askrene-listlayers.json b/doc/schemas/askrene-listlayers.json index 8531cb72bd7e..73c33cba92ac 100644 --- a/doc/schemas/askrene-listlayers.json +++ b/doc/schemas/askrene-listlayers.json @@ -36,6 +36,7 @@ "disabled_nodes", "created_channels", "channel_updates", + "impressions", "constraints" ], "properties": { @@ -198,6 +199,39 @@ } } }, + "impressions": { + "added": "v26.09", + "type": "array", + "items": { + "type": "object", + "required": [ + "short_channel_id_dir", + "timestamp", + "amount_msat" + ], + "additionalProperties": false, + "properties": { + "short_channel_id_dir": { + "type": "short_channel_id_dir", + "description": [ + "The short channel id and direction." + ] + }, + "timestamp": { + "type": "u64", + "description": [ + "The UNIX timestamp when this constraint was created." + ] + }, + "amount_msat": { + "type": "msat", + "description": [ + "The amount we successfully sent through this channel (implying its capacity is that much less, and the reverse direction that much more)" + ] + } + } + } + }, "biases": { "type": "array", "items": { diff --git a/plugins/askrene/askrene.c b/plugins/askrene/askrene.c index b503000c46ed..1fc2f1b8b355 100644 --- a/plugins/askrene/askrene.c +++ b/plugins/askrene/askrene.c @@ -1183,6 +1183,7 @@ static struct command_result *json_askrene_inform_channel(struct command *cmd, struct amount_msat *amount; enum inform *inform; const struct constraint *c; + const struct impression *imp; if (!param_check(cmd, buffer, params, p_req("layer", param_known_layer, &layer), @@ -1205,6 +1206,7 @@ static struct command_result *json_askrene_inform_channel(struct command *cmd, *amount = AMOUNT_MSAT(0); if (command_check_only(cmd)) return command_check_done(cmd); + imp = NULL; c = layer_add_constraint(layer, scidd, clock_time().ts.tv_sec, NULL, amount); goto output; @@ -1213,12 +1215,16 @@ static struct command_result *json_askrene_inform_channel(struct command *cmd, * that no reserves were used) */ if (command_check_only(cmd)) return command_check_done(cmd); + imp = NULL; c = layer_add_constraint(layer, scidd, clock_time().ts.tv_sec, amount, NULL); goto output; case INFORM_SUCCEEDED: - /* FIXME: We could do something useful here! */ + if (command_check_only(cmd)) + return command_check_done(cmd); c = NULL; + imp = layer_add_impression(layer, scidd, clock_time().ts.tv_sec, + *amount); goto output; } abort(); @@ -1229,6 +1235,10 @@ static struct command_result *json_askrene_inform_channel(struct command *cmd, if (c) json_add_constraint(response, NULL, c, layer); json_array_end(response); + json_array_start(response, "impressions"); + if (imp) + json_add_impression(response, NULL, imp, layer); + json_array_end(response); return command_finished(cmd, response); } diff --git a/plugins/askrene/child/route_query.c b/plugins/askrene/child/route_query.c index f6366eaf354d..fd9511d0b961 100644 --- a/plugins/askrene/child/route_query.c +++ b/plugins/askrene/child/route_query.c @@ -33,20 +33,18 @@ void get_constraints(const struct route_query *rq, return; } + /* Might be here because it's reserved, but capacity is normal. */ + *max = gossmap_chan_get_capacity(rq->gossmap, chan); + /* Naive implementation! */ scidd.scid = gossmap_chan_scid(rq->gossmap, chan); scidd.dir = dir; - *max = AMOUNT_MSAT(-1ULL); /* Look through layers for any constraints (might be dummy * ones, for created channels!) */ for (size_t i = 0; i < tal_count(rq->layers); i++) layer_apply_constraints(rq->layers[i], &scidd, min, max); - /* Might be here because it's reserved, but capacity is normal. */ - if (amount_msat_eq(*max, AMOUNT_MSAT(-1ULL))) - *max = gossmap_chan_get_capacity(rq->gossmap, chan); - /* Finally, if any is in use, subtract that! */ reserve_sub(rq->reserved, &scidd, rq->layers, min); reserve_sub(rq->reserved, &scidd, rq->layers, max); diff --git a/plugins/askrene/datastore_wire.c b/plugins/askrene/datastore_wire.c index 022b7a60a762..7b8c5e4699d6 100644 --- a/plugins/askrene/datastore_wire.c +++ b/plugins/askrene/datastore_wire.c @@ -216,6 +216,35 @@ void towire_dstore_channel_constraint(u8 **data, towire_opt_amount_msat(data, max); } +bool fromwire_dstore_channel_impression(const tal_t *ctx, + const u8 **cursor, size_t *len, + struct short_channel_id_dir *scidd, + u64 *timestamp, + struct amount_msat *amount) +{ + if (fromwire_u16(cursor, len) != DSTORE_CHANNEL_IMPRESSION) { + fromwire_fail(cursor, len); + return false; + } + + fromwire_short_channel_id_dir(cursor, len, scidd); + *timestamp = fromwire_u64(cursor, len); + *amount = fromwire_amount_msat(cursor, len); + + return *cursor != NULL; +} + +void towire_dstore_channel_impression(u8 **data, + const struct short_channel_id_dir *scidd, + u64 timestamp, + struct amount_msat amount) +{ + towire_u16(data, DSTORE_CHANNEL_IMPRESSION); + towire_short_channel_id_dir(data, scidd); + towire_u64(data, timestamp); + towire_amount_msat(data, amount); +} + bool fromwire_dstore_channel_bias(const tal_t *ctx, const u8 **cursor, size_t *len, struct short_channel_id_dir *scidd, diff --git a/plugins/askrene/datastore_wire.h b/plugins/askrene/datastore_wire.h index 70282ad3f3b2..bf78cf276a53 100644 --- a/plugins/askrene/datastore_wire.h +++ b/plugins/askrene/datastore_wire.h @@ -17,6 +17,7 @@ enum dstore_layer_type { DSTORE_DISABLED_NODE = 5, DSTORE_CHANNEL_BIAS_V2 = 6, DSTORE_NODE_BIAS = 7, + DSTORE_CHANNEL_IMPRESSION = 8, }; bool fromwire_dstore_channel(const u8 **cursor, size_t *len, @@ -60,6 +61,16 @@ void towire_dstore_channel_constraint(u8 **data, const struct amount_msat *min, const struct amount_msat *max); +bool fromwire_dstore_channel_impression(const tal_t *ctx, + const u8 **cursor, size_t *len, + struct short_channel_id_dir *scidd, + u64 *timestamp, + struct amount_msat *amount); +void towire_dstore_channel_impression(u8 **data, + const struct short_channel_id_dir *scidd, + u64 timestamp, + struct amount_msat amount); + bool fromwire_dstore_channel_bias(const tal_t *ctx, const u8 **cursor, size_t *len, struct short_channel_id_dir *scidd, diff --git a/plugins/askrene/layer.c b/plugins/askrene/layer.c index 2c07ce77f523..6df046e3b971 100644 --- a/plugins/askrene/layer.c +++ b/plugins/askrene/layer.c @@ -45,6 +45,15 @@ struct constraint { struct amount_msat max; }; +/* An impression reflects something we did to a channel (successful payments) */ +struct impression { + /* This is the direction of the payment, but it affects both ways */ + struct short_channel_id_dir scidd; + /* Time this constraint was last updated */ + u64 timestamp; + struct amount_msat amount; +}; + /* A bias, for special-effects (user-controlled) */ struct bias { struct short_channel_id_dir scidd; @@ -75,6 +84,21 @@ static inline bool constraint_eq_scidd(const struct constraint *c, HTABLE_DEFINE_DUPS_TYPE(struct constraint, constraint_scidd, hash_scidd, constraint_eq_scidd, constraint_hash); +static struct short_channel_id +impression_scid(const struct impression *imp) +{ + return imp->scidd.scid; +} + +static inline bool impression_eq_scid(const struct impression *imp, + struct short_channel_id scid) +{ + return short_channel_id_eq(scid, imp->scidd.scid); +} + +HTABLE_DEFINE_DUPS_TYPE(struct impression, impression_scid, hash_scid, + impression_eq_scid, impression_hash); + static struct short_channel_id local_channel_scid(const struct local_channel *lc) { @@ -158,6 +182,9 @@ struct layer { /* Additional info, indexed by scid+dir */ struct constraint_hash *constraints; + /* Usage info, indexed by scid */ + struct impression_hash *impressions; + /* Bias, indexed by scid+dir */ struct bias_hash *biases; @@ -197,6 +224,7 @@ struct layer *new_temp_layer(const tal_t *ctx, struct askrene *askrene, const ch l->local_channels = new_htable(l, local_channel_hash); l->local_updates = new_htable(l, local_update_hash); l->constraints = new_htable(l, constraint_hash); + l->impressions = new_htable(l, impression_hash); l->biases = new_htable(l, bias_hash); l->node_biases = new_htable(l, node_bias_hash); l->disabled_nodes = tal_arr(l, struct node_id, 0); @@ -316,6 +344,20 @@ static const struct constraint *add_constraint(struct layer *layer, return c; } +static const struct impression *add_impression(struct layer *layer, + const struct short_channel_id_dir *scidd, + u64 timestamp, + struct amount_msat amount) +{ + struct impression *imp = tal(layer, struct impression); + imp->scidd = *scidd; + imp->amount = amount; + imp->timestamp = timestamp; + + impression_hash_add(layer->impressions, imp); + return imp; +} + static const struct bias *set_bias(struct layer *layer, const struct short_channel_id_dir *scidd, const char *description TAKES, @@ -565,6 +607,38 @@ static void load_channel_constraint(struct plugin *plugin, add_constraint(layer, &scidd, timestamp, min, max); } +static void towire_save_channel_impression(u8 **data, const struct impression *imp) +{ + towire_dstore_channel_impression(data, &imp->scidd, imp->timestamp, imp->amount); +} + +static void save_channel_impression(struct layer *layer, const struct impression *imp) +{ + u8 *data; + + if (!layer->persistent) + return; + + data = tal_arr(tmpctx, u8, 0); + towire_save_channel_impression(&data, imp); + append_layer_datastore(layer, data); +} + +static void load_channel_impression(struct plugin *plugin, + struct layer *layer, + const u8 **cursor, + size_t *len) +{ + struct short_channel_id_dir scidd; + struct amount_msat amount; + u64 timestamp; + + if (fromwire_dstore_channel_impression(tmpctx, cursor, len, + &scidd, ×tamp, + &amount)) + add_impression(layer, &scidd, timestamp, amount); +} + static void towire_save_channel_bias(u8 **data, const struct bias *bias) { towire_dstore_channel_bias_v2(data, @@ -702,6 +776,8 @@ static void save_complete_layer(struct layer *layer) struct local_update_hash_iter luit; struct constraint_hash_iter conit; const struct constraint *c; + struct impression_hash_iter impit; + const struct impression *imp; struct bias_hash_iter biasit; const struct bias *b; struct node_bias_hash_iter nbiasit; @@ -734,6 +810,11 @@ static void save_complete_layer(struct layer *layer) continue; towire_save_channel_constraint(&data, c); } + for (imp = impression_hash_first(layer->impressions, &impit); + imp; + imp = impression_hash_next(layer->impressions, &impit)) { + towire_save_channel_impression(&data, imp); + } for (b = bias_hash_first(layer->biases, &biasit); b; b = bias_hash_next(layer->biases, &biasit)) { @@ -794,6 +875,9 @@ static void populate_layer(struct askrene *askrene, case DSTORE_NODE_BIAS: load_node_bias(askrene->plugin, layer, &data, &len); continue; + case DSTORE_CHANNEL_IMPRESSION: + load_channel_impression(askrene->plugin, layer, &data, &len); + continue; } plugin_err(askrene->plugin, "Invalid type %i in datastore: layer %s %s", type, layer->name, tal_hexstr(tmpctx, data, len)); @@ -1000,6 +1084,8 @@ void layer_apply_constraints(const struct layer *layer, { struct constraint *c; struct constraint_hash_iter cit; + struct impression *imp; + struct impression_hash_iter impit; /* We can have more than one: apply them all! */ for (c = constraint_hash_getfirst(layer->constraints, scidd, &cit); @@ -1008,6 +1094,27 @@ void layer_apply_constraints(const struct layer *layer, *min = amount_msat_max(*min, c->min); *max = amount_msat_min(*max, c->max); } + + /* FIXME: we apply our usage at the end. This is wrong (but + * simple): we should interleave with the above based on + * timestamp. */ + for (imp = impression_hash_getfirst(layer->impressions, scidd->scid, &impit); + imp; + imp = impression_hash_getnext(layer->impressions, scidd->scid, &impit)) { + /* We made payment along this channel? Capacity has reduced */ + if (scidd->dir == imp->scidd.dir) { + if (!amount_msat_sub(min, *min, imp->amount)) + *min = AMOUNT_MSAT(0); + if (!amount_msat_sub(max, *max, imp->amount)) + *max = AMOUNT_MSAT(0); + } else { + /* We made the other way? Capacity has increased */ + if (!amount_msat_add(min, *min, imp->amount)) + *min = AMOUNT_MSAT(-1ULL); + if (!amount_msat_add(max, *max, imp->amount)) + *max = AMOUNT_MSAT(-1ULL); + } + } } const struct constraint *layer_add_constraint(struct layer *layer, @@ -1023,6 +1130,18 @@ const struct constraint *layer_add_constraint(struct layer *layer, return c; } +const struct impression *layer_add_impression(struct layer *layer, + const struct short_channel_id_dir *scidd, + u64 timestamp, + struct amount_msat amount) +{ + const struct impression *imp; + + imp = add_impression(layer, scidd, timestamp, amount); + save_channel_impression(layer, imp); + return imp; +} + void layer_clear_overridden_capacities(const struct layer *layer, const struct gossmap *gossmap, fp16_t *capacities) @@ -1052,6 +1171,8 @@ size_t layer_trim_constraints(struct layer *layer, u64 cutoff) struct bias *bias; struct node_bias_hash_iter node_it; struct node_bias *node_bias; + struct impression *imp; + struct impression_hash_iter impit; for (con = constraint_hash_first(layer->constraints, &conit); con; @@ -1063,6 +1184,16 @@ size_t layer_trim_constraints(struct layer *layer, u64 cutoff) } } + for (imp = impression_hash_first(layer->impressions, &impit); + imp; + imp = impression_hash_next(layer->impressions, &impit)) { + if (imp->timestamp < cutoff) { + impression_hash_delval(layer->impressions, &impit); + tal_free(imp); + num_removed++; + } + } + for (bias = bias_hash_first(layer->biases, &biasit); bias; bias = bias_hash_next(layer->biases, &biasit)) { if (bias->timestamp < cutoff) { @@ -1216,6 +1347,20 @@ void json_add_constraint(struct json_stream *js, json_object_end(js); } +void json_add_impression(struct json_stream *js, + const char *fieldname, + const struct impression *imp, + const struct layer *layer) +{ + json_object_start(js, fieldname); + if (layer) + json_add_string(js, "layer", layer->name); + json_add_short_channel_id_dir(js, "short_channel_id_dir", imp->scidd); + json_add_u64(js, "timestamp", imp->timestamp); + json_add_amount_msat(js, "amount_msat", imp->amount); + json_object_end(js); +} + void json_add_bias(struct json_stream *js, const char *fieldname, const struct bias *b, @@ -1259,6 +1404,8 @@ static void json_add_layer(struct json_stream *js, struct local_update_hash_iter luit; struct constraint_hash_iter conit; const struct constraint *c; + struct impression_hash_iter impit; + const struct impression *imp; struct bias_hash_iter biasit; const struct bias *b; struct node_bias_hash_iter node_it; @@ -1295,6 +1442,13 @@ static void json_add_layer(struct json_stream *js, json_add_constraint(js, NULL, c, NULL); } json_array_end(js); + json_array_start(js, "impressions"); + for (imp = impression_hash_first(layer->impressions, &impit); + imp; + imp = impression_hash_next(layer->impressions, &impit)) { + json_add_impression(js, NULL, imp, NULL); + } + json_array_end(js); json_array_start(js, "biases"); for (b = bias_hash_first(layer->biases, &biasit); b; diff --git a/plugins/askrene/layer.h b/plugins/askrene/layer.h index f70e39f0c31d..9c33dbfc57d2 100644 --- a/plugins/askrene/layer.h +++ b/plugins/askrene/layer.h @@ -107,13 +107,19 @@ void layer_apply_biases(const struct layer *layer, const struct gossmap *gossmap, s8 *biases); -/* Add one or more constraints on a layer. */ +/* Add a constraint to a layer. */ const struct constraint *layer_add_constraint(struct layer *layer, const struct short_channel_id_dir *scidd, u64 timestamp, const struct amount_msat *min, const struct amount_msat *max); +/* Add a usage constraint to a layer: a successful payment has given us more info */ +const struct impression *layer_add_impression(struct layer *layer, + const struct short_channel_id_dir *scidd, + u64 timestamp, + struct amount_msat amount); + /* Add local channels from this layer. */ void layer_add_localmods(const struct layer *layer, const struct gossmap *gossmap, @@ -137,6 +143,12 @@ void json_add_constraint(struct json_stream *js, const struct constraint *c, const struct layer *layer); +/* Print a usage constraint */ +void json_add_impression(struct json_stream *js, + const char *fieldname, + const struct impression *imp, + const struct layer *layer); + /* Print a single bias */ void json_add_bias(struct json_stream *js, const char *fieldname, diff --git a/tests/test_askrene.py b/tests/test_askrene.py index 1aaa4f732880..26c93207d592 100644 --- a/tests/test_askrene.py +++ b/tests/test_askrene.py @@ -144,6 +144,7 @@ def test_layers(node_factory): 'created_channels': [], 'channel_updates': [], 'constraints': [], + 'impressions': [], 'biases': [], 'node_biases': []} l2.rpc.askrene_create_layer('test_layers') @@ -272,6 +273,29 @@ def test_layers(node_factory): listlayers = l2.rpc.askrene_listlayers('test_layers') assert listlayers == {'layers': [expect]} + # Test succeeded inform creates an impression (not a constraint). + first_timestamp = int(time.time()) + r = l2.rpc.askrene_inform_channel('test_layers', scid12dir, 50000, 'succeeded') + last_timestamp = int(time.time()) + 1 + assert r['constraints'] == [] + assert len(r['impressions']) == 1 + assert r['impressions'][0]['amount_msat'] == 50000 + + listlayers = l2.rpc.askrene_listlayers('test_layers') + ts_imp = only_one(only_one(listlayers['layers'])['impressions'])['timestamp'] + assert first_timestamp <= ts_imp <= last_timestamp + expect['impressions'] = [{'short_channel_id_dir': scid12dir, + 'timestamp': ts_imp, + 'amount_msat': 50000}] + assert listlayers == {'layers': [expect]} + + # Impression aging: ts_imp does nothing. + assert l2.rpc.askrene_age('test_layers', ts_imp) == {'layer': 'test_layers', 'num_removed': 0} + # ts_imp+1 removes it. + assert l2.rpc.askrene_age('test_layers', ts_imp + 1) == {'layer': 'test_layers', 'num_removed': 1} + expect['impressions'] = [] + assert l2.rpc.askrene_listlayers('test_layers') == {'layers': [expect]} + with pytest.raises(RpcError, match="Unknown layer"): l2.rpc.askrene_remove_layer('test_layers_unknown') @@ -347,6 +371,7 @@ def test_node_bias_rpc(node_factory): "created_channels": [], "channel_updates": [], "constraints": [], + "impressions": [], "biases": [], "node_biases": [], } @@ -455,6 +480,7 @@ def test_node_bias_persistence(node_factory): "created_channels": [], "channel_updates": [], "constraints": [], + "impressions": [], "biases": [], "node_biases": [], } @@ -579,6 +605,7 @@ def test_layer_persistence(node_factory): 'created_channels': [], 'channel_updates': [], 'constraints': [], + 'impressions': [], 'biases': [], 'node_biases': []} assert l1.rpc.askrene_listlayers('test_layer_persistence') == {'layers': [expect]} @@ -620,6 +647,10 @@ def test_layer_persistence(node_factory): short_channel_id_dir=scid12dir, amount_msat=12341235, inform='constrained') + l1.rpc.askrene_inform_channel(layer='test_layer_persistence', + short_channel_id_dir=scid12dir, + amount_msat=50000, + inform='succeeded') expect = l1.rpc.askrene_listlayers('test_layer_persistence') diff --git a/tools/lightning-downgrade.c b/tools/lightning-downgrade.c index a1fc9beb7b0f..ff92fc6ae96c 100644 --- a/tools/lightning-downgrade.c +++ b/tools/lightning-downgrade.c @@ -113,6 +113,9 @@ static const char *convert_layer_data(const tal_t *ctx, case DSTORE_NODE_BIAS: return "Askrene has a node bias, which is not supported in v25.09"; + case DSTORE_CHANNEL_IMPRESSION: + /* FIXME */ + break; } return tal_fmt(ctx, "Unknown askrene layer record %u in %s", type, layername); From 672769c5f797c0066348479eea781726964c3d48 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 15:49:44 +0930 Subject: [PATCH 09/20] downgrade: we need to remove "impressions" from askrene datastore when downgrading to v26.06. Signed-off-by: Rusty Russell --- tools/lightning-downgrade.c | 53 ++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/tools/lightning-downgrade.c b/tools/lightning-downgrade.c index ff92fc6ae96c..abe8b04dec74 100644 --- a/tools/lightning-downgrade.c +++ b/tools/lightning-downgrade.c @@ -44,12 +44,16 @@ static void copy_data(u8 **out, const u8 *in, size_t len) tal_arr_appendn(out, in, len); } -/* askrene added DSTORE_CHANNEL_BIAS_V2 (convertable) and - * DSTORE_NODE_BIAS (not convertable) */ +/* v25.12: askrene added DSTORE_CHANNEL_BIAS_V2 (convertable) and + * DSTORE_NODE_BIAS (not convertable) + * v26.09: askrene added DSTORE_CHANNEL_IMPRESSION. + */ static const char *convert_layer_data(const tal_t *ctx, const char *layername, const u8 *data_in, - const u8 **data_out) + const u8 **data_out, + bool convert_bias, + bool convert_impression) { size_t len = tal_bytelen(data_in); struct node_id n; @@ -107,15 +111,29 @@ static const char *convert_layer_data(const tal_t *ctx, if (fromwire_dstore_channel_bias_v2(tmpctx, &data_in, &len, &scidd, &bias, &string, ×tamp)) { - towire_dstore_channel_bias(&out, &scidd, bias, string); + if (convert_bias) + towire_dstore_channel_bias(&out, &scidd, bias, string); + else + copy_data(&out, data_in, olddata - data_in); } continue; case DSTORE_NODE_BIAS: - return "Askrene has a node bias, which is not supported in v25.09"; + if (convert_bias) + return "Askrene has a node bias, which is not supported in v25.09"; + if (fromwire_dstore_node_bias(tmpctx, &data_in, &len, + &n, &string, &bias, &bias, ×tamp)) + copy_data(&out, data_in, olddata - data_in); + continue; + case DSTORE_CHANNEL_IMPRESSION: - /* FIXME */ - break; + if (fromwire_dstore_channel_impression(tmpctx, &data_in, &len, + &scidd, ×tamp, &msat)) { + /* We don't convert, just omit these */ + if (!convert_impression) + copy_data(&out, data_in, olddata - data_in); + } + continue; } return tal_fmt(ctx, "Unknown askrene layer record %u in %s", type, layername); @@ -128,7 +146,10 @@ static const char *convert_layer_data(const tal_t *ctx, return NULL; } -static const char *downgrade_askrene_layers(const tal_t *ctx, struct db *db) +static const char *downgrade_askrene_layers(const tal_t *ctx, struct db *db, + bool convert_bias, + bool convert_impression) + { const char **base, **k; const u8 *data; @@ -152,7 +173,8 @@ static const char *downgrade_askrene_layers(const tal_t *ctx, struct db *db) continue; layer = tal(layers, struct layer); layer->key = tal_steal(layer, k); - err = convert_layer_data(layer, k[2], data, &layer->data); + err = convert_layer_data(layer, k[2], data, &layer->data, + convert_bias, convert_impression); if (err) { tal_free(stmt); return err; @@ -166,10 +188,21 @@ static const char *downgrade_askrene_layers(const tal_t *ctx, struct db *db) return NULL; } +static const char *downgrade_askrene_layers_bias(const tal_t *ctx, struct db *db) +{ + return downgrade_askrene_layers(ctx, db, true, true); +} + +static const char *downgrade_askrene_layers_impressions(const tal_t *ctx, struct db *db) +{ + return downgrade_askrene_layers(ctx, db, false, true); +} + static const struct db_version db_versions[] = { - { "v25.09", 276, downgrade_askrene_layers, false }, + { "v25.09", 276, downgrade_askrene_layers_bias, false }, { "v25.12", 280, NULL, false }, { "v26.04", 282, NULL, false }, + { "v26.06", 282, downgrade_askrene_layers_impressions, false }, }; static const struct db_version *version_db(const char *version) From 055398168c8c08cd09fe7e1f53825695ffe513d2 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 17:59:49 +0930 Subject: [PATCH 10/20] xpay: actually tell askrene when a payment succeeded. Signed-off-by: Rusty Russell --- plugins/xpay/xpay.c | 19 +++++++++++++++++++ tests/test_xpay.py | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/plugins/xpay/xpay.c b/plugins/xpay/xpay.c index 7cf2c2061ccc..118242caeca3 100644 --- a/plugins/xpay/xpay.c +++ b/plugins/xpay/xpay.c @@ -1313,6 +1313,25 @@ static struct command_result *injectpaymentonion_succeeded(struct command *aux_c plugin_err(aux_cmd->plugin, "Invalid injectpaymentonion result '%.*s'", json_tok_full_len(result), json_tok_full(buf, result)); + /* We don't tell it about payment success for the local channel, since + * auto.localchans is exact: adding an offset would make it worse! */ + for (size_t i = 1; i < tal_count(attempt->hops); i++) { + struct out_req *req; + req = payment_ignored_req(aux_cmd, attempt, "askrene-inform-channel"); + /* Put what we learned in xpay, unless it's a fake channel */ + json_add_string(req->js, "layer", + attempt->hops[i].fake_channel + ? attempt->payment->private_layer + : "xpay"); + json_add_short_channel_id_dir(req->js, + "short_channel_id_dir", + attempt->hops[i].scidd); + json_add_amount_msat(req->js, "amount_msat", + attempt->hops[i].amount_out); + json_add_string(req->js, "inform", "succeeded"); + send_payment_req(aux_cmd, attempt->payment, req); + } + outgoing_notify_success(attempt); /* Move from current_attempts to past_attempts */ diff --git a/tests/test_xpay.py b/tests/test_xpay.py index 4c4cec3f848a..0a37f9b95f18 100644 --- a/tests/test_xpay.py +++ b/tests/test_xpay.py @@ -289,6 +289,10 @@ def test_xpay_fake_channeld(node_factory, bitcoind, chainparams, slow_mode): f"amount={AMOUNT}msat"]).decode('utf-8').strip() assert l1.rpc.decode(inv)['payee'] == nodeids[n] failed_parts.append(l1.rpc.xpay(inv)['failed_parts']) + # FIXME: We fail on #10, due mainly to a buildup of usage on 0x2134x0/0: + # Failed: We could not find a usable set of paths. The shortest path is 103x1x0->0x2134x0->1725x11x1725, but 0x2134x0/0 exceeds htlc_maximum_msat ~1000448msat + # So we "age" the xpay layer to forget old successful payments. + l1.rpc.askrene_age('xpay', 1) # Should be no reservations left (clean up happens after return though) wait_for(lambda: l1.rpc.askrene_listreservations() == {'reservations': []}) @@ -1412,6 +1416,23 @@ def test_sendamount(node_factory): ret = l1.rpc.sendamount(b12, "100sat") +def test_xpay_informs_askrene_on_success(node_factory): + """After a successful payment, xpay should add an impression to the xpay askrene layer.""" + l1, l2, l3 = node_factory.get_nodes(3) + node_factory.join_nodes([l1, l2, l3], wait_for_announce=True) + + inv = l3.rpc.invoice(100000, "test-inform", "test inform")["bolt11"] + l1.rpc.xpay(inv) + + # xpay skips the local channel (hops[0]), so only the l2->l3 hop gets an impression + scid23dir = first_scidd(l2, l3) + layers = l1.rpc.askrene_listlayers('xpay')['layers'] + impressions = only_one(layers)['impressions'] + assert len(impressions) == 1 + assert impressions[0]['short_channel_id_dir'] == scid23dir + assert impressions[0]['amount_msat'] == 100000 + + def test_sendamount_bip353(node_factory): fakebip353_plugin = Path(__file__).parent / "plugins" / "fakebip353.py" From ecad454001dc5cfef72157bdaf5e6e06c503b6ee Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:00:49 +0930 Subject: [PATCH 11/20] askrene: correctly order constraints. Pure "constraints" don't care about order (they simply clamp max and min), but "impressions" are relative, so they do. Change the hashtable to keep them timestamp sorted. Signed-off-by: Rusty Russell --- plugins/askrene/layer.c | 278 +++++++++++++++++++++++----------------- tests/test_askrene.py | 51 ++++++++ 2 files changed, 211 insertions(+), 118 deletions(-) diff --git a/plugins/askrene/layer.c b/plugins/askrene/layer.c index 6df046e3b971..cd825be9d946 100644 --- a/plugins/askrene/layer.c +++ b/plugins/askrene/layer.c @@ -69,35 +69,29 @@ struct node_bias { u64 timestamp; }; -static const struct short_channel_id_dir * -constraint_scidd(const struct constraint *c) -{ - return &c->scidd; -} - -static inline bool constraint_eq_scidd(const struct constraint *c, - const struct short_channel_id_dir *scidd) -{ - return short_channel_id_dir_eq(scidd, &c->scidd); -} - -HTABLE_DEFINE_DUPS_TYPE(struct constraint, constraint_scidd, hash_scidd, - constraint_eq_scidd, constraint_hash); +/* A timestamp-ordered list of impresssion and constraint */ +struct channel_intel { + /* Only one is set */ + const struct impression *impression; + const struct constraint *constraint; +}; static struct short_channel_id -impression_scid(const struct impression *imp) +channel_intel_scid(const struct channel_intel *intelarr) { - return imp->scidd.scid; + if (intelarr[0].impression) + return intelarr[0].impression->scidd.scid; + return intelarr[0].constraint->scidd.scid; } -static inline bool impression_eq_scid(const struct impression *imp, - struct short_channel_id scid) +static inline bool channel_intel_eq_scid(const struct channel_intel *intelarr, + struct short_channel_id scid) { - return short_channel_id_eq(scid, imp->scidd.scid); + return short_channel_id_eq(scid, channel_intel_scid(intelarr)); } -HTABLE_DEFINE_DUPS_TYPE(struct impression, impression_scid, hash_scid, - impression_eq_scid, impression_hash); +HTABLE_DEFINE_NODUPS_TYPE(struct channel_intel, channel_intel_scid, hash_scid, + channel_intel_eq_scid, channel_intel_hash); static struct short_channel_id local_channel_scid(const struct local_channel *lc) @@ -179,11 +173,8 @@ struct layer { /* Modifications to channels, indexed by scidd */ struct local_update_hash *local_updates; - /* Additional info, indexed by scid+dir */ - struct constraint_hash *constraints; - - /* Usage info, indexed by scid */ - struct impression_hash *impressions; + /* Constraints and impressions, indexed by scid */ + struct channel_intel_hash *channel_intels; /* Bias, indexed by scid+dir */ struct bias_hash *biases; @@ -223,8 +214,7 @@ struct layer *new_temp_layer(const tal_t *ctx, struct askrene *askrene, const ch l->persistent = false; l->local_channels = new_htable(l, local_channel_hash); l->local_updates = new_htable(l, local_update_hash); - l->constraints = new_htable(l, constraint_hash); - l->impressions = new_htable(l, impression_hash); + l->channel_intels = new_htable(l, channel_intel_hash); l->biases = new_htable(l, bias_hash); l->node_biases = new_htable(l, node_bias_hash); l->disabled_nodes = tal_arr(l, struct node_id, 0); @@ -321,13 +311,59 @@ static struct local_update *add_update_channel(struct layer *layer, return lu; } +static u64 channel_intel_timestamp(const struct channel_intel *intel) +{ + if (intel->constraint) + return intel->constraint->timestamp; + return intel->impression->timestamp; +} + +/* Insert this constraint/impression in htable, maintaining timestamp order */ +static void add_channel_intel(struct layer *layer, + const struct constraint *constraint STEALS, + const struct impression *impression STEALS) +{ + struct channel_intel intel, *intelarr; + + intel.impression = impression; + intel.constraint = constraint; + /* Exactly one is set */ + if (constraint) + assert(!impression); + else + assert(impression); + + intelarr = channel_intel_hash_get(layer->channel_intels, channel_intel_scid(&intel)); + if (!intelarr) { + intelarr = tal_dup(layer->channel_intels, struct channel_intel, &intel); + goto done; + } + + /* Insert in timestamp order, then insertion order. Realloc + * mean we have to delete, readd */ + channel_intel_hash_del(layer->channel_intels, intelarr); + for (size_t i = 0; i < tal_count(intelarr); i++) { + if (channel_intel_timestamp(&intel) < channel_intel_timestamp(&intelarr[i])) { + tal_arr_insert(&intelarr, i, intel); + goto done; + } + } + tal_arr_expand(&intelarr, intel); + +done: + channel_intel_hash_add(layer->channel_intels, intelarr); + /* Make sure array owns the impression/constraint, to avoid memleak */ + tal_steal(intelarr, intel.impression); + tal_steal(intelarr, intel.constraint); +} + static const struct constraint *add_constraint(struct layer *layer, const struct short_channel_id_dir *scidd, u64 timestamp, const struct amount_msat *min, const struct amount_msat *max) { - struct constraint *c = tal(layer, struct constraint); + struct constraint *c = tal(NULL, struct constraint); c->scidd = *scidd; if (min) @@ -340,7 +376,7 @@ static const struct constraint *add_constraint(struct layer *layer, c->max = AMOUNT_MSAT(UINT64_MAX); c->timestamp = timestamp; - constraint_hash_add(layer->constraints, c); + add_channel_intel(layer, c, NULL); return c; } @@ -349,12 +385,12 @@ static const struct impression *add_impression(struct layer *layer, u64 timestamp, struct amount_msat amount) { - struct impression *imp = tal(layer, struct impression); + struct impression *imp = tal(NULL, struct impression); imp->scidd = *scidd; imp->amount = amount; imp->timestamp = timestamp; - impression_hash_add(layer->impressions, imp); + add_channel_intel(layer, NULL, imp); return imp; } @@ -774,10 +810,8 @@ static void save_complete_layer(struct layer *layer) const struct local_channel *lc; const struct local_update *lu; struct local_update_hash_iter luit; - struct constraint_hash_iter conit; - const struct constraint *c; - struct impression_hash_iter impit; - const struct impression *imp; + const struct channel_intel *intelarr; + struct channel_intel_hash_iter intelit; struct bias_hash_iter biasit; const struct bias *b; struct node_bias_hash_iter nbiasit; @@ -802,18 +836,19 @@ static void save_complete_layer(struct layer *layer) lu = local_update_hash_next(layer->local_updates, &luit)) { towire_save_channel_update(&data, lu); } - for (c = constraint_hash_first(layer->constraints, &conit); - c; - c = constraint_hash_next(layer->constraints, &conit)) { - /* Don't save ones we generated internally */ - if (c->timestamp == UINT64_MAX) - continue; - towire_save_channel_constraint(&data, c); - } - for (imp = impression_hash_first(layer->impressions, &impit); - imp; - imp = impression_hash_next(layer->impressions, &impit)) { - towire_save_channel_impression(&data, imp); + for (intelarr = channel_intel_hash_first(layer->channel_intels, &intelit); + intelarr; + intelarr = channel_intel_hash_next(layer->channel_intels, &intelit)) { + for (size_t i = 0; i < tal_count(intelarr); i++) { + if (intelarr[i].constraint) { + /* Don't save ones we generated internally */ + if (intelarr[i].constraint->timestamp == UINT64_MAX) + continue; + towire_save_channel_constraint(&data, intelarr[i].constraint); + } else { + towire_save_channel_impression(&data, intelarr[i].impression); + } + } } for (b = bias_hash_first(layer->biases, &biasit); b; @@ -1082,37 +1117,32 @@ void layer_apply_constraints(const struct layer *layer, struct amount_msat *min, struct amount_msat *max) { - struct constraint *c; - struct constraint_hash_iter cit; - struct impression *imp; - struct impression_hash_iter impit; - - /* We can have more than one: apply them all! */ - for (c = constraint_hash_getfirst(layer->constraints, scidd, &cit); - c; - c = constraint_hash_getnext(layer->constraints, scidd, &cit)) { - *min = amount_msat_max(*min, c->min); - *max = amount_msat_min(*max, c->max); - } - - /* FIXME: we apply our usage at the end. This is wrong (but - * simple): we should interleave with the above based on - * timestamp. */ - for (imp = impression_hash_getfirst(layer->impressions, scidd->scid, &impit); - imp; - imp = impression_hash_getnext(layer->impressions, scidd->scid, &impit)) { - /* We made payment along this channel? Capacity has reduced */ - if (scidd->dir == imp->scidd.dir) { - if (!amount_msat_sub(min, *min, imp->amount)) - *min = AMOUNT_MSAT(0); - if (!amount_msat_sub(max, *max, imp->amount)) - *max = AMOUNT_MSAT(0); + const struct channel_intel *intelarr; + + /* Apply any intel we have, in order */ + intelarr = channel_intel_hash_get(layer->channel_intels, scidd->scid); + for (size_t i = 0; i < tal_count(intelarr); i++) { + if (intelarr[i].constraint) { + const struct constraint *c = intelarr[i].constraint; + if (c->scidd.dir == scidd->dir) { + *min = amount_msat_max(*min, c->min); + *max = amount_msat_min(*max, c->max); + } } else { - /* We made the other way? Capacity has increased */ - if (!amount_msat_add(min, *min, imp->amount)) - *min = AMOUNT_MSAT(-1ULL); - if (!amount_msat_add(max, *max, imp->amount)) - *max = AMOUNT_MSAT(-1ULL); + const struct impression *imp = intelarr[i].impression; + /* We made payment along this channel? Capacity has reduced */ + if (imp->scidd.dir == scidd->dir) { + if (!amount_msat_sub(min, *min, imp->amount)) + *min = AMOUNT_MSAT(0); + if (!amount_msat_sub(max, *max, imp->amount)) + *max = AMOUNT_MSAT(0); + } else { + /* We made the other way? Capacity has increased */ + if (!amount_msat_add(min, *min, imp->amount)) + *min = AMOUNT_MSAT(-1ULL); + if (!amount_msat_add(max, *max, imp->amount)) + *max = AMOUNT_MSAT(-1ULL); + } } } } @@ -1146,13 +1176,14 @@ void layer_clear_overridden_capacities(const struct layer *layer, const struct gossmap *gossmap, fp16_t *capacities) { - struct constraint_hash_iter conit; - struct constraint *con; + struct channel_intel_hash_iter intelit; + const struct channel_intel *intelarr; - for (con = constraint_hash_first(layer->constraints, &conit); - con; - con = constraint_hash_next(layer->constraints, &conit)) { - struct gossmap_chan *c = gossmap_find_chan(gossmap, &con->scidd.scid); + for (intelarr = channel_intel_hash_first(layer->channel_intels, &intelit); + intelarr; + intelarr = channel_intel_hash_next(layer->channel_intels, &intelit)) { + const struct short_channel_id scid = channel_intel_scid(intelarr); + struct gossmap_chan *c = gossmap_find_chan(gossmap, &scid); size_t idx; if (!c) continue; @@ -1165,32 +1196,37 @@ void layer_clear_overridden_capacities(const struct layer *layer, size_t layer_trim_constraints(struct layer *layer, u64 cutoff) { size_t num_removed = 0; - struct constraint_hash_iter conit; - struct constraint *con; + struct channel_intel_hash_iter intelit; + const struct channel_intel *intelarr; struct bias_hash_iter biasit; struct bias *bias; struct node_bias_hash_iter node_it; struct node_bias *node_bias; - struct impression *imp; - struct impression_hash_iter impit; - - for (con = constraint_hash_first(layer->constraints, &conit); - con; - con = constraint_hash_next(layer->constraints, &conit)) { - if (con->timestamp < cutoff) { - constraint_hash_delval(layer->constraints, &conit); - tal_free(con); + + for (intelarr = channel_intel_hash_first(layer->channel_intels, &intelit); + intelarr; + intelarr = channel_intel_hash_next(layer->channel_intels, &intelit)) { + bool changed = false; + for (size_t i = 0; i < tal_count(intelarr); i++) { + if (channel_intel_timestamp(&intelarr[i]) >= cutoff) + continue; + /* Remove from table before realloc! */ + if (!changed) + channel_intel_hash_del(layer->channel_intels, intelarr); + tal_arr_remove(&intelarr, i); + changed = true; num_removed++; + i--; } - } + if (!changed) + continue; - for (imp = impression_hash_first(layer->impressions, &impit); - imp; - imp = impression_hash_next(layer->impressions, &impit)) { - if (imp->timestamp < cutoff) { - impression_hash_delval(layer->impressions, &impit); - tal_free(imp); - num_removed++; + /* We emptied it, just free. */ + if (tal_count(intelarr) == 0) + tal_free(intelarr); + else { + /* Still has members, put it back. */ + channel_intel_hash_add(layer->channel_intels, intelarr); } } @@ -1402,10 +1438,8 @@ static void json_add_layer(struct json_stream *js, const struct local_channel *lc; const struct local_update *lu; struct local_update_hash_iter luit; - struct constraint_hash_iter conit; - const struct constraint *c; - struct impression_hash_iter impit; - const struct impression *imp; + struct channel_intel_hash_iter intelit; + const struct channel_intel *intelarr; struct bias_hash_iter biasit; const struct bias *b; struct node_bias_hash_iter node_it; @@ -1433,20 +1467,28 @@ static void json_add_layer(struct json_stream *js, } json_array_end(js); json_array_start(js, "constraints"); - for (c = constraint_hash_first(layer->constraints, &conit); - c; - c = constraint_hash_next(layer->constraints, &conit)) { - /* Don't show ones we generated internally */ - if (c->timestamp == UINT64_MAX) - continue; - json_add_constraint(js, NULL, c, NULL); + for (intelarr = channel_intel_hash_first(layer->channel_intels, &intelit); + intelarr; + intelarr = channel_intel_hash_next(layer->channel_intels, &intelit)) { + for (size_t i = 0; i < tal_count(intelarr); i++) { + if (!intelarr[i].constraint) + continue; + /* Don't show ones we generated internally */ + if (intelarr[i].constraint->timestamp == UINT64_MAX) + continue; + json_add_constraint(js, NULL, intelarr[i].constraint, NULL); + } } json_array_end(js); json_array_start(js, "impressions"); - for (imp = impression_hash_first(layer->impressions, &impit); - imp; - imp = impression_hash_next(layer->impressions, &impit)) { - json_add_impression(js, NULL, imp, NULL); + for (intelarr = channel_intel_hash_first(layer->channel_intels, &intelit); + intelarr; + intelarr = channel_intel_hash_next(layer->channel_intels, &intelit)) { + for (size_t i = 0; i < tal_count(intelarr); i++) { + if (!intelarr[i].impression) + continue; + json_add_impression(js, NULL, intelarr[i].impression, NULL); + } } json_array_end(js); json_array_start(js, "biases"); diff --git a/tests/test_askrene.py b/tests/test_askrene.py index 26c93207d592..ba5af5c479ca 100644 --- a/tests/test_askrene.py +++ b/tests/test_askrene.py @@ -2739,3 +2739,54 @@ def test_bad_user_entries(node_factory): maxfee_msat=2000, final_cltv=5, ) + + +def test_constraint_impression_ordering(node_factory): + """Constraints and impressions must be applied in timestamp order. + + An impression at T1 (older) followed by a constraint at T2 (newer) means + the constraint supersedes the impression: the impression is applied on the + unconstrained capacity and the constraint then clamps the result. A + constraint at T1 followed by an impression at T2 means the impression + reduces the constrained capacity. + """ + # Single channel 0->1 with 1000 sat capacity + cap_msat = 1_000_000 + gsfile, nodemap = generate_gossip_store([GenChannel(0, 1, capacity_sats=cap_msat // 1000)]) + l1 = node_factory.get_node(gossip_store_file=gsfile.name, opts={'disable-plugin': 'cln-xpay'}) + + chan_dir = scid_dir(nodemap, 0, 1, 0) + + # --- Case 1: impression (T1, older) then tighter constraint (T2, newer) --- + # Impression says 300k was sent. Constraint says max is 600k (newer info). + # Correct ordering: impression applied to unconstrained ∞, then constraint + # clamps to 600k. Routing 400k should succeed. + l1.rpc.askrene_create_layer('test_ordering') + l1.rpc.askrene_inform_channel('test_ordering', chan_dir, 300_000, 'succeeded') + time.sleep(2) + l1.rpc.askrene_inform_channel('test_ordering', chan_dir, 600_001, 'constrained') + + # Should succeed: effective max is 600k (constraint is newer, wins over impression) + routes = l1.rpc.getroutes(source=nodemap[0], destination=nodemap[1], + amount_msat=400_000, layers=['test_ordering'], + maxfee_msat=100_000, final_cltv=5) + assert routes['probability_ppm'] > 0 + + l1.rpc.askrene_remove_layer('test_ordering') + + # --- Case 2: tighter constraint (T3, older) then impression (T4, newer) --- + # Constraint says max is 600k. Impression says 300k was sent after that. + # Correct ordering: constraint applied first (max=600k), impression then + # reduces it to 300k. Routing 400k should fail. + l1.rpc.askrene_create_layer('test_ordering') + l1.rpc.askrene_inform_channel('test_ordering', chan_dir, 600_001, 'constrained') + time.sleep(2) + l1.rpc.askrene_inform_channel('test_ordering', chan_dir, 300_000, 'succeeded') + + # Should fail: effective max is 300k (impression is newer, reduces constrained capacity) + with pytest.raises(RpcError, match=r"We could not find a usable set of paths"): + l1.rpc.getroutes(source=nodemap[0], destination=nodemap[1], + amount_msat=400_000, layers=['test_ordering'], + maxfee_msat=100_000, final_cltv=5) + + l1.rpc.askrene_remove_layer('test_ordering') From b9d65c05895ce78572d779dc647529901214e14d Mon Sep 17 00:00:00 2001 From: Lagrang3 Date: Thu, 18 Jun 2026 09:22:05 +0100 Subject: [PATCH 12/20] common: add helper to remove a range of elements from a tal array. Changelog-None Signed-off-by: Lagrang3 --- common/utils.c | 11 +++++++++++ common/utils.h | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/common/utils.c b/common/utils.c index 1a0799007546..0bd7a72cb341 100644 --- a/common/utils.c +++ b/common/utils.c @@ -147,6 +147,17 @@ void tal_arr_remove_(void *p, size_t elemsize, size_t n) tal_resize((char **)p, len - elemsize); } +void tal_arr_remove_range_(void *p, size_t position, size_t chunk_size) +{ + // p is a pointer-to-pointer for tal_resize. + char *objp = *(char **)p; + size_t len = tal_bytelen(objp); + assert(chunk_size + position <= len); + memmove(objp + position, objp + position + chunk_size, + len - (chunk_size + position)); + tal_resize((char **)p, len - chunk_size); +} + static void tal_arr_append_bytes(void *p, const void *append, size_t bytes) { void **pptr = p; diff --git a/common/utils.h b/common/utils.h index 560ec9f50022..ac719d0cc5d9 100644 --- a/common/utils.h +++ b/common/utils.h @@ -86,6 +86,17 @@ bool tal_arr_eq_(const void *a, const void *b, size_t unused); #define tal_arr_remove(p, n) tal_arr_remove_((p), sizeof(**p), (n)) void tal_arr_remove_(void *p, size_t elemsize, size_t n); +/** + * Remove a range of element from an array + * + * This will shift the elements past the removed elements, changing + * their position in memory, so only use this for simple arrays. + */ +#define tal_arr_remove_range(p, position, count) \ + tal_arr_remove_range_((p), sizeof(**p) * (position), \ + sizeof(**p) * (count)) +void tal_arr_remove_range_(void *p, size_t position, size_t chunk_size); + /** * Insert an element in an array */ From ba3da197a8bbc20b4eafb61359dff645648cca5f Mon Sep 17 00:00:00 2001 From: Lagrang3 Date: Thu, 18 Jun 2026 09:28:37 +0100 Subject: [PATCH 13/20] askrene: don't leak channel intel entries On deletion of individual channel intel entries we need to free the pointer inside the structure. Changelog-None Signed-off-by: Lagrang3 --- plugins/askrene/layer.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/askrene/layer.c b/plugins/askrene/layer.c index cd825be9d946..bfdce1f0f9ea 100644 --- a/plugins/askrene/layer.c +++ b/plugins/askrene/layer.c @@ -1213,6 +1213,11 @@ size_t layer_trim_constraints(struct layer *layer, u64 cutoff) /* Remove from table before realloc! */ if (!changed) channel_intel_hash_del(layer->channel_intels, intelarr); + + /* The pointer inside channel_intel has to be freed. */ + tal_free(intelarr[i].impression); + tal_free(intelarr[i].constraint); + tal_arr_remove(&intelarr, i); changed = true; num_removed++; From e5e5eea36f0a5d6a84112d3c2caafb20bdb8121b Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:01:49 +0930 Subject: [PATCH 14/20] pytest: add tests for what we want askrene to do. It diagnoses if the *total capacity* of the source/dest are insufficient, but not if the *known capacity* is. So we get: The shortest path is 103x1x0->105x1x0, but 103x1x0/1 layer auto.localchans says max is 77704899msat Whereas it would be better to do: We know from auto.localchans that source has maximum capacity xxx msat (in 1 channels) Similarly for the destination, we get: The shortest path is 103x1x0->105x1x0, but 103x1x0/1 layer auto.localchans says max is 77704899msat --- tests/test_askrene.py | 67 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/tests/test_askrene.py b/tests/test_askrene.py index ba5af5c479ca..005a36f2c9e5 100644 --- a/tests/test_askrene.py +++ b/tests/test_askrene.py @@ -2741,6 +2741,73 @@ def test_bad_user_entries(node_factory): ) +@pytest.mark.xfail(strict=True) +def test_explain_source_dest_failures(node_factory, bitcoind): + """askrene should give intelligent failure reasons when source or destination don't have + capacity""" + # l1 --100k--> l2 --200k--> l3 + # | + # 50k + # v + # l4 + l1, l2, l3, l4 = node_factory.get_nodes(4) + node_factory.join_nodes([l1, l2], fundamount=100000) + node_factory.join_nodes([l2, l3], fundamount=200000) + node_factory.join_nodes([l2, l4], fundamount=50000) + + # Make sure everyone knows everything + bitcoind.generate_block(5) + wait_for(lambda: all([len(n.rpc.listchannels()['channels']) == 6 for n in [l1, l2, l3, l4]])) + + # We can't afford this + with pytest.raises(RpcError, + match=r"We could not find a usable set of paths. Total source capacity is only 100000000msat \(in 1 channels\)"): + l1.rpc.getroutes(source=l1.info['id'], + destination=l3.info['id'], + amount_msat='100001sat', + layers=['auto.localchans', 'auto.sourcefree'], + maxfee_msat=10000, + final_cltv=5) + + # They can't afford this + with pytest.raises(RpcError, + match=r"We could not find a usable set of paths. Total destination capacity is only 50000000msat \(in 1 channels\)"): + l1.rpc.getroutes(source=l1.info['id'], + destination=l4.info['id'], + amount_msat='50001sat', + layers=['auto.localchans', 'auto.sourcefree'], + maxfee_msat=10000, + final_cltv=5) + + # Add some information, and we should know that too. + l1.rpc.xpay(l4.rpc.invoice('30000sat', 'test_explain_simple_failures2', 'test_explain_simple_failures2')['bolt11']) + + # This is actually just auto.localchans knowing the capacity! + with pytest.raises(RpcError, + match=r"We could not find a usable set of paths. We know from auto.localchans that source has maximum capacity [0-9]*msat \(in 1 channels\)") as err: + l1.rpc.getroutes(source=l1.info['id'], + destination=l3.info['id'], + amount_msat='80001sat', + layers=['auto.localchans', 'auto.sourcefree', 'xpay'], + maxfee_msat=10000, + final_cltv=5) + PAY_INSUFFICIENT_FUNDS = 215 + assert err.value.error['code'] == PAY_INSUFFICIENT_FUNDS + + # This is the impression in the xpay layer telling us 30,000sat is already gone (of 50,000). + with pytest.raises(RpcError, + match=r"We could not find a usable set of paths. We know from xpay that destination has maximum capacity [0-9]*msat \(in 1 channels\)") as err: + l1.rpc.getroutes(source=l1.info['id'], + destination=l4.info['id'], + amount_msat='20001sat', + layers=['auto.localchans', 'auto.sourcefree', 'xpay'], + maxfee_msat=10000, + final_cltv=5) + + PAY_DESTINATION_INSUFFICIENT_CAPACITY = 220 + assert err.value.error['code'] == PAY_DESTINATION_INSUFFICIENT_CAPACITY + + def test_constraint_impression_ordering(node_factory): """Constraints and impressions must be applied in timestamp order. From 1593b1ef03cf89aafabb89113a37ed5992357113 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:02:49 +0930 Subject: [PATCH 15/20] askrene: give clearer error codes. Add PAY_INSUFFICIENT_FUNDS and PAY_ROUTE_NOT_FOUND, and give nice detailed errors for those. Signed-off-by: Rusty Russell Changelog-Changed: JSON-RPC: `getroutes` can now return PAY_INSUFFICIENT_FUNDS (215) and PAY_DESTINATION_INSUFFICIENT_CAPACITY (220) error codes. --- common/jsonrpc_errors.h | 1 + contrib/msggen/msggen/schema.json | 4 +- doc/schemas/getroutes.json | 4 +- plugins/askrene/child/explain_failure.c | 124 ++++++++++++++++++++---- plugins/askrene/child/explain_failure.h | 4 +- plugins/askrene/child/mcf.c | 3 +- tests/test_askrene.py | 1 - tests/test_pay.py | 4 +- 8 files changed, 118 insertions(+), 27 deletions(-) diff --git a/common/jsonrpc_errors.h b/common/jsonrpc_errors.h index 4108701ed757..ac29cb663159 100644 --- a/common/jsonrpc_errors.h +++ b/common/jsonrpc_errors.h @@ -52,6 +52,7 @@ enum jsonrpc_errcode { PAY_USER_ERROR = 217, PAY_INJECTPAYMENTONION_FAILED = 218, PAY_INJECTPAYMENTONION_ALREADY_PAID = 219, + PAY_DESTINATION_INSUFFICIENT_CAPACITY = 220, /* `fundchannel` or `withdraw` errors */ FUND_MAX_EXCEEDED = 300, diff --git a/contrib/msggen/msggen/schema.json b/contrib/msggen/msggen/schema.json index e2875359e7f0..d4c51b895c54 100644 --- a/contrib/msggen/msggen/schema.json +++ b/contrib/msggen/msggen/schema.json @@ -16831,7 +16831,9 @@ "", "- -1: Catchall nonspecific error.", "- 205: Unable to find a route.", - "- 206: Route too expensive. Either the max_delay or maxfee_msat was exceeded." + "- 206: Route too expensive. Either the max_delay or maxfee_msat was exceeded.", + "- 215: We don't have enough funds in all our channels to pay this.", + "- 220: We can't find sufficient capacity into the destination." ], "author": [ "[lagrang3@protonmail.com](mailto:lagrang3@protonmail.com) wrote the minimum-cost-flow solver, Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) wrote the API and this documentation." diff --git a/doc/schemas/getroutes.json b/doc/schemas/getroutes.json index d6b22256537d..1e389923b310 100644 --- a/doc/schemas/getroutes.json +++ b/doc/schemas/getroutes.json @@ -236,7 +236,9 @@ "", "- -1: Catchall nonspecific error.", "- 205: Unable to find a route.", - "- 206: Route too expensive. Either the max_delay or maxfee_msat was exceeded." + "- 206: Route too expensive. Either the max_delay or maxfee_msat was exceeded.", + "- 215: We don't have enough funds in all our channels to pay this.", + "- 220: We can't find sufficient capacity into the destination." ], "author": [ "[lagrang3@protonmail.com](mailto:lagrang3@protonmail.com) wrote the minimum-cost-flow solver, Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) wrote the API and this documentation." diff --git a/plugins/askrene/child/explain_failure.c b/plugins/askrene/child/explain_failure.c index 364e41d0a49f..a11179d14e77 100644 --- a/plugins/askrene/child/explain_failure.c +++ b/plugins/askrene/child/explain_failure.c @@ -83,7 +83,7 @@ struct stat { }; struct node_stats { - struct stat total, gossip_known, enabled; + struct stat total, gossip_known, max_capacity_known, enabled; }; enum node_direction { @@ -99,42 +99,104 @@ static void add_stat(struct stat *stat, abort(); } -static void node_stats(const struct route_query *rq, - const struct gossmap_node *node, - enum node_direction node_direction, - struct node_stats *stats) +static bool layer_in_array(const struct layer **layers, + const struct layer *layer) { + for (size_t i = 0; i < tal_count(layers); i++) { + if (layers[i] == layer) + return true; + } + return false; +} + +/* Returns most constraining layers, if any */ +static const struct layer **node_stats(const tal_t *ctx, + const struct route_query *rq, + const struct gossmap_node *node, + enum node_direction node_direction, + const struct layer **layers, + struct node_stats *stats) +{ + const struct layer **most_constraining = tal_arr(ctx, const struct layer *, 0); + memset(stats, 0, sizeof(*stats)); for (size_t i = 0; i < node->num_chans; i++) { - int dir; + struct short_channel_id_dir scidd; struct gossmap_chan *c; - struct amount_msat cap_msat; + struct amount_msat min, max, cap_msat; + const struct layer *constrainer; - c = gossmap_nth_chan(rq->gossmap, node, i, &dir); + c = gossmap_nth_chan(rq->gossmap, node, i, &scidd.dir); + scidd.scid = gossmap_chan_scid(rq->gossmap, c); cap_msat = gossmap_chan_get_capacity(rq->gossmap, c); if (node_direction == INTO_NODE) - dir = !dir; + scidd.dir = !scidd.dir; add_stat(&stats->total, cap_msat); - if (gossmap_chan_set(c, dir)) + if (gossmap_chan_set(c, scidd.dir)) { add_stat(&stats->gossip_known, cap_msat); - if (c->half[dir].enabled) - add_stat(&stats->enabled, cap_msat); + if (c->half[scidd.dir].enabled) + add_stat(&stats->enabled, cap_msat); + } + + min = AMOUNT_MSAT(0); + max = cap_msat; + constrainer = NULL; + for (size_t j = 0; j < tal_count(layers); j++) { + struct amount_msat old_max = max; + layer_apply_constraints(layers[j], &scidd, &min, &max); + if (!amount_msat_eq(max, old_max)) + constrainer = layers[j]; + } + if (constrainer && !layer_in_array(most_constraining, constrainer)) + tal_arr_expand(&most_constraining, constrainer); + add_stat(&stats->max_capacity_known, max); } + return most_constraining; } +static const char *format_layer_names(const tal_t *ctx, const struct layer **layers) +{ + char *ret; + + /* Shouldn't happen! */ + if (tal_count(layers) == 0) + return "UNKNOWN"; + if (tal_count(layers) == 1) + return layer_name(layers[0]); + + ret = tal_strdup(ctx, "layers"); + + for (size_t i = 0; i < tal_count(layers); i++) { + const char *prefix; + if (i == 0) + prefix = " "; + else if (i + 1 == tal_count(layers)) + prefix = " and "; + else + prefix = ", "; + tal_append_fmt(&ret, "%s%s", prefix, layer_name(layers[i])); + } + return ret; +} + +/* On non-NULL return, *total_capacity_failure is true if there's not + * sufficient capacity at all to make this payment */ static const char *check_capacity(const tal_t *ctx, const struct route_query *rq, const struct gossmap_node *node, enum node_direction node_direction, struct amount_msat amount, - const char *name) + const char *name, + bool *total_capacity_failure) { struct node_stats stats; + const struct layer **most_constraining; - node_stats(rq, node, node_direction, &stats); + most_constraining = node_stats(tmpctx, rq, node, node_direction, rq->layers, &stats); if (amount_msat_greater(amount, stats.total.capacity)) { + *total_capacity_failure = true; return child_log(ctx, LOG_DBG, NO_USABLE_PATHS_STRING " Total %s capacity is only %s" @@ -143,7 +205,19 @@ static const char *check_capacity(const tal_t *ctx, fmt_amount_msat(tmpctx, stats.total.capacity), stats.total.num_channels); } + if (amount_msat_greater(amount, stats.max_capacity_known.capacity)) { + *total_capacity_failure = true; + return child_log(ctx, LOG_DBG, + NO_USABLE_PATHS_STRING + " We know from %s that %s has maximum capacity %s" + " (in %zu channels).", + format_layer_names(tmpctx, most_constraining), + name, + fmt_amount_msat(tmpctx, stats.max_capacity_known.capacity), + stats.max_capacity_known.num_channels); + } if (amount_msat_greater(amount, stats.gossip_known.capacity)) { + *total_capacity_failure = false; return child_log(ctx, LOG_DBG, NO_USABLE_PATHS_STRING " Missing gossip for %s: only known %zu/%zu channels, leaving capacity only %s of %s.", @@ -154,6 +228,7 @@ static const char *check_capacity(const tal_t *ctx, fmt_amount_msat(tmpctx, stats.total.capacity)); } if (amount_msat_greater(amount, stats.enabled.capacity)) { + *total_capacity_failure = false; /* Common case: one channel, disabled */ if (stats.enabled.num_channels == 0) { return child_log(ctx, LOG_DBG, @@ -219,7 +294,8 @@ const char *explain_failure(const tal_t *ctx, const struct route_query *rq, const struct gossmap_node *srcnode, const struct gossmap_node *dstnode, - struct amount_msat amount) + struct amount_msat amount, + enum jsonrpc_errcode *ecode) { const struct route_hop *hops; const struct dijkstra *dij; @@ -230,18 +306,28 @@ const char *explain_failure(const tal_t *ctx, struct gossmap_chan *c; struct amount_msat rolling_amount; struct amount_msat *path_amount; + bool total_capacity_failure; + + /* The default answer */ + *ecode = PAY_ROUTE_NOT_FOUND; /* Do we have enough funds? */ cap_check = check_capacity(ctx, rq, srcnode, OUT_OF_NODE, - amount, "source"); - if (cap_check) + amount, "source", &total_capacity_failure); + if (cap_check) { + if (total_capacity_failure) + *ecode = PAY_INSUFFICIENT_FUNDS; return cap_check; + } /* Does destination have enough capacity? */ cap_check = check_capacity(ctx, rq, dstnode, INTO_NODE, - amount, "destination"); - if (cap_check) + amount, "destination", &total_capacity_failure); + if (cap_check) { + if (total_capacity_failure) + *ecode = PAY_DESTINATION_INSUFFICIENT_CAPACITY; return cap_check; + } /* OK, fall back to telling them why didn't shortest path * work. This covers the "but I have a direct channel!" diff --git a/plugins/askrene/child/explain_failure.h b/plugins/askrene/child/explain_failure.h index 2914b9eede54..5a2b121dddfc 100644 --- a/plugins/askrene/child/explain_failure.h +++ b/plugins/askrene/child/explain_failure.h @@ -2,6 +2,7 @@ #define LIGHTNING_PLUGINS_ASKRENE_CHILD_EXPLAIN_FAILURE_H #include "config.h" #include +#include struct route_query; struct gossmap_node; @@ -11,6 +12,7 @@ const char *explain_failure(const tal_t *ctx, const struct route_query *rq, const struct gossmap_node *srcnode, const struct gossmap_node *dstnode, - struct amount_msat amount); + struct amount_msat amount, + enum jsonrpc_errcode *ecode); #endif /* LIGHTNING_PLUGINS_ASKRENE_CHILD_EXPLAIN_FAILURE_H */ diff --git a/plugins/askrene/child/mcf.c b/plugins/askrene/child/mcf.c index dde97f02250e..3c455b852822 100644 --- a/plugins/askrene/child/mcf.c +++ b/plugins/askrene/child/mcf.c @@ -1401,8 +1401,7 @@ linear_routes(const tal_t *ctx, struct route_query *rq, if (!new_flows) { error_message = explain_failure( - ctx, rq, srcnode, dstnode, amount_to_deliver); - *ecode = PAY_ROUTE_NOT_FOUND; + ctx, rq, srcnode, dstnode, amount_to_deliver, ecode); goto fail; } diff --git a/tests/test_askrene.py b/tests/test_askrene.py index 005a36f2c9e5..daf93bd934ad 100644 --- a/tests/test_askrene.py +++ b/tests/test_askrene.py @@ -2741,7 +2741,6 @@ def test_bad_user_entries(node_factory): ) -@pytest.mark.xfail(strict=True) def test_explain_source_dest_failures(node_factory, bitcoind): """askrene should give intelligent failure reasons when source or destination don't have capacity""" diff --git a/tests/test_pay.py b/tests/test_pay.py index e0b68f097429..7ee9871e4758 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -4867,8 +4867,8 @@ def test_fetchinvoice_autoconnect(node_factory, bitcoind): l3.rpc.disconnect(l2.info['id']) invreq = l2.rpc.call('invoicerequest', {'amount': '2msat', 'description': 'simple test'}) - # Ofc l2 can't actually pay it! - with pytest.raises(RpcError, match='pay attempt failed: "Failed: There is no connection between source and destination at all"'): + # Ofc l3 can't actually pay it! + with pytest.raises(RpcError, match=r'pay attempt failed: "Failed: We could not find a usable set of paths. We know from auto.localchans that source has maximum capacity 0msat \(in 1 channels\)."'): l3.rpc.call('sendinvoice', {'invreq': invreq['bolt12'], 'label': 'payme!'}) assert l3.rpc.listpeers(l2.info['id'])['peers'] != [] From 400f0b846d2132a7e5621134387a123f6b426809 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:03:49 +0930 Subject: [PATCH 16/20] offers: limit invoices to 10 minutes for recurring offers in other currencies. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Rusty Russell --- plugins/offers.c | 4 ++ plugins/offers.h | 2 + plugins/offers_invreq_hook.c | 63 ++++++++++++++++++++++------ plugins/test/run-decode_guess_type.c | 7 ++++ tests/plugins/currencyUSDAUD5000.py | 11 ++++- tests/test_pay.py | 49 +++++++++++++++++++++- 6 files changed, 122 insertions(+), 14 deletions(-) diff --git a/plugins/offers.c b/plugins/offers.c index 2e8d6ffd07b8..2cd0c97f1a87 100644 --- a/plugins/offers.c +++ b/plugins/offers.c @@ -1995,6 +1995,7 @@ int main(int argc, char *argv[]) od->disable_connect = false; od->dev_invoice_bpath_scid = false; od->dev_invoice_internal_scid = NULL; + od->dev_currency_expiry = 600; od->global_gossmap_ = NULL; /* We deal in UTC; mktime() uses local time */ @@ -2013,5 +2014,8 @@ int main(int argc, char *argv[]) plugin_option_dev("dev-invoice-internal-scid", "string", "Use short_channel_id instead of pubkey when creating a blinded payment path", scid_option, scid_jsonfmt, &od->dev_invoice_internal_scid), + plugin_option_dev_dynamic("dev-currency-expiry", "int", + "Max invoice expiry (seconds) for currency-denominated recurring offers", + u32_option, u32_jsonfmt, &od->dev_currency_expiry), NULL); } diff --git a/plugins/offers.h b/plugins/offers.h index 88f9ceb2df9c..4bc2af32cedc 100644 --- a/plugins/offers.h +++ b/plugins/offers.h @@ -29,6 +29,8 @@ struct offers_data { bool dev_invoice_bpath_scid; /* --dev-invoice-internal-scid */ struct short_channel_id *dev_invoice_internal_scid; + /* --dev-currency-expiry: max invoice expiry for currency offers (default 600) */ + u32 dev_currency_expiry; /* Use get_gossmap() to access this! */ struct gossmap *global_gossmap_; }; diff --git a/plugins/offers_invreq_hook.c b/plugins/offers_invreq_hook.c index f9672b0680a6..07f7c50a22b7 100644 --- a/plugins/offers_invreq_hook.c +++ b/plugins/offers_invreq_hook.c @@ -132,17 +132,22 @@ test_field(struct command *cmd, * number of seconds after `invoice_created_at` that payment for this period * will be accepted. */ -static void set_recurring_inv_expiry(struct tlv_invoice *inv, u64 last_pay) +static void set_recurring_inv_expiry(struct command *cmd, + struct tlv_invoice *inv, u64 last_pay) { + const struct offers_data *od = get_offers_data(cmd->plugin); + inv->invoice_relative_expiry = tal(inv, u32); - /* Don't give them a 0 second invoice, even if it's true. */ + /* Don't give them a 0 second invoice, even if it's true: that's how we mark cancellations! */ if (last_pay <= *inv->invoice_created_at) *inv->invoice_relative_expiry = 1; else *inv->invoice_relative_expiry = last_pay - *inv->invoice_created_at; - /* FIXME: Shorten expiry if we're doing currency conversion! */ + /* Shorten to dev_currency_expiry (default 10 minutes) for currency conversion. */ + if (inv->offer_currency && *inv->invoice_relative_expiry > od->dev_currency_expiry) + *inv->invoice_relative_expiry = od->dev_currency_expiry; } /* We rely on label forms for uniqueness. */ @@ -209,6 +214,19 @@ static struct command_result *createinvoice_done(struct command *cmd, return send_onion_reply(cmd, ir->reply_path, payload); } +static struct command_result *create_invoicereq(struct command *cmd, + struct invreq *ir); + +static struct command_result *delinvoice_done(struct command *cmd, + const char *method, + const char *buf, + const jsmntok_t *result, + struct invreq *ir) +{ + /* Old stale-rate invoice deleted; recreate with current rate. */ + return create_invoicereq(cmd, ir); +} + static struct command_result *createinvoice_error(struct command *cmd, const char *method, const char *buf, @@ -216,19 +234,43 @@ static struct command_result *createinvoice_error(struct command *cmd, struct invreq *ir) { u32 code; - const char *status; + const char *status, *invstring; /* If it already exists, we can reuse its bolt12 directly. */ if (json_scan(tmpctx, buf, err, - "{code:%,data:{status:%}}", + "{code:%,data:{status:%,bolt12:%}}", JSON_SCAN(json_to_u32, &code), - JSON_SCAN_TAL(tmpctx, json_strdup, &status)) == NULL + JSON_SCAN_TAL(tmpctx, json_strdup, &status), + JSON_SCAN_TAL(tmpctx, json_strdup, &invstring)) == NULL && code == INVOICE_LABEL_ALREADY_EXISTS) { if (streq(status, "unpaid")) return createinvoice_done(cmd, method, buf, json_get_member(buf, err, "data"), ir); - if (streq(status, "expired")) - return fail_invreq(cmd, ir, "invoice expired (cancelled?)"); + if (streq(status, "expired")) { + struct out_req *req; + const char *fail; + const struct tlv_invoice *inv; + + inv = invoice_decode(tmpctx, invstring, strlen(invstring), + plugin_feature_set(cmd->plugin), + chainparams, &fail); + /* 0 relative expiry means "they cancelled it" */ + if (inv && inv->invoice_relative_expiry && *inv->invoice_relative_expiry == 0) + return fail_invreq(cmd, ir, "invoice cancelled"); + + /* Happens when we shortened expiry for currency + * changes. Delete and retry */ + req = jsonrpc_request_start(cmd, "delinvoice", + delinvoice_done, + error, ir); + json_add_label(req->js, &ir->offer_id, + ir->inv->invreq_payer_id, + ir->inv->invreq_recurrence_counter + ? *ir->inv->invreq_recurrence_counter + : 0); + json_add_string(req->js, "status", "expired"); + return send_outreq(req); + } } return error(cmd, method, buf, err, ir); } @@ -238,9 +280,6 @@ static struct command_result *create_invoicereq(struct command *cmd, { struct out_req *req; - /* FIXME: We should add a real blinded path, and we *need to* - * if we don't have public channels! */ - /* Now, write invoice to db (returns the signed version) */ req = jsonrpc_request_start(cmd, "createinvoice", createinvoice_done, createinvoice_error, ir); @@ -506,7 +545,7 @@ static struct command_result *check_period(struct command *cmd, paywindow_end); } - set_recurring_inv_expiry(ir->inv, paywindow_end); + set_recurring_inv_expiry(cmd, ir->inv, paywindow_end); /* BOLT-recurrence #12: * diff --git a/plugins/test/run-decode_guess_type.c b/plugins/test/run-decode_guess_type.c index 038f3124f440..bbd1629f4922 100644 --- a/plugins/test/run-decode_guess_type.c +++ b/plugins/test/run-decode_guess_type.c @@ -220,6 +220,13 @@ void rpc_scan(struct command *cmd UNNEEDED, /* Generated stub for send_outreq */ struct command_result *send_outreq(const struct out_req *req UNNEEDED) { fprintf(stderr, "send_outreq called!\n"); abort(); } +/* Generated stub for u32_jsonfmt */ +bool u32_jsonfmt(struct command *cmd UNNEEDED, struct json_stream *js UNNEEDED, const char *fieldname UNNEEDED, + u32 *i UNNEEDED) +{ fprintf(stderr, "u32_jsonfmt called!\n"); abort(); } +/* Generated stub for u32_option */ +char *u32_option(struct command *cmd UNNEEDED, const char *arg UNNEEDED, bool check_only UNNEEDED, u32 *i UNNEEDED) +{ fprintf(stderr, "u32_option called!\n"); abort(); } /* AUTOGENERATED MOCKS END */ struct likely_test { diff --git a/tests/plugins/currencyUSDAUD5000.py b/tests/plugins/currencyUSDAUD5000.py index 3a2f99e9aa80..ba0de479073c 100755 --- a/tests/plugins/currencyUSDAUD5000.py +++ b/tests/plugins/currencyUSDAUD5000.py @@ -5,14 +5,23 @@ from pyln.client import Plugin, Millisatoshi plugin = Plugin() +_rate = 5000 # msat per unit @plugin.method("currencyconvert") def currencyconvert(plugin, amount, currency): """Converts currency using given APIs.""" if currency in ('USD', 'AUD'): - return {"msat": Millisatoshi(round(amount * 5000))} + return {"msat": Millisatoshi(round(amount * _rate))} raise Exception("No values available for currency {}".format(currency.upper())) +@plugin.method("setcurrencyrate") +def setcurrencyrate(plugin, msat_per_unit): + """Change the msat-per-unit rate (for testing).""" + global _rate + _rate = msat_per_unit + return {"msat_per_unit": _rate} + + plugin.run() diff --git a/tests/test_pay.py b/tests/test_pay.py index 7ee9871e4758..1a01005975db 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -4846,6 +4846,53 @@ def test_recurrence_expired_offer(node_factory, bitcoind): l1.rpc.pay(ret['invoice'], label='test_recurrence_expired_offer') +def test_recurring_currency_invoice_refresh(node_factory): + """After currency-expiry seconds, a new invoice request gets a + fresh invoice at the current rate; a request within that window + returns the cached invoice. + + """ + plugin = os.path.join(os.path.dirname(__file__), 'plugins/currencyUSDAUD5000.py') + # l2 hosts the offer with a 10-second currency expiry (normally 600s) + l1, l2 = node_factory.line_graph(2, + opts={'disable-plugin': 'cln-currencyrate', + 'plugin': plugin, + 'dev-currency-expiry': 10}) + + # Period is much longer than the currency expiry so we stay in period 0. + offer = l2.rpc.call('offer', {'amount': '1USD', + 'description': 'refresh', + 'recurrence': '1000seconds'})['bolt12'] + + # First fetch: server creates a fresh invoice (1 USD = 5000 msat). + inv1 = l1.rpc.call('fetchinvoice', {'offer': offer, + 'recurrence_counter': 0, + 'recurrence_label': 'refresh'})['invoice'] + + # Second fetch within the 10-second window: server returns the same invoice. + inv2 = l1.rpc.call('fetchinvoice', {'offer': offer, + 'recurrence_counter': 0, + 'recurrence_label': 'refresh'})['invoice'] + assert inv1 == inv2, "Expected identical invoice within currency-expiry window" + + # Change the rate on l2 before the window expires (1 USD = 2500 msat now). + l2.rpc.call('setcurrencyrate', {'msat_per_unit': 2500}) + + # Wait for the 10-second currency expiry to lapse. + time.sleep(11) + + # Third fetch after expiry: server issues a fresh invoice at the new rate. + inv3 = l1.rpc.call('fetchinvoice', {'offer': offer, + 'recurrence_counter': 0, + 'recurrence_label': 'refresh'})['invoice'] + assert inv3 != inv1, "Expected a fresh invoice after currency-expiry elapsed" + + dec1 = l1.rpc.decode(inv1) + dec3 = l1.rpc.decode(inv3) + assert dec1['invoice_amount_msat'] == 5000 + assert dec3['invoice_amount_msat'] == 2500 + + def test_fetchinvoice_autoconnect(node_factory, bitcoind): """We should autoconnect if we need to, to route.""" @@ -7181,7 +7228,7 @@ def test_cancel_recurrence(node_factory): assert decoded['invreq_recurrence_cancel'] is True # Now we cannot fetch second one! - with pytest.raises(RpcError, match=r"invoice expired \(cancelled\?\)"): + with pytest.raises(RpcError, match=r"invoice cancelled"): l1.rpc.fetchinvoice(offer=offer['bolt12'], recurrence_counter=1, recurrence_label='test_cancel_recurrence') From 0ced86bd65a55d2e61093f0688d2f2a19ae22aa3 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:04:49 +0930 Subject: [PATCH 17/20] offers: limit expiry to offer limit, or 10 minutes with currency conversion. This mirrors the previous commit, where we did it for recurring offers. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Rusty Russell Changelog-Fixed: Offers: we set a 10 minute expiry when we create invoices for offers in other currencies. --- plugins/offers_invreq_hook.c | 29 +++++++++++++++++++++++++++-- tests/test_pay.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/plugins/offers_invreq_hook.c b/plugins/offers_invreq_hook.c index 07f7c50a22b7..b6202d33eba1 100644 --- a/plugins/offers_invreq_hook.c +++ b/plugins/offers_invreq_hook.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -744,6 +745,9 @@ static struct command_result *handle_amount_and_recurrence(struct command *cmd, struct invreq *ir, struct amount_msat base_inv_amount) { + const struct offers_data *od = get_offers_data(cmd->plugin); + u32 rel_expiry = BOLT12_DEFAULT_REL_EXPIRY; + /* BOLT #12: * - if `invreq_amount` is present: * - MUST reject the invoice request if `invreq_amount`.`msat` is less than the @@ -784,8 +788,29 @@ static struct command_result *handle_amount_and_recurrence(struct command *cmd, if (ir->inv->invreq_recurrence_counter) { return check_previous_invoice(cmd, ir); } - /* We're happy with 2 hours timeout (default): they can always - * request another. */ + + /* Don't allow invoices past expiry of offer. */ + if (ir->invreq->offer_absolute_expiry) { + u64 until = *ir->invreq->offer_absolute_expiry + - *ir->inv->invoice_created_at; + if (until < rel_expiry) + rel_expiry = until; + } + + /* And keep them short if currency conversion is involved */ + if (ir->invreq->offer_currency && od->dev_currency_expiry < rel_expiry) + rel_expiry = od->dev_currency_expiry; + + /* BOLT #12: + * + * - if the expiry for accepting payment is not 7200 seconds after + * `invoice_created_at`: + * - MUST set `invoice_relative_expiry`.`seconds_from_creation` to + * the number of seconds after `invoice_created_at` that payment + * of this invoice should not be attempted. + */ + if (rel_expiry != BOLT12_DEFAULT_REL_EXPIRY) + ir->inv->invoice_relative_expiry = tal_dup(ir->inv, u32, &rel_expiry); /* FIXME: Fallbacks? */ return add_blindedpaths(cmd, ir); diff --git a/tests/test_pay.py b/tests/test_pay.py index 1a01005975db..b7427113b57b 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -4732,6 +4732,34 @@ def test_fetchinvoice(node_factory, bitcoind): l1.rpc.call('fetchinvoice', {'offer': offer1['bolt12'], 'timeout': 10}) +def test_fetchinvoice_invoice_expiry(node_factory, bitcoind): + """Non-recurring invoices get a relative_expiry iff the offer has an + absolute_expiry or uses a currency (whose conversion rate can change).""" + plugin = os.path.join(os.path.dirname(__file__), 'plugins/currencyUSDAUD5000.py') + # l2 is the offer node; dev-currency-expiry=2 makes the currency window short. + l1, l2 = node_factory.line_graph(2, + opts=[{}, + {'plugin': plugin, + 'dev-currency-expiry': 10}]) + + # Plain msat offer: no currency, no absolute expiry → default expiry (7200). + offer_plain = l2.rpc.offer(amount='1msat', description='plain') + inv_plain = l1.rpc.fetchinvoice(offer=offer_plain['bolt12']) + assert l1.rpc.decode(inv_plain['invoice'])['invoice_relative_expiry'] == 7200 + + # Currency offer: invoice must expire within dev_currency_expiry seconds. + offer_usd = l2.rpc.offer(amount='1USD', description='usd') + inv_usd = l1.rpc.fetchinvoice(offer=offer_usd['bolt12']) + assert l1.rpc.decode(inv_usd['invoice'])['invoice_relative_expiry'] <= 10 + + # Absolute-expiry offer: invoice relative_expiry must not exceed time-to-expiry. + abs_expiry = int(time.time()) + 10 + offer_abs = l2.rpc.offer(amount='1msat', description='abs', + absolute_expiry=abs_expiry) + inv_abs = l1.rpc.fetchinvoice(offer=offer_abs['bolt12']) + assert l1.rpc.decode(inv_abs['invoice'])['invoice_relative_expiry'] <= 10 + + def test_fetchinvoice_recurrence(node_factory, bitcoind): """Test for our recurrence extension""" l1, l2, l3 = node_factory.line_graph(3, wait_for_announce=True, From 68119bb62146e342bdfb8438fddeb1f4a2facecd Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:05:49 +0930 Subject: [PATCH 18/20] fetchinvoice: don't bother with checking recurrence timing. We don't actually need to enforce this check here: we can make that the users' responsibility. This simplifies our work quite a lot, since createinvoicerequest won't have to do a lookup any more. This can be done by the repeatpay plugin itself. Signed-off-by: Rusty Russell --- plugins/fetchinvoice.c | 66 ------------------------------------------ tests/test_pay.py | 4 +-- 2 files changed, 2 insertions(+), 68 deletions(-) diff --git a/plugins/fetchinvoice.c b/plugins/fetchinvoice.c index 8ff374d5715b..8fb0dea828b0 100644 --- a/plugins/fetchinvoice.c +++ b/plugins/fetchinvoice.c @@ -683,7 +683,6 @@ static struct command_result *invreq_done(struct command *cmd, struct tlv_onionmsg_tlv *payload; const jsmntok_t *t; const char *fail; - const struct recurrence *recurrence; /* Get invoice request */ t = json_get_member(buf, result, "bolt12"); @@ -712,71 +711,6 @@ static struct command_result *invreq_done(struct command *cmd, json_tok_full(buf, t), fail); - recurrence = invreq_recurrence(sent->invreq); - /* Now that's given us the previous base, check this is an OK time - * to request an invoice. */ - if (sent->invreq->invreq_recurrence_counter) { - u64 *base; - const jsmntok_t *pbtok; - u64 period_idx = *sent->invreq->invreq_recurrence_counter; - - if (sent->invreq->invreq_recurrence_start) - period_idx += *sent->invreq->invreq_recurrence_start; - - /* BOLT-recurrence #12: - * - if `offer_recurrence_limit` is present: - * - MUST NOT send an `invoice_request` for a period index greater than - * `max_period_index` - */ - if (sent->invreq->offer_recurrence_limit - && period_idx > *sent->invreq->offer_recurrence_limit) - return command_fail(cmd, LIGHTNINGD, - "Can't send invreq for period %" - PRIu64" (limit %u)", - period_idx, - *sent->invreq->offer_recurrence_limit); - - /* BOLT-recurrence #12: - * - SHOULD NOT send an `invoice_request` for a period which has - * already passed. - */ - /* If there's no recurrence_base, we need a previous payment - * for this: fortunately createinvoicerequest does that - * lookup. */ - pbtok = json_get_member(buf, result, "previous_basetime"); - if (pbtok) { - base = tal(tmpctx, u64); - json_to_u64(buf, pbtok, base); - } else if (sent->invreq->offer_recurrence_base) - base = &sent->invreq->offer_recurrence_base->basetime; - else { - /* happens with *recurrence_base == 0 */ - assert(*sent->invreq->invreq_recurrence_counter == 0); - base = NULL; - } - - if (base) { - u64 period_start, period_end, now = clock_time().ts.tv_sec; - offer_period_paywindow(recurrence, - sent->invreq->offer_recurrence_paywindow, - sent->invreq->offer_recurrence_base, - *base, period_idx, - &period_start, &period_end); - if (now < period_start) - return command_fail(cmd, LIGHTNINGD, - "Too early: can't send until time %" - PRIu64" (in %"PRIu64" secs)", - period_start, - period_start - now); - if (now > period_end) - return command_fail(cmd, LIGHTNINGD, - "Too late: expired time %" - PRIu64" (%"PRIu64" secs ago)", - period_end, - now - period_end); - } - } - payload = tlv_onionmsg_tlv_new(sent); payload->invoice_request = tal_arr(payload, u8, 0); towire_tlv_invoice_request(&payload->invoice_request, sent->invreq); diff --git a/tests/test_pay.py b/tests/test_pay.py index b7427113b57b..22ee35674208 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -4803,7 +4803,7 @@ def test_fetchinvoice_recurrence(node_factory, bitcoind): l1.rpc.pay(ret['invoice'], label='test recurrence') # Now we can, but it's too early: - with pytest.raises(RpcError, match="Too early: can't send until time {}".format(period1['starttime'])): + with pytest.raises(RpcError, match=fr"Remote node sent failure message.*period_index 2 too early \(start {period1['starttime']}\)"): l1.rpc.call('fetchinvoice', {'offer': offer3['bolt12'], 'recurrence_counter': 2, 'recurrence_label': 'test recurrence'}) @@ -4848,7 +4848,7 @@ def test_fetchinvoice_recurrence(node_factory, bitcoind): while int(time.time()) <= period3['paywindow_end']: time.sleep(1) - with pytest.raises(RpcError, match="Too late: expired time {}".format(period3['paywindow_end'])): + with pytest.raises(RpcError, match=fr"Remote node sent failure message.*period_index 1 too late \(ended {period3['paywindow_end']}\)"): l1.rpc.call('fetchinvoice', {'offer': offer, 'recurrence_counter': 1, 'recurrence_label': 'test paywindow'}) From a892e45dc3fb132cf6a600944e96f9a7f5dc8384 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:06:42 +0930 Subject: [PATCH 19/20] lightningd: don't do previous invoice checking in createinvoicerequest. This is an undocumented interface, so we can just change it. Rename "recurrence_label" to the more general "label", now we don't require it to find previous payments. Signed-off-by: Rusty Russell --- lightningd/offer.c | 112 +---------------------------------------- plugins/fetchinvoice.c | 4 +- plugins/offers_offer.c | 2 +- tests/test_pay.py | 9 +--- 4 files changed, 5 insertions(+), 122 deletions(-) diff --git a/lightningd/offer.c b/lightningd/offer.c index 1ba82d784cb0..44e6bcdeb134 100644 --- a/lightningd/offer.c +++ b/lightningd/offer.c @@ -313,101 +313,6 @@ static const struct json_command enableoffer_command = { }; AUTODATA(json_command, &enableoffer_command); - -/* We do some sanity checks now, since we're looking up prev payment anyway, - * but our main purpose is to fill in prev_basetime tweak. */ -static struct command_result *prev_payment(struct command *cmd, - const struct json_escape *label, - const struct tlv_invoice_request *invreq, - u64 **prev_basetime) -{ - struct sha256 invreq_oid; - u64 last_recurrence = UINT64_MAX; - bool prev_unpaid = false; - - invreq_offer_id(invreq, &invreq_oid); - - for (struct db_stmt *stmt = payments_by_label(cmd->ld->wallet, label); - stmt; - stmt = payments_next(cmd->ld->wallet, stmt)) { - const struct wallet_payment *payment; - const struct tlv_invoice *inv; - const char *fail; - struct sha256 inv_oid; - - payment = payment_get_details(tmpctx, stmt); - if (!payment->invstring) - continue; - - inv = invoice_decode(tmpctx, payment->invstring, - strlen(payment->invstring), - NULL, chainparams, &fail); - if (!inv) - continue; - - /* They can reuse labels across different offers. */ - invoice_offer_id(inv, &inv_oid); - if (!sha256_eq(&inv_oid, &invreq_oid)) - continue; - - /* Be paranoid, in case someone inserts their own - * clashing label! */ - if (!inv->invreq_recurrence_counter) - continue; - - /* BOLT-recurrence #12: - * - if `offer_recurrence_base` is present: - * - MUST include `invreq_recurrence_start` - * - MUST set `period_offset` to the period the sender wants for the - * initial request - * - MUST set `period_offset` to the same value on all following requests. - */ - if (inv->invreq_recurrence_start - && invreq->invreq_recurrence_start - && *inv->invreq_recurrence_start != *invreq->invreq_recurrence_start) { - tal_free(stmt); - return command_fail(cmd, JSONRPC2_INVALID_PARAMS, - "recurrence_start was" - " previously %u", - *inv->invreq_recurrence_start); - } - - /* They should all have the same basetime */ - if (!*prev_basetime) - *prev_basetime = tal_dup(cmd, u64, inv->invoice_recurrence_basetime); - - /* Track highest one for better diagnostics */ - if (last_recurrence == UINT64_MAX - || last_recurrence < *inv->invreq_recurrence_counter) { - last_recurrence = *inv->invreq_recurrence_counter; - } - - if (*inv->invreq_recurrence_counter == *invreq->invreq_recurrence_counter-1) { - /* Got it! */ - if (payment->status == PAYMENT_COMPLETE) { - tal_free(stmt); - return NULL; - } else - prev_unpaid = true; - } - } - - /* We found one, but it didn't succeed */ - if (prev_unpaid) - return command_fail(cmd, JSONRPC2_INVALID_PARAMS, - "previous invoice payment did not succeed"); - - /* We found one, but it was not the previus one */ - if (last_recurrence != UINT64_MAX) - return command_fail(cmd, JSONRPC2_INVALID_PARAMS, - "previous invoice has not been paid (last was %"PRIu64")", - last_recurrence); - - return command_fail(cmd, JSONRPC2_INVALID_PARAMS, - "No previous payment attempted for this" - " label and offer"); -} - /* FIXME(vincenzopalazzo): move this to comm/bolt12.h */ static struct command_result *param_b12_invreq(struct command *cmd, const char *name, @@ -483,7 +388,7 @@ static struct command_result *json_createinvoicerequest(struct command *cmd, if (!param_check(cmd, buffer, params, p_req("bolt12", param_b12_invreq, &invreq), p_req("savetodb", param_bool, &save), - p_opt("recurrence_label", param_label, &label), + p_opt("label", param_label, &label), p_opt_def("single_use", param_bool, &single_use, true), NULL)) return command_param_failed(); @@ -493,21 +398,6 @@ static struct command_result *json_createinvoicerequest(struct command *cmd, else status = OFFER_MULTIPLE_USE_UNUSED; - /* If it's a recurring payment, we look for previous to copy basetime */ - if (invreq->invreq_recurrence_counter) { - if (!label) - return command_fail(cmd, JSONRPC2_INVALID_PARAMS, - "Need payment label for recurring payments"); - - if (*invreq->invreq_recurrence_counter != 0) { - struct command_result *err - = prev_payment(cmd, label, invreq, - &prev_basetime); - if (err) - return err; - } - } - /* If the payer_id is not our node id, we sanity check that it * correctly maps from invreq_metadata */ if (!pubkey_eq(invreq->invreq_payer_id, &cmd->ld->our_pubkey)) { diff --git a/plugins/fetchinvoice.c b/plugins/fetchinvoice.c index 8fb0dea828b0..8d83328cb127 100644 --- a/plugins/fetchinvoice.c +++ b/plugins/fetchinvoice.c @@ -1096,7 +1096,7 @@ struct command_result *json_fetchinvoice(struct command *cmd, json_add_string(req->js, "bolt12", invrequest_encode(tmpctx, invreq)); json_add_bool(req->js, "savetodb", false); if (rec_label) - json_add_string(req->js, "recurrence_label", rec_label); + json_add_string(req->js, "label", rec_label); return send_outreq(req); } @@ -1250,7 +1250,7 @@ struct command_result *json_cancelrecurringinvoice(struct command *cmd, /* We don't want this is the database: that's only for ones we publish */ json_add_string(req->js, "bolt12", invrequest_encode(tmpctx, invreq)); json_add_bool(req->js, "savetodb", false); - json_add_string(req->js, "recurrence_label", rec_label); + json_add_string(req->js, "label", rec_label); return send_outreq(req); } diff --git a/plugins/offers_offer.c b/plugins/offers_offer.c index 77c3cf9be7e1..0bd87ad726ba 100644 --- a/plugins/offers_offer.c +++ b/plugins/offers_offer.c @@ -607,7 +607,7 @@ static struct command_result *call_createinvoicerequest(struct command *cmd, json_add_bool(req->js, "savetodb", true); json_add_bool(req->js, "single_use", single_use); if (label) - json_add_string(req->js, "recurrence_label", label); + json_add_string(req->js, "label", label); return send_outreq(req); } diff --git a/tests/test_pay.py b/tests/test_pay.py index 22ee35674208..053ce58b58f2 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -4795,7 +4795,7 @@ def test_fetchinvoice_recurrence(node_factory, bitcoind): assert period2['paywindow_end'] == period2['endtime'] # Can't request 2 before paying 1. - with pytest.raises(RpcError, match='previous invoice has not been paid'): + with pytest.raises(RpcError, match='Remote node sent failure message.*Previous invoice #1 status "unpaid"'): l1.rpc.call('fetchinvoice', {'offer': offer3['bolt12'], 'recurrence_counter': 2, 'recurrence_label': 'test recurrence'}) @@ -7229,9 +7229,6 @@ def test_cancel_recurrence(node_factory): with pytest.raises(RpcError, match="recurrence_counter: Must be non-zero"): l1.rpc.cancelrecurringinvoice(offer['bolt12'], 0, 'test_cancel_recurrence') - with pytest.raises(RpcError, match="No previous payment attempted for this label and offer"): - l1.rpc.cancelrecurringinvoice(offer['bolt12'], 1, 'test_cancel_recurrence') - # Fetch and pay first one ret = l1.rpc.fetchinvoice(offer=offer['bolt12'], recurrence_counter=0, @@ -7241,10 +7238,6 @@ def test_cancel_recurrence(node_factory): decoded = l1.rpc.decode(m.group(1)) assert 'invreq_recurrence_cancel' not in decoded - # Cancel counter must be correct! - with pytest.raises(RpcError, match=r"previous invoice has not been paid \(last was 0\)"): - l1.rpc.cancelrecurringinvoice(offer['bolt12'], 2, 'test_cancel_recurrence') - # Cancel second one. l1.rpc.cancelrecurringinvoice(offer=offer['bolt12'], recurrence_counter=1, From 7bddd3bedfc8f7e57fbe4b5c3aa0e07509ab1902 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 20 May 2026 18:06:42 +0930 Subject: [PATCH 20/20] fetchinvoice: handle weird labels in recurrence_label parameter. Signed-off-by: Rusty Russell --- plugins/fetchinvoice.c | 23 +++++++++++++---------- tests/test_pay.py | 24 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/plugins/fetchinvoice.c b/plugins/fetchinvoice.c index 8d83328cb127..48a52a051f39 100644 --- a/plugins/fetchinvoice.c +++ b/plugins/fetchinvoice.c @@ -1,4 +1,5 @@ #include "config.h" +#include #include #include #include @@ -791,7 +792,7 @@ static bool payer_key(const struct offers_data *od, static u8 *recurrence_invreq_metadata(const tal_t *ctx, const struct tlv_invoice_request *invreq, const struct secret *nodealias_base, - const char *rec_label) + const struct json_escape *rec_label) { struct sha256 offer_id, tweak; u8 *tweak_input; @@ -799,11 +800,11 @@ static u8 *recurrence_invreq_metadata(const tal_t *ctx, /* Use "offer_id || label" as tweak input */ invreq_offer_id(invreq, &offer_id); tweak_input = tal_arr(tmpctx, u8, - sizeof(offer_id) + strlen(rec_label)); + sizeof(offer_id) + strlen(rec_label->s)); memcpy(tweak_input, &offer_id, sizeof(offer_id)); memcpy(tweak_input + sizeof(offer_id), - rec_label, - strlen(rec_label)); + rec_label->s, + strlen(rec_label->s)); bolt12_alias_tweak(nodealias_base, tweak_input, @@ -854,7 +855,8 @@ struct command_result *json_fetchinvoice(struct command *cmd, { const struct offers_data *od = get_offers_data(cmd->plugin); struct amount_msat *msat; - const char *rec_label, *payer_note; + const char *payer_note; + struct json_escape *rec_label; u8 *payer_metadata; struct out_req *req; struct tlv_invoice_request *invreq; @@ -870,7 +872,7 @@ struct command_result *json_fetchinvoice(struct command *cmd, p_opt("quantity", param_u64, &quantity), p_opt("recurrence_counter", param_number, &recurrence_counter), p_opt("recurrence_start", param_number, &recurrence_start), - p_opt("recurrence_label", param_string, &rec_label), + p_opt("recurrence_label", param_label, &rec_label), p_opt_def("timeout", param_number, &timeout, 60), p_opt("payer_note", param_string, &payer_note), p_opt("payer_metadata", param_bin_from_hex, &payer_metadata), @@ -1096,7 +1098,7 @@ struct command_result *json_fetchinvoice(struct command *cmd, json_add_string(req->js, "bolt12", invrequest_encode(tmpctx, invreq)); json_add_bool(req->js, "savetodb", false); if (rec_label) - json_add_string(req->js, "label", rec_label); + json_add_escaped_string(req->js, "label", rec_label); return send_outreq(req); } @@ -1105,7 +1107,8 @@ struct command_result *json_cancelrecurringinvoice(struct command *cmd, const jsmntok_t *params) { const struct offers_data *od = get_offers_data(cmd->plugin); - const char *rec_label, *payer_note; + const char *payer_note; + struct json_escape *rec_label; struct out_req *req; struct tlv_invoice_request *invreq; struct sent *sent = tal(cmd, struct sent); @@ -1115,7 +1118,7 @@ struct command_result *json_cancelrecurringinvoice(struct command *cmd, if (!param_check(cmd, buffer, params, p_req("offer", param_offer, &sent->offer), p_req("recurrence_counter", param_number, &recurrence_counter), - p_req("recurrence_label", param_string, &rec_label), + p_req("recurrence_label", param_label, &rec_label), p_opt("recurrence_start", param_number, &recurrence_start), p_opt("payer_note", param_string, &payer_note), p_opt("bip353", param_bip353, &bip353), @@ -1250,7 +1253,7 @@ struct command_result *json_cancelrecurringinvoice(struct command *cmd, /* We don't want this is the database: that's only for ones we publish */ json_add_string(req->js, "bolt12", invrequest_encode(tmpctx, invreq)); json_add_bool(req->js, "savetodb", false); - json_add_string(req->js, "label", rec_label); + json_add_escaped_string(req->js, "label", rec_label); return send_outreq(req); } diff --git a/tests/test_pay.py b/tests/test_pay.py index 053ce58b58f2..2d7b024ded67 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -4549,6 +4549,30 @@ def test_offer(node_factory, bitcoind): assert enable_ret['description'] == offer_desc +def test_recurrence_escaped_label(node_factory, bitcoind): + l1, l2 = node_factory.line_graph(2) + + # Recurring offer. + offer = l2.rpc.offer(amount='1msat', + description='test_recurrence_escaped_label', + recurrence='1minutes')['bolt12'] + # Works the first time + weird_label = 'label \\ " \t \n' + ret = l1.rpc.fetchinvoice(offer=offer, + recurrence_counter=0, + recurrence_label=weird_label) + l1.rpc.xpay(invstring=ret['invoice']) + # Works the second time to match + l1.rpc.fetchinvoice(offer=offer, + recurrence_counter=1, + recurrence_label=weird_label) + + # Works to cancel. + l1.rpc.cancelrecurringinvoice(offer=offer, + recurrence_counter=2, + recurrence_label=weird_label) + + def test_offer_deprecated_api(node_factory, bitcoind): l1, l2 = node_factory.line_graph(2, opts={'allow-deprecated-apis': True})