diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 93d668a6efa8..4c3303f738f2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -13,11 +13,7 @@ contrib/msggen/ @cdecker contrib/pyln-client/ @cdecker contrib/pyln-testing/ @cdecker # Needed to ensure hsmd wire compatibility between releases -hsmd/hsmd_wire.csv @cdecker - -wallet/invoices.* @ZmnSCPxj -plugins/multifundchannel.c @ZmnSCPxj -doc/BACKUP.md @ZmnSCPxj +hsmd/hsmd_wire.csv @cdecker @ksedgwic @devrandom # See https://help.github.com/articles/about-codeowners/ for more # information diff --git a/.github/scripts/sync-rpc-cmds.py b/.github/scripts/sync-rpc-cmds.py new file mode 100644 index 000000000000..efb3134d791e --- /dev/null +++ b/.github/scripts/sync-rpc-cmds.py @@ -0,0 +1,92 @@ +import os +from time import sleep +import requests +import re + +# readme url +URL = "https://dash.readme.com/api/v1/docs" +# category id for API reference +CATEGORY_ID = "63e4e160c60b2e001dd1cc4e" + + +def checkIfDocIsPresent(title, headers): + + check_url = URL + "/" + title + response = requests.get(check_url, headers=headers) + + if response.status_code == 200: + return True + else: + return False + + +def publishDoc(title, body, order): + key = os.environ.get("README_API_KEY") + payload = { + "title": title, + "type": "basic", + "body": body, + "category": CATEGORY_ID, + "hidden": False, + "order": order, + } + headers = { + "accept": "application/json", + "content-type": "application/json", + "authorization": "Basic " + key, + } + + isDocPresent = checkIfDocIsPresent(title, headers) + if isDocPresent: + # update doc + update_url = URL + "/" + title # title == slug + response = requests.put(update_url, json=payload, headers=headers) + if response.status_code != 200: + print(response.text) + else: + print("Updated ", title) + else: + # create doc + response = requests.post(URL, json=payload, headers=headers) + if response.status_code != 201: + print(response.text) + else: + print("Created ", title) + + +def extract_rpc_commands(rst_content): + manpages_block = re.search( + r"\.\. block_start manpages(.*?)" r"\.\. block_end manpages", + rst_content, + re.DOTALL, + ) + if manpages_block: + commands = re.findall( + r"\b([a-zA-Z0-9_-]+)" r"\s+<([^>]+)>\n", manpages_block.group(1) + ) + return commands + return [] + + +def main(): + # path to the rst file from where we fetch all the RPC commands + path_to_rst = "doc/index.rst" + with open(path_to_rst, "r") as file: + rst_content = file.read() + + commands = extract_rpc_commands(rst_content) + if commands: + order = 0 + for name, file in commands: + print(f"{name}\t\t{file}") + with open("doc/" + file) as f: + body = f.read() + publishDoc(name, body, order) + order = order + 1 + sleep(3) + else: + print("No commands found in the Manpages block.") + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/readme-rpc-sync.yml b/.github/workflows/readme-rpc-sync.yml new file mode 100644 index 000000000000..a89c19807d1f --- /dev/null +++ b/.github/workflows/readme-rpc-sync.yml @@ -0,0 +1,28 @@ +name: ReadMe RPC Sync + +on: + push: + branches: + - 'master' + paths: + - 'doc/**.md' + +jobs: + rdme-rpc-sync: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.8' + + - name: Install requests module + run: python -m pip install requests + + - name: Set environment variable and run + env: + README_API_KEY: ${{ secrets.README_API_KEY }} + run: python .github/scripts/sync-rpc-cmds.py diff --git a/channeld/channeld.c b/channeld/channeld.c index 492d8489b6d7..5d3ae1dde63e 100644 --- a/channeld/channeld.c +++ b/channeld/channeld.c @@ -1486,15 +1486,21 @@ static u8 *send_commit_part(struct peer *peer, const struct htlc **htlc_map; struct wally_tx_output *direct_outputs[NUM_SIDES]; struct penalty_base *pbase; - - status_debug("send_commit_part(splice: %d, remote_splice: %d)", - (int)splice_amnt, (int)remote_splice_amnt); - - struct tlv_commitment_signed_tlvs *cs_tlv = tlv_commitment_signed_tlvs_new(tmpctx); - cs_tlv->splice_info = tal(cs_tlv, struct channel_id); - derive_channel_id(cs_tlv->splice_info, funding); + + /* In theory, peer will ignore TLV 1 as unknown, but while + * spec is in flux this is dangerous, as it may change: so don't + * send unless negotiated */ + if (feature_negotiated(peer->our_features, + peer->their_features, + OPT_EXPERIMENTAL_SPLICE)) { + status_debug("send_commit_part(splice: %d, remote_splice: %d)", + (int)splice_amnt, (int)remote_splice_amnt); + + cs_tlv->splice_info = tal(cs_tlv, struct channel_id); + derive_channel_id(cs_tlv->splice_info, funding); + } txs = channel_splice_txs(tmpctx, funding, funding_sats, &htlc_map, direct_outputs, &funding_wscript, @@ -3349,7 +3355,7 @@ static void resume_splice_negotiation(struct peer *peer, if (tal_count(inws) > current_psbt->num_inputs) peer_failed_warn(peer->pps, &peer->channel_id, - "%lu too many witness elements received", + "%zu too many witness elements received", tal_count(inws) - current_psbt->num_inputs); /* We put the PSBT + sigs all together */ diff --git a/common/features.c b/common/features.c index 89c1bd04746d..121f96ee9e38 100644 --- a/common/features.c +++ b/common/features.c @@ -146,6 +146,10 @@ static const struct feature_style feature_styles[] = { .copy_style = { [INIT_FEATURE] = FEATURE_REPRESENT, [NODE_ANNOUNCE_FEATURE] = FEATURE_REPRESENT, [CHANNEL_FEATURE] = FEATURE_DONT_REPRESENT} }, + { OPT_EXPERIMENTAL_SPLICE, + .copy_style = { [INIT_FEATURE] = FEATURE_REPRESENT, + [NODE_ANNOUNCE_FEATURE] = FEATURE_REPRESENT, + [CHANNEL_FEATURE] = FEATURE_DONT_REPRESENT} }, }; struct dependency { @@ -491,6 +495,41 @@ const char *feature_name(const tal_t *ctx, size_t f) NULL, NULL, NULL, /* 100/101 */ + NULL, + NULL, + NULL, + NULL, + NULL, /* 110/111 */ + NULL, + NULL, + NULL, + NULL, + NULL, /* 120/121 */ + NULL, + NULL, + NULL, + NULL, + NULL, /* 130/131 */ + NULL, + NULL, + NULL, + NULL, + NULL, /* 140/141 */ + NULL, + NULL, + NULL, + NULL, + NULL, /* 150/151 */ + NULL, + NULL, + NULL, + NULL, + NULL, /* 160/161 */ + "option_experimental_splice", /* https://github.com/lightning/bolts/pull/863 */ + NULL, + NULL, + NULL, + NULL, /* 170/171 */ }; if (f / 2 >= ARRAY_SIZE(fnames) || !fnames[f / 2]) diff --git a/common/features.h b/common/features.h index 31728d1f2758..640fce1248e1 100644 --- a/common/features.h +++ b/common/features.h @@ -136,7 +136,12 @@ struct feature_set *feature_set_dup(const tal_t *ctx, #define OPT_SHUTDOWN_ANYSEGWIT 26 #define OPT_CHANNEL_TYPE 44 #define OPT_PAYMENT_METADATA 48 + +/* BOLT-splice #9: + * | 62/63 | `option_splice` | ... IN ... + */ #define OPT_SPLICE 62 +#define OPT_EXPERIMENTAL_SPLICE 162 /* BOLT-f53ca2301232db780843e894f55d95d512f297f9 #9: * | 28/29 | `option_dual_fund` | ... IN9 ... diff --git a/common/hsm_version.h b/common/hsm_version.h index 8470dce64226..3f7ea9f6f59e 100644 --- a/common/hsm_version.h +++ b/common/hsm_version.h @@ -16,6 +16,7 @@ * v4 with sign_anchorspend: 8a30722e38b56e82af566b9629ff18da01fcebd1e80ec67f04d8b3a2fa66d81c * v4 with sign_htlc_tx_mingle: b9247e75d41ee1b3fc2f7db0bac8f4e92d544ab2f017d430ae3a000589c384e5 * v4 with splicing: 06f21012936f825913af289fa81af1512c9ada1cb97c611698975a8fd287edbb + * v4 with capabilities called permissions: 7c5bf8ec7cf30302740db85260a9d1ac2c5b0323a2376c28df6b611831f91655 */ #define HSM_MIN_VERSION 3 #define HSM_MAX_VERSION 4 diff --git a/common/test/run-codex32.c b/common/test/run-codex32.c index 5e0c78041858..ab75f129af8f 100644 --- a/common/test/run-codex32.c +++ b/common/test/run-codex32.c @@ -425,7 +425,7 @@ int main(int argc, char *argv[]) for (size_t i = 0; i < ARRAY_SIZE(addr_invalid1); i++) { parts = codex32_decode(tmpctx, NULL, addr_invalid1[i], &fail); if (parts) { - printf("payload == %ld\n", tal_bytelen(parts->payload)); + printf("payload == %zu\n", tal_bytelen(parts->payload)); abort(); } else { assert(streq(fail, "Invalid checksum!") || @@ -473,7 +473,7 @@ int main(int argc, char *argv[]) for (size_t i = 0; i < ARRAY_SIZE(addr_invalid2); i++) { parts = codex32_decode(tmpctx, NULL, addr_invalid2[i], &fail); if (parts) { - printf("payload %ld\n", tal_bytelen(parts->payload)); + printf("payload %zu\n", tal_bytelen(parts->payload)); abort(); } else { assert(streq(fail, "Invalid payload!") || diff --git a/contrib/docker/Dockerfile.tester b/contrib/docker/Dockerfile.tester index 6da1aad543f7..14b61e7b1eb4 100644 --- a/contrib/docker/Dockerfile.tester +++ b/contrib/docker/Dockerfile.tester @@ -1,9 +1,9 @@ -FROM ubuntu:18.04 -MAINTAINER Christian Decker +FROM ubuntu:22.04 +LABEL mantainer="Christian Decker " ENV DEBIAN_FRONTEND noninteractive -ENV BITCOIN_VERSION 0.20.1 -ENV ELEMENTS_VERSION 0.18.1.8 +ENV BITCOIN_VERSION 22.0 +ENV ELEMENTS_VERSION 22.0.2 RUN useradd -ms /bin/bash tester RUN mkdir /build /bolts && chown tester -R /build /bolts @@ -62,16 +62,16 @@ RUN echo "tester ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/tester && \ chmod 0440 /etc/sudoers.d/tester RUN cd /tmp/ && \ - wget https://storage.googleapis.com/c-lightning-tests/bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.bz2 && \ - wget -q https://storage.googleapis.com/c-lightning-tests/elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.bz2 && \ - tar -xjf bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.bz2 && \ - tar -xjf elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.bz2 && \ - mv bitcoin-$BITCOIN_VERSION/bin/* /usr/local/bin && \ - mv elements-$ELEMENTS_VERSION/bin/* /usr/local/bin && \ - rm -rf \ - bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.gz \ - bitcoin-$BITCOIN_VERSION \ - elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.bz2 \ - elements-$ELEMENTS_VERSION + wget https://bitcoincore.org/bin/bitcoin-core-$BITCOIN_VERSION/bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.gz && \ + wget https://github.com/ElementsProject/elements/releases/download/elements-$ELEMENTS_VERSION/elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.gz && \ + tar -xzf bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.gz && \ + tar -xzf elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.gz && \ + mv bitcoin-$BITCOIN_VERSION/bin/* /usr/local/bin && \ + mv elements-$ELEMENTS_VERSION/bin/* /usr/local/bin && \ + rm -rf \ + bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.gz \ + bitcoin-$BITCOIN_VERSION \ + elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.gz \ + elements-$ELEMENTS_VERSION USER tester diff --git a/contrib/docker/scripts/setup.sh b/contrib/docker/scripts/setup.sh index 6f9cbdb76022..9af49030ee9e 100755 --- a/contrib/docker/scripts/setup.sh +++ b/contrib/docker/scripts/setup.sh @@ -1,8 +1,8 @@ #!/bin/bash export DEBIAN_FRONTEND=noninteractive -export BITCOIN_VERSION=0.20.1 -export ELEMENTS_VERSION=0.18.1.8 +export BITCOIN_VERSION=22.0 +export ELEMENTS_VERSION=22.0.2 export RUST_VERSION=nightly export TZ="Europe/London" @@ -50,19 +50,18 @@ sudo apt-get -qq install --no-install-recommends --allow-unauthenticated -yy \ xsltproc \ zlib1g-dev - ( cd /tmp/ || exit 1 - wget https://storage.googleapis.com/c-lightning-tests/bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.bz2 - wget -q https://storage.googleapis.com/c-lightning-tests/elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.bz2 - tar -xjf bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.bz2 - tar -xjf elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.bz2 + wget https://bitcoincore.org/bin/bitcoin-core-$BITCOIN_VERSION/bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.gz + wget https://github.com/ElementsProject/elements/releases/download/elements-$ELEMENTS_VERSION/elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.gz + tar -xzf bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.gz + tar -xzf elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.gz sudo mv bitcoin-$BITCOIN_VERSION/bin/* /usr/local/bin sudo mv elements-$ELEMENTS_VERSION/bin/* /usr/local/bin rm -rf \ bitcoin-$BITCOIN_VERSION-x86_64-linux-gnu.tar.gz \ bitcoin-$BITCOIN_VERSION \ - elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.bz2 \ + elements-$ELEMENTS_VERSION-x86_64-linux-gnu.tar.gz \ elements-$ELEMENTS_VERSION ) diff --git a/contrib/pyln-client/pyln/client/gossmap.py b/contrib/pyln-client/pyln/client/gossmap.py index ad6e681b861d..88641cbba617 100755 --- a/contrib/pyln-client/pyln/client/gossmap.py +++ b/contrib/pyln-client/pyln/client/gossmap.py @@ -74,6 +74,7 @@ class LnFeatureBits(object): OPTION_PROPOSED_UPFRONT_FEE = 56 # IN9 #1052 OPTION_PROPOSED_CLOSING_REJECTED = 60 # IN #1016 OPTION_PROPOSED_SPLICE = 62 # IN #863 + OPTION_PROPOSED_EXPERIMENTAL_SPLICE = 162 # IN #863 def _parse_features(featurebytes): diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py index b3fde8814264..07728ed2b586 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py @@ -2,10 +2,10 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: node.proto """Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() @@ -16,428 +16,427 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xc1\x04\n\x0fGetinfoResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x61lias\x18\x02 \x01(\tH\x00\x88\x01\x01\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\x33\n\x0cour_features\x18\n \x01(\x0b\x32\x18.cln.GetinfoOur_featuresH\x01\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\x02\x88\x01\x01\x12$\n\x17warning_lightningd_sync\x18\x11 \x01(\tH\x03\x88\x01\x01\x42\x08\n\x06_aliasB\x0f\n\r_our_featuresB\x18\n\x16_warning_bitcoind_syncB\x1a\n\x18_warning_lightningd_sync\"S\n\x13GetinfoOur_features\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\"\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\"\x8a\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\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\r\n\tWEBSOCKET\x10\x05\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_addressB\x07\n\x05_portB\t\n\x07_socket\"H\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\x05level\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\x8e\x02\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12\x19\n\x0cnum_channels\x18\x08 \x01(\rH\x00\x88\x01\x01\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12-\n\x08\x63hannels\x18\x04 \x03(\x0b\x32\x1b.cln.ListpeersPeersChannels\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x42\x0f\n\r_num_channelsB\x0e\n\x0c_remote_addrB\x0b\n\t_features\"\xfd\x02\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\"i\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\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\"\xd6\x17\n\x16ListpeersPeersChannels\x12\x46\n\x05state\x18\x01 \x01(\x0e\x32\x37.cln.ListpeersPeersChannels.ListpeersPeersChannelsState\x12\x19\n\x0cscratch_txid\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\".cln.ListpeersPeersChannelsFeerateH\x01\x88\x01\x01\x12\x12\n\x05owner\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x17\n\nchannel_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\x07 \x01(\x0cH\x05\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x08 \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\t \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\n \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0b \x01(\tH\t\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0c \x01(\rH\n\x88\x01\x01\x12\x35\n\x08inflight\x18\r \x03(\x0b\x32#.cln.ListpeersPeersChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x0e \x01(\x0cH\x0b\x88\x01\x01\x12\x14\n\x07private\x18\x0f \x01(\x08H\x0c\x88\x01\x01\x12 \n\x06opener\x18\x10 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x11 \x01(\x0e\x32\x10.cln.ChannelSideH\r\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x12 \x03(\t\x12\x38\n\x07\x66unding\x18\x13 \x01(\x0b\x32\".cln.ListpeersPeersChannelsFundingH\x0e\x88\x01\x01\x12$\n\nto_us_msat\x18\x14 \x01(\x0b\x32\x0b.cln.AmountH\x0f\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x15 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x16 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12$\n\ntotal_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x19 \x01(\rH\x14\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x15\x88\x01\x01\x12\x30\n\x16max_total_htlc_in_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18\x1e \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\x1f \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\x30 \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18\x31 \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\x34\n\x05\x61lias\x18\x32 \x01(\x0b\x32 .cln.ListpeersPeersChannelsAliasH!\x88\x01\x01\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* \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18+ \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18, \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12/\n\x05htlcs\x18. \x03(\x0b\x32 .cln.ListpeersPeersChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18/ \x01(\tH*\x88\x01\x01\"\xa1\x02\n\x1bListpeersPeersChannelsState\x12\x0c\n\x08OPENINGD\x10\x00\x12\x1c\n\x18\x43HANNELD_AWAITING_LOCKIN\x10\x01\x12\x13\n\x0f\x43HANNELD_NORMAL\x10\x02\x12\x1a\n\x16\x43HANNELD_SHUTTING_DOWN\x10\x03\x12\x18\n\x14\x43LOSINGD_SIGEXCHANGE\x10\x04\x12\x15\n\x11\x43LOSINGD_COMPLETE\x10\x05\x12\x17\n\x13\x41WAITING_UNILATERAL\x10\x06\x12\x16\n\x12\x46UNDING_SPEND_SEEN\x10\x07\x12\x0b\n\x07ONCHAIN\x10\x08\x12\x17\n\x13\x44UALOPEND_OPEN_INIT\x10\t\x12\x1d\n\x19\x44UALOPEND_AWAITING_LOCKIN\x10\nB\x0f\n\r_scratch_txidB\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\x19\n\x17_max_total_htlc_in_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_addr\"=\n\x1dListpeersPeersChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\xf3\x01\n\x1eListpeersPeersChannelsInflight\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\x1a\n\rsplice_amount\x18\x07 \x01(\x12H\x00\x88\x01\x01\x12\x14\n\x0cscratch_txid\x18\x06 \x01(\x0c\x42\x10\n\x0e_splice_amount\"\x9b\x02\n\x1dListpeersPeersChannelsFunding\x12%\n\x0bpushed_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msat\"[\n\x1bListpeersPeersChannelsAlias\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\"\xf1\x02\n\x1bListpeersPeersChannelsHtlcs\x12X\n\tdirection\x18\x01 \x01(\x0e\x32\x45.cln.ListpeersPeersChannelsHtlcs.ListpeersPeersChannelsHtlcsDirection\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\"7\n$ListpeersPeersChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"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\"\x83\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\x10\n\x08reserved\x18\t \x01(\x08\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\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_blockheight\"\xab\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\x17\n\nchannel_id\x18\t \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_channel_idB\x13\n\x11_short_channel_id\"\xdd\x02\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%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x06\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\x10\n\x0e_localinvreqidB\n\n\x08_groupid\"\xd1\x04\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\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x04\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x05\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x08\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\t\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\x0f\n\r_completed_atB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_message\"\\\n\x0cSendpayRoute\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\n\n\x02id\x18\x02 \x01(\x0c\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\x12\x0f\n\x07\x63hannel\x18\x04 \x01(\t\"\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\x11\n\tdirection\x18\x10 \x01(\r\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\x42\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\"o\n\x17\x41utocleaninvoiceRequest\x12\x17\n\nexpired_by\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rcycle_seconds\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_expired_byB\x10\n\x0e_cycle_seconds\"\x81\x01\n\x18\x41utocleaninvoiceResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x17\n\nexpired_by\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rcycle_seconds\x18\x03 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_expired_byB\x10\n\x0e_cycle_seconds\"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\"\xab\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0f\n\x02tx\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04txid\x18\x03 \x01(\x0cH\x01\x88\x01\x01\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\x42\x05\n\x03_txB\x07\n\x05_txid\"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\"\xaf\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\x1a\n\rcreated_index\x18\x10 \x01(\x04H\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\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\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\x10\n\x0e_created_indexB\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_note\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x02\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\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\t\n\x07_stringB\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generation\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x0b\n\x03key\x18\x05 \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\"\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\x0b\n\x03key\x18\x03 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x42\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x0b\n\x03key\x18\x05 \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\"H\n\x18\x44\x65lexpiredinvoiceRequest\x12\x1a\n\rmaxexpirytime\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\x10\n\x0e_maxexpirytime\"\x1b\n\x19\x44\x65lexpiredinvoiceResponse\"\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\"\xa1\x04\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\x1a\n\rcreated_index\x18\x0c \x01(\x04H\x04\x88\x01\x01\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x05\x88\x01\x01\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\x06\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x07\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\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_note\"\xfa\x01\n\x0eInvoiceRequest\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAny\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x00\x88\x01\x01\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_expiryB\x0b\n\t_preimageB\x07\n\x05_cltvB\x0f\n\r_deschashonly\"\x95\x03\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\x1a\n\rcreated_index\x18\n \x01(\x04H\x00\x88\x01\x01\x12\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x03\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x05\x88\x01\x01\x42\x10\n\x0e_created_indexB\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\"#\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\"\xfe\x05\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\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x05\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\x07\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x08\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\n\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\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\x14\n\x12_invreq_payer_noteB\x10\n\x0e_created_indexB\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\"\x8a\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12*\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x17.cln.SendonionFirst_hop\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%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x06\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x10\n\x0e_localinvreqidB\n\n\x08_groupid\"\x8b\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\x13\n\x06partid\x18\r \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x07\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\t\n\x07_partidB\x13\n\x11_payment_preimageB\n\n\x08_message\"Q\n\x12SendonionFirst_hop\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\"\xeb\x01\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\";\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_status\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xf4\x04\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x00\x88\x01\x01\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\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\x06\x62olt11\x18\n \x01(\tH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x08\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\t\n\x07_partidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\x0e\n\x0c_descriptionB\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronion\"\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 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\"\xda\x03\n\nPayRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nriskfactor\x18\x08 \x01(\x01H\x02\x88\x01\x01\x12\x1a\n\rmaxfeepercent\x18\x04 \x01(\x01H\x03\x88\x01\x01\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x04\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x05\x88\x01\x01\x12#\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0e \x01(\x0cH\x07\x88\x01\x01\x12\x0f\n\x07\x65xclude\x18\n \x03(\t\x12 \n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0c \x01(\tH\t\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x08\n\x06_labelB\r\n\x0b_riskfactorB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\x10\n\x0e_localinvreqidB\t\n\x07_maxfeeB\x0e\n\x0c_description\"\xfb\x02\n\x0bPayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x18\n\x0b\x64\x65stination\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\ncreated_at\x18\x04 \x01(\x01\x12\r\n\x05parts\x18\x05 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\x1awarning_partial_completion\x18\x08 \x01(\tH\x01\x88\x01\x01\x12*\n\x06status\x18\t \x01(\x0e\x32\x1a.cln.PayResponse.PayStatus\"2\n\tPayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\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\"\xe1\x01\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.ListnodesNodesAddressesB\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_features\"\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\"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\"\xef\x04\n\x16WaitanyinvoiceResponse\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\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\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rcreated_index\x18\r \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x08\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x10\n\x0e_created_indexB\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\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xe3\x04\n\x13WaitinvoiceResponse\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.WaitinvoiceResponse.WaitinvoiceStatus\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\x62olt11\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x1a\n\rcreated_index\x18\r \x01(\x04H\x03\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x08\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x10\n\x0e_created_indexB\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\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\n\n\x08_timeoutB\t\n\x07_partidB\n\n\x08_groupid\"\xb2\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\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x03\x88\x01\x01\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x04\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x05\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x08\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\x0f\n\r_completed_atB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimage\"\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\x08\n\x04P2TR\x10\x03\x12\x07\n\x03\x41LL\x10\x02\x42\x0e\n\x0c_addresstype\"w\n\x0fNewaddrResponse\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bp2sh_segwit\x18\x02 \x01(\tH\x02\x88\x01\x01\x42\x07\n\x05_p2trB\t\n\x07_bech32B\x0e\n\x0c_p2sh_segwit\"\xca\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12&\n\x07satoshi\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAllH\x00\x88\x01\x01\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x02\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_satoshiB\n\n\x08_feerateB\n\n\x08_minconf\":\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\"\x82\x03\n\x0eKeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rmaxfeepercent\x18\x04 \x01(\x01H\x01\x88\x01\x01\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x06 \x01(\rH\x03\x88\x01\x01\x12#\n\texemptfee\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12+\n\nroutehints\x18\x08 \x01(\x0b\x32\x12.cln.RoutehintListH\x05\x88\x01\x01\x12&\n\textratlvs\x18\t \x01(\x0b\x32\x0e.cln.TlvStreamH\x06\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_extratlvs\"\xf2\x02\n\x0fKeysendResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x18\n\x0b\x64\x65stination\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\ncreated_at\x18\x04 \x01(\x01\x12\r\n\x05parts\x18\x05 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\x1awarning_partial_completion\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x32\n\x06status\x18\t \x01(\x0e\x32\".cln.KeysendResponse.KeysendStatus\"\x1d\n\rKeysendStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\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(\x08H\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\"\x9b\x03\n\x0fUtxopsbtRequest\x12\x1c\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\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\x17\n\nreservedok\x18\x08 \x01(\x08H\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\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\r\n\x0b_reservedokB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\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\x07outputs\x18\x05 \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\"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\"1\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x42\x05\n\x03_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\x9b\x19\n\x18ListpeerchannelsChannels\x12\x14\n\x07peer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0epeer_connected\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12O\n\x05state\x18\x03 \x01(\x0e\x32;.cln.ListpeerchannelsChannels.ListpeerchannelsChannelsStateH\x02\x88\x01\x01\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x03\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H\x04\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x05\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x07\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x08\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\t\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\n\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x0b\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\x0c\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0f\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\x10\x88\x01\x01\x12%\n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSideH\x11\x88\x01\x01\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\x12\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x13\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x14\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x15\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x19\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12\x30\n\x16max_total_htlc_in_msat\x18\x1e \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x1e\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1f\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH \x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH!\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\"\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH#\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH$\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\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\"\xc1\x02\n\x1dListpeerchannelsChannelsState\x12\x0c\n\x08OPENINGD\x10\x00\x12\x1c\n\x18\x43HANNELD_AWAITING_LOCKIN\x10\x01\x12\x13\n\x0f\x43HANNELD_NORMAL\x10\x02\x12\x1a\n\x16\x43HANNELD_SHUTTING_DOWN\x10\x03\x12\x18\n\x14\x43LOSINGD_SIGEXCHANGE\x10\x04\x12\x15\n\x11\x43LOSINGD_COMPLETE\x10\x05\x12\x17\n\x13\x41WAITING_UNILATERAL\x10\x06\x12\x16\n\x12\x46UNDING_SPEND_SEEN\x10\x07\x12\x0b\n\x07ONCHAIN\x10\x08\x12\x17\n\x13\x44UALOPEND_OPEN_INIT\x10\t\x12\x1d\n\x19\x44UALOPEND_AWAITING_LOCKIN\x10\n\x12\x1c\n\x18\x43HANNELD_AWAITING_SPLICE\x10\x0b\x42\n\n\x08_peer_idB\x11\n\x0f_peer_connectedB\x08\n\x06_stateB\x0f\n\r_scratch_txidB\x14\n\x12_ignore_fee_limitsB\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_openerB\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\x19\n\x17_max_total_htlc_in_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_addr\"]\n\x1fListpeerchannelsChannelsFeerate\x12\x12\n\x05perkw\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05perkb\x18\x02 \x01(\rH\x01\x88\x01\x01\x42\x08\n\x06_perkwB\x08\n\x06_perkb\"\x80\x03\n ListpeerchannelsChannelsInflight\x12\x19\n\x0c\x66unding_txid\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07\x66\x65\x65rate\x18\x03 \x01(\tH\x02\x88\x01\x01\x12,\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x1a\n\rsplice_amount\x18\x07 \x01(\x12H\x04\x88\x01\x01\x12*\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x06\x88\x01\x01\x42\x0f\n\r_funding_txidB\x11\n\x0f_funding_outnumB\n\n\x08_feerateB\x15\n\x13_total_funding_msatB\x10\n\x0e_splice_amountB\x13\n\x11_our_funding_msatB\x0f\n\r_scratch_txid\"\xd2\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.AmountH\x01\x88\x01\x01\x12+\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x13\n\x11_local_funds_msatB\x14\n\x12_remote_funds_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_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\"\xe2\x03\n\x1dListpeerchannelsChannelsHtlcs\x12\x61\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirectionH\x00\x88\x01\x01\x12\x0f\n\x02id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x05 \x01(\x0cH\x04\x88\x01\x01\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x05\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\"\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcStateH\x07\x88\x01\x01\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x0c\n\n_directionB\x05\n\x03_idB\x0e\n\x0c_amount_msatB\t\n\x07_expiryB\x0f\n\r_payment_hashB\x10\n\x0e_local_trimmedB\t\n\x07_statusB\x08\n\x06_state\"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\"\xb2\t\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\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\x04\x88\x01\x01\x12/\n\x15\x66unding_fee_rcvd_msat\x18\x10 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12-\n\x13\x66unding_pushed_msat\x18\x11 \x01(\x0b\x32\x0b.cln.AmountH\x06\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\x07\x88\x01\x01\x12\x32\n\x18last_commitment_fee_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x66\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32Q.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsClose_cause\"v\n+ListclosedchannelsClosedchannelsClose_cause\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\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_msat\"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\"L\n\x10\x44\x65\x63odepayRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x0e\n\x0c_description\"\x8d\x04\n\x11\x44\x65\x63odepayResponse\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x12\n\ncreated_at\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\x04\x12\r\n\x05payee\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x11\n\tsignature\x18\x07 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x1d\n\x15min_final_cltv_expiry\x18\n \x01(\r\x12\x1b\n\x0epayment_secret\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\r \x01(\x0cH\x05\x88\x01\x01\x12*\n\tfallbacks\x18\x0e \x03(\x0b\x32\x17.cln.DecodepayFallbacks\x12\"\n\x05\x65xtra\x18\x10 \x03(\x0b\x32\x13.cln.DecodepayExtraB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x13\n\x11_description_hashB\x11\n\x0f_payment_secretB\x0b\n\t_featuresB\x13\n\x11_payment_metadata\"\xc6\x01\n\x12\x44\x65\x63odepayFallbacks\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.DecodepayFallbacks.DecodepayFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0b\n\x03hex\x18\x03 \x01(\x0c\"D\n\x16\x44\x65\x63odepayFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x42\x07\n\x05_addr\"+\n\x0e\x44\x65\x63odepayExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\xaa!\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\x16.cln.DecodeOffer_paths\x12\x1a\n\roffer_node_id\x18\x11 \x01(\x0cH\x0c\x88\x01\x01\x12*\n\x1dwarning_missing_offer_node_id\x18\x14 \x01(\tH\r\x88\x01\x01\x12.\n!warning_invalid_offer_description\x18\x15 \x01(\tH\x0e\x88\x01\x01\x12.\n!warning_missing_offer_description\x18\x16 \x01(\tH\x0f\x88\x01\x01\x12+\n\x1ewarning_invalid_offer_currency\x18\x17 \x01(\tH\x10\x88\x01\x01\x12)\n\x1cwarning_invalid_offer_issuer\x18\x18 \x01(\tH\x11\x88\x01\x01\x12\x1c\n\x0finvreq_metadata\x18\x19 \x01(\x0cH\x12\x88\x01\x01\x12\x1c\n\x0finvreq_payer_id\x18\x1a \x01(\x0cH\x13\x88\x01\x01\x12\x19\n\x0cinvreq_chain\x18\x1b \x01(\x0cH\x14\x88\x01\x01\x12,\n\x12invreq_amount_msat\x18\x1c \x01(\x0b\x32\x0b.cln.AmountH\x15\x88\x01\x01\x12\x1c\n\x0finvreq_features\x18\x1d \x01(\x0cH\x16\x88\x01\x01\x12\x1c\n\x0finvreq_quantity\x18\x1e \x01(\x04H\x17\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x1f \x01(\tH\x18\x88\x01\x01\x12&\n\x19invreq_recurrence_counter\x18 \x01(\rH\x19\x88\x01\x01\x12$\n\x17invreq_recurrence_start\x18! \x01(\rH\x1a\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_metadata\x18# \x01(\tH\x1b\x88\x01\x01\x12,\n\x1fwarning_missing_invreq_payer_id\x18$ \x01(\tH\x1c\x88\x01\x01\x12.\n!warning_invalid_invreq_payer_note\x18% \x01(\tH\x1d\x88\x01\x01\x12\x36\n)warning_missing_invoice_request_signature\x18& \x01(\tH\x1e\x88\x01\x01\x12\x36\n)warning_invalid_invoice_request_signature\x18\' \x01(\tH\x1f\x88\x01\x01\x12\x1f\n\x12invoice_created_at\x18) \x01(\x04H \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\x37\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1c.cln.DecodeInvoice_fallbacks\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\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(\x04H0\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18= \x01(\x04H1\x88\x01\x01\x12\x12\n\x05payee\x18> \x01(\x0cH2\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18? \x01(\x0cH3\x88\x01\x01\x12\x1d\n\x10\x64\x65scription_hash\x18@ \x01(\x0cH4\x88\x01\x01\x12\"\n\x15min_final_cltv_expiry\x18\x41 \x01(\rH5\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x42 \x01(\x0cH6\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x43 \x01(\x0cH7\x88\x01\x01\x12\x1f\n\x05\x65xtra\x18\x45 \x03(\x0b\x32\x10.cln.DecodeExtra\x12\x16\n\tunique_id\x18\x46 \x01(\tH8\x88\x01\x01\x12\x14\n\x07version\x18G \x01(\tH9\x88\x01\x01\x12\x13\n\x06string\x18H \x01(\tH:\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\"l\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\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\x10\n\x0e_offer_node_idB \n\x1e_warning_missing_offer_node_idB$\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_hex\"<\n\x11\x44\x65\x63odeOffer_paths\x12\x15\n\rfirst_node_id\x18\x01 \x01(\x0c\x12\x10\n\x08\x62linding\x18\x02 \x01(\x0c\"\x8a\x01\n\x1f\x44\x65\x63odeOffer_recurrencePaywindow\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\"T\n\x17\x44\x65\x63odeInvoice_pathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"Y\n\x17\x44\x65\x63odeInvoice_fallbacks\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\"w\n\x0f\x44\x65\x63odeFallbacks\x12\x36\n)warning_invoice_fallbacks_version_invalid\x18\x01 \x01(\tH\x00\x88\x01\x01\x42,\n*_warning_invoice_fallbacks_version_invalid\"(\n\x0b\x44\x65\x63odeExtra\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\";\n\x12\x44\x65\x63odeRestrictions\x12\x14\n\x0c\x61lternatives\x18\x01 \x03(\t\x12\x0f\n\x07summary\x18\x02 \x01(\t\"=\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\"\x9c\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\x46\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32\".cln.FeeratesOnchain_fee_estimatesH\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\"\xd3\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x12\n\x05\x66loor\x18\n \x01(\rH\x00\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\x14\n\x07opening\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x03\x88\x01\x01\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rdelayed_to_us\x18\x06 \x01(\rH\x05\x88\x01\x01\x12\x1c\n\x0fhtlc_resolution\x18\x07 \x01(\rH\x06\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x07\x88\x01\x01\x42\x08\n\x06_floorB\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\x1a\n\x18_unilateral_anchor_closeB\x10\n\x0e_delayed_to_usB\x12\n\x10_htlc_resolutionB\n\n\x08_penalty\"\x96\x01\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x17\n\nblockcount\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x66\x65\x65rate\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10smoothed_feerate\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\r\n\x0b_blockcountB\n\n\x08_feerateB\x13\n\x11_smoothed_feerate\"\xd3\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x12\n\x05\x66loor\x18\n \x01(\rH\x00\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\x14\n\x07opening\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x03\x88\x01\x01\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rdelayed_to_us\x18\x06 \x01(\rH\x05\x88\x01\x01\x12\x1c\n\x0fhtlc_resolution\x18\x07 \x01(\rH\x06\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x07\x88\x01\x01\x42\x08\n\x06_floorB\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\x1a\n\x18_unilateral_anchor_closeB\x10\n\x0e_delayed_to_usB\x12\n\x10_htlc_resolutionB\n\n\x08_penalty\"\x96\x01\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x17\n\nblockcount\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07\x66\x65\x65rate\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10smoothed_feerate\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\r\n\x0b_blockcountB\n\n\x08_feerateB\x13\n\x11_smoothed_feerate\"\x9b\x02\n\x1d\x46\x65\x65ratesOnchain_fee_estimates\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\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x42&\n$_unilateral_close_nonanchor_satoshis\"\xe5\x03\n\x12\x46undchannelRequest\x12\n\n\x02id\x18\t \x01(\x0c\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\x14\n\x07minconf\x18\n \x01(\rH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x04\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\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\x42\n\n\x08_feerateB\x0b\n\t_announceB\n\n\x08_minconfB\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\"\x9b\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\x42\x0b\n\t_close_toB\x0b\n\t_mindepth\"\xec\x01\n\x0fGetrouteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\nriskfactor\x18\x03 \x01(\x04\x12\x11\n\x04\x63ltv\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x13\n\x06\x66romid\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x66uzzpercent\x18\x06 \x01(\rH\x02\x88\x01\x01\x12\x0f\n\x07\x65xclude\x18\x07 \x03(\t\x12\x14\n\x07maxhops\x18\x08 \x01(\rH\x03\x88\x01\x01\x42\x07\n\x05_cltvB\t\n\x07_fromidB\x0e\n\x0c_fuzzpercentB\n\n\x08_maxhops\"5\n\x10GetrouteResponse\x12!\n\x05route\x18\x01 \x03(\x0b\x32\x12.cln.GetrouteRoute\"\xc5\x01\n\rGetrouteRoute\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x02 \x01(\t\x12\x11\n\tdirection\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x05 \x01(\r\x12\x34\n\x05style\x18\x06 \x01(\x0e\x32%.cln.GetrouteRoute.GetrouteRouteStyle\"\x1d\n\x12GetrouteRouteStyle\x12\x07\n\x03TLV\x10\x00\"\x82\x02\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\"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_channel\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\xde\x04\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x00\x88\x01\x01\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\x01\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x05\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\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_channelB\x0e\n\x0c_out_htlc_idB\x08\n\x06_styleB\x0b\n\t_fee_msatB\x0b\n\t_out_msat\"\xdb\x01\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\"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_status\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xff\x04\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\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05label\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x05\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\x08\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\t\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\n\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\x0f\n\r_completed_atB\x08\n\x06_labelB\t\n\x07_bolt11B\x0e\n\x0c_descriptionB\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\r\n\x0b_erroronion\"*\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x05\n\x03_id\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\x89\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\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\"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\"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\"\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\"\xca\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\x1e\n\x11ignore_fee_limits\x18\n \x01(\x08H\x01\x88\x01\x01\x12*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x02\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\x03\x88\x01\x01\x42\x13\n\x11_short_channel_idB\x14\n\x12_ignore_fee_limitsB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_high\"\'\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\"\r\n\x0bStopRequest\"\x0e\n\x0cStopResponse\"\xa7\x01\n\x18PreapprovekeysendRequest\x12\x18\n\x0b\x64\x65stination\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x42\x0e\n\x0c_destinationB\x0f\n\r_payment_hashB\x0e\n\x0c_amount_msat\"\x1b\n\x19PreapprovekeysendResponse\":\n\x18PreapproveinvoiceRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_bolt11\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\x32\x8f\x1d\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\x12Q\n\x10\x41utoCleanInvoice\x12\x1c.cln.AutocleaninvoiceRequest\x1a\x1d.cln.AutocleaninvoiceResponse\"\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\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\x12T\n\x11\x44\x65lExpiredInvoice\x12\x1d.cln.DelexpiredinvoiceRequest\x1a\x1e.cln.DelexpiredinvoiceResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\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\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<\n\tDecodePay\x12\x15.cln.DecodepayRequest\x1a\x16.cln.DecodepayResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\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\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\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\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\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\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\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\x62\x06proto3') -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'node_pb2', _globals) +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'node_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None - _globals['_GETINFOREQUEST']._serialized_start=37 - _globals['_GETINFOREQUEST']._serialized_end=53 - _globals['_GETINFORESPONSE']._serialized_start=56 - _globals['_GETINFORESPONSE']._serialized_end=633 - _globals['_GETINFOOUR_FEATURES']._serialized_start=635 - _globals['_GETINFOOUR_FEATURES']._serialized_end=718 - _globals['_GETINFOADDRESS']._serialized_start=721 - _globals['_GETINFOADDRESS']._serialized_end=917 - _globals['_GETINFOADDRESS_GETINFOADDRESSTYPE']._serialized_start=834 - _globals['_GETINFOADDRESS_GETINFOADDRESSTYPE']._serialized_end=905 - _globals['_GETINFOBINDING']._serialized_start=920 - _globals['_GETINFOBINDING']._serialized_end=1186 - _globals['_GETINFOBINDING_GETINFOBINDINGTYPE']._serialized_start=1059 - _globals['_GETINFOBINDING_GETINFOBINDINGTYPE']._serialized_end=1154 - _globals['_LISTPEERSREQUEST']._serialized_start=1188 - _globals['_LISTPEERSREQUEST']._serialized_end=1260 - _globals['_LISTPEERSRESPONSE']._serialized_start=1262 - _globals['_LISTPEERSRESPONSE']._serialized_end=1317 - _globals['_LISTPEERSPEERS']._serialized_start=1320 - _globals['_LISTPEERSPEERS']._serialized_end=1590 - _globals['_LISTPEERSPEERSLOG']._serialized_start=1593 - _globals['_LISTPEERSPEERSLOG']._serialized_end=1974 - _globals['_LISTPEERSPEERSLOG_LISTPEERSPEERSLOGTYPE']._serialized_start=1804 - _globals['_LISTPEERSPEERSLOG_LISTPEERSPEERSLOGTYPE']._serialized_end=1909 - _globals['_LISTPEERSPEERSCHANNELS']._serialized_start=1977 - _globals['_LISTPEERSPEERSCHANNELS']._serialized_end=5007 - _globals['_LISTPEERSPEERSCHANNELS_LISTPEERSPEERSCHANNELSSTATE']._serialized_start=3877 - _globals['_LISTPEERSPEERSCHANNELS_LISTPEERSPEERSCHANNELSSTATE']._serialized_end=4166 - _globals['_LISTPEERSPEERSCHANNELSFEERATE']._serialized_start=5009 - _globals['_LISTPEERSPEERSCHANNELSFEERATE']._serialized_end=5070 - _globals['_LISTPEERSPEERSCHANNELSINFLIGHT']._serialized_start=5073 - _globals['_LISTPEERSPEERSCHANNELSINFLIGHT']._serialized_end=5316 - _globals['_LISTPEERSPEERSCHANNELSFUNDING']._serialized_start=5319 - _globals['_LISTPEERSPEERSCHANNELSFUNDING']._serialized_end=5602 - _globals['_LISTPEERSPEERSCHANNELSALIAS']._serialized_start=5604 - _globals['_LISTPEERSPEERSCHANNELSALIAS']._serialized_end=5695 - _globals['_LISTPEERSPEERSCHANNELSHTLCS']._serialized_start=5698 - _globals['_LISTPEERSPEERSCHANNELSHTLCS']._serialized_end=6067 - _globals['_LISTPEERSPEERSCHANNELSHTLCS_LISTPEERSPEERSCHANNELSHTLCSDIRECTION']._serialized_start=5983 - _globals['_LISTPEERSPEERSCHANNELSHTLCS_LISTPEERSPEERSCHANNELSHTLCSDIRECTION']._serialized_end=6038 - _globals['_LISTFUNDSREQUEST']._serialized_start=6069 - _globals['_LISTFUNDSREQUEST']._serialized_end=6117 - _globals['_LISTFUNDSRESPONSE']._serialized_start=6119 - _globals['_LISTFUNDSRESPONSE']._serialized_end=6220 - _globals['_LISTFUNDSOUTPUTS']._serialized_start=6223 - _globals['_LISTFUNDSOUTPUTS']._serialized_end=6610 - _globals['_LISTFUNDSOUTPUTS_LISTFUNDSOUTPUTSSTATUS']._serialized_start=6484 - _globals['_LISTFUNDSOUTPUTS_LISTFUNDSOUTPUTSSTATUS']._serialized_end=6565 - _globals['_LISTFUNDSCHANNELS']._serialized_start=6613 - _globals['_LISTFUNDSCHANNELS']._serialized_end=6912 - _globals['_SENDPAYREQUEST']._serialized_start=6915 - _globals['_SENDPAYREQUEST']._serialized_end=7264 - _globals['_SENDPAYRESPONSE']._serialized_start=7267 - _globals['_SENDPAYRESPONSE']._serialized_end=7860 - _globals['_SENDPAYRESPONSE_SENDPAYSTATUS']._serialized_start=7681 - _globals['_SENDPAYRESPONSE_SENDPAYSTATUS']._serialized_end=7723 - _globals['_SENDPAYROUTE']._serialized_start=7862 - _globals['_SENDPAYROUTE']._serialized_end=7954 - _globals['_LISTCHANNELSREQUEST']._serialized_start=7957 - _globals['_LISTCHANNELSREQUEST']._serialized_end=8104 - _globals['_LISTCHANNELSRESPONSE']._serialized_start=8106 - _globals['_LISTCHANNELSRESPONSE']._serialized_end=8173 - _globals['_LISTCHANNELSCHANNELS']._serialized_start=8176 - _globals['_LISTCHANNELSCHANNELS']._serialized_end=8611 - _globals['_ADDGOSSIPREQUEST']._serialized_start=8613 - _globals['_ADDGOSSIPREQUEST']._serialized_end=8648 - _globals['_ADDGOSSIPRESPONSE']._serialized_start=8650 - _globals['_ADDGOSSIPRESPONSE']._serialized_end=8669 - _globals['_AUTOCLEANINVOICEREQUEST']._serialized_start=8671 - _globals['_AUTOCLEANINVOICEREQUEST']._serialized_end=8782 - _globals['_AUTOCLEANINVOICERESPONSE']._serialized_start=8785 - _globals['_AUTOCLEANINVOICERESPONSE']._serialized_end=8914 - _globals['_CHECKMESSAGEREQUEST']._serialized_start=8916 - _globals['_CHECKMESSAGEREQUEST']._serialized_end=9001 - _globals['_CHECKMESSAGERESPONSE']._serialized_start=9003 - _globals['_CHECKMESSAGERESPONSE']._serialized_end=9059 - _globals['_CLOSEREQUEST']._serialized_start=9062 - _globals['_CLOSEREQUEST']._serialized_end=9393 - _globals['_CLOSERESPONSE']._serialized_start=9396 - _globals['_CLOSERESPONSE']._serialized_end=9567 - _globals['_CLOSERESPONSE_CLOSETYPE']._serialized_start=9498 - _globals['_CLOSERESPONSE_CLOSETYPE']._serialized_end=9551 - _globals['_CONNECTREQUEST']._serialized_start=9569 - _globals['_CONNECTREQUEST']._serialized_end=9653 - _globals['_CONNECTRESPONSE']._serialized_start=9656 - _globals['_CONNECTRESPONSE']._serialized_end=9836 - _globals['_CONNECTRESPONSE_CONNECTDIRECTION']._serialized_start=9801 - _globals['_CONNECTRESPONSE_CONNECTDIRECTION']._serialized_end=9836 - _globals['_CONNECTADDRESS']._serialized_start=9839 - _globals['_CONNECTADDRESS']._serialized_end=10090 - _globals['_CONNECTADDRESS_CONNECTADDRESSTYPE']._serialized_start=9978 - _globals['_CONNECTADDRESS_CONNECTADDRESSTYPE']._serialized_end=10058 - _globals['_CREATEINVOICEREQUEST']._serialized_start=10092 - _globals['_CREATEINVOICEREQUEST']._serialized_end=10166 - _globals['_CREATEINVOICERESPONSE']._serialized_start=10169 - _globals['_CREATEINVOICERESPONSE']._serialized_end=10856 - _globals['_CREATEINVOICERESPONSE_CREATEINVOICESTATUS']._serialized_start=10631 - _globals['_CREATEINVOICERESPONSE_CREATEINVOICESTATUS']._serialized_end=10687 - _globals['_DATASTOREREQUEST']._serialized_start=10859 - _globals['_DATASTOREREQUEST']._serialized_end=11167 - _globals['_DATASTOREREQUEST_DATASTOREMODE']._serialized_start=11012 - _globals['_DATASTOREREQUEST_DATASTOREMODE']._serialized_end=11124 - _globals['_DATASTORERESPONSE']._serialized_start=11170 - _globals['_DATASTORERESPONSE']._serialized_end=11300 - _globals['_CREATEONIONREQUEST']._serialized_start=11303 - _globals['_CREATEONIONREQUEST']._serialized_end=11460 - _globals['_CREATEONIONRESPONSE']._serialized_start=11462 - _globals['_CREATEONIONRESPONSE']._serialized_end=11522 - _globals['_CREATEONIONHOPS']._serialized_start=11524 - _globals['_CREATEONIONHOPS']._serialized_end=11574 - _globals['_DELDATASTOREREQUEST']._serialized_start=11576 - _globals['_DELDATASTOREREQUEST']._serialized_end=11650 - _globals['_DELDATASTORERESPONSE']._serialized_start=11653 - _globals['_DELDATASTORERESPONSE']._serialized_end=11786 - _globals['_DELEXPIREDINVOICEREQUEST']._serialized_start=11788 - _globals['_DELEXPIREDINVOICEREQUEST']._serialized_end=11860 - _globals['_DELEXPIREDINVOICERESPONSE']._serialized_start=11862 - _globals['_DELEXPIREDINVOICERESPONSE']._serialized_end=11889 - _globals['_DELINVOICEREQUEST']._serialized_start=11892 - _globals['_DELINVOICEREQUEST']._serialized_end=12074 - _globals['_DELINVOICEREQUEST_DELINVOICESTATUS']._serialized_start=12008 - _globals['_DELINVOICEREQUEST_DELINVOICESTATUS']._serialized_end=12061 - _globals['_DELINVOICERESPONSE']._serialized_start=12077 - _globals['_DELINVOICERESPONSE']._serialized_end=12622 - _globals['_DELINVOICERESPONSE_DELINVOICESTATUS']._serialized_start=12008 - _globals['_DELINVOICERESPONSE_DELINVOICESTATUS']._serialized_end=12061 - _globals['_INVOICEREQUEST']._serialized_start=12625 - _globals['_INVOICEREQUEST']._serialized_end=12875 - _globals['_INVOICERESPONSE']._serialized_start=12878 - _globals['_INVOICERESPONSE']._serialized_end=13283 - _globals['_LISTDATASTOREREQUEST']._serialized_start=13285 - _globals['_LISTDATASTOREREQUEST']._serialized_end=13320 - _globals['_LISTDATASTORERESPONSE']._serialized_start=13322 - _globals['_LISTDATASTORERESPONSE']._serialized_end=13393 - _globals['_LISTDATASTOREDATASTORE']._serialized_start=13396 - _globals['_LISTDATASTOREDATASTORE']._serialized_end=13531 - _globals['_LISTINVOICESREQUEST']._serialized_start=13534 - _globals['_LISTINVOICESREQUEST']._serialized_end=13884 - _globals['_LISTINVOICESREQUEST_LISTINVOICESINDEX']._serialized_start=13755 - _globals['_LISTINVOICESREQUEST_LISTINVOICESINDEX']._serialized_end=13800 - _globals['_LISTINVOICESRESPONSE']._serialized_start=13886 - _globals['_LISTINVOICESRESPONSE']._serialized_end=13953 - _globals['_LISTINVOICESINVOICES']._serialized_start=13956 - _globals['_LISTINVOICESINVOICES']._serialized_end=14722 - _globals['_LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS']._serialized_start=14456 - _globals['_LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS']._serialized_end=14519 - _globals['_SENDONIONREQUEST']._serialized_start=14725 - _globals['_SENDONIONREQUEST']._serialized_end=15119 - _globals['_SENDONIONRESPONSE']._serialized_start=15122 - _globals['_SENDONIONRESPONSE']._serialized_end=15645 - _globals['_SENDONIONRESPONSE_SENDONIONSTATUS']._serialized_start=15493 - _globals['_SENDONIONRESPONSE_SENDONIONSTATUS']._serialized_end=15537 - _globals['_SENDONIONFIRST_HOP']._serialized_start=15647 - _globals['_SENDONIONFIRST_HOP']._serialized_end=15728 - _globals['_LISTSENDPAYSREQUEST']._serialized_start=15731 - _globals['_LISTSENDPAYSREQUEST']._serialized_end=15966 - _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS']._serialized_start=15868 - _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS']._serialized_end=15927 - _globals['_LISTSENDPAYSRESPONSE']._serialized_start=15968 - _globals['_LISTSENDPAYSRESPONSE']._serialized_end=16035 - _globals['_LISTSENDPAYSPAYMENTS']._serialized_start=16038 - _globals['_LISTSENDPAYSPAYMENTS']._serialized_end=16666 - _globals['_LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS']._serialized_start=16472 - _globals['_LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS']._serialized_end=16539 - _globals['_LISTTRANSACTIONSREQUEST']._serialized_start=16668 - _globals['_LISTTRANSACTIONSREQUEST']._serialized_end=16693 - _globals['_LISTTRANSACTIONSRESPONSE']._serialized_start=16695 - _globals['_LISTTRANSACTIONSRESPONSE']._serialized_end=16778 - _globals['_LISTTRANSACTIONSTRANSACTIONS']._serialized_start=16781 - _globals['_LISTTRANSACTIONSTRANSACTIONS']._serialized_end=17029 - _globals['_LISTTRANSACTIONSTRANSACTIONSINPUTS']._serialized_start=17031 - _globals['_LISTTRANSACTIONSTRANSACTIONSINPUTS']._serialized_end=17114 - _globals['_LISTTRANSACTIONSTRANSACTIONSOUTPUTS']._serialized_start=17116 - _globals['_LISTTRANSACTIONSTRANSACTIONSOUTPUTS']._serialized_end=17224 - _globals['_PAYREQUEST']._serialized_start=17227 - _globals['_PAYREQUEST']._serialized_end=17701 - _globals['_PAYRESPONSE']._serialized_start=17704 - _globals['_PAYRESPONSE']._serialized_end=18083 - _globals['_PAYRESPONSE_PAYSTATUS']._serialized_start=17986 - _globals['_PAYRESPONSE_PAYSTATUS']._serialized_end=18036 - _globals['_LISTNODESREQUEST']._serialized_start=18085 - _globals['_LISTNODESREQUEST']._serialized_end=18127 - _globals['_LISTNODESRESPONSE']._serialized_start=18129 - _globals['_LISTNODESRESPONSE']._serialized_end=18184 - _globals['_LISTNODESNODES']._serialized_start=18187 - _globals['_LISTNODESNODES']._serialized_end=18412 - _globals['_LISTNODESNODESADDRESSES']._serialized_start=18415 - _globals['_LISTNODESNODESADDRESSES']._serialized_end=18647 - _globals['_LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE']._serialized_start=18555 - _globals['_LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE']._serialized_end=18635 - _globals['_WAITANYINVOICEREQUEST']._serialized_start=18649 - _globals['_WAITANYINVOICEREQUEST']._serialized_end=18752 - _globals['_WAITANYINVOICERESPONSE']._serialized_start=18755 - _globals['_WAITANYINVOICERESPONSE']._serialized_end=19378 - _globals['_WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS']._serialized_start=19187 - _globals['_WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS']._serialized_end=19232 - _globals['_WAITINVOICEREQUEST']._serialized_start=19380 - _globals['_WAITINVOICEREQUEST']._serialized_end=19415 - _globals['_WAITINVOICERESPONSE']._serialized_start=19418 - _globals['_WAITINVOICERESPONSE']._serialized_end=20029 - _globals['_WAITINVOICERESPONSE_WAITINVOICESTATUS']._serialized_start=19841 - _globals['_WAITINVOICERESPONSE_WAITINVOICESTATUS']._serialized_end=19883 - _globals['_WAITSENDPAYREQUEST']._serialized_start=20032 - _globals['_WAITSENDPAYREQUEST']._serialized_end=20174 - _globals['_WAITSENDPAYRESPONSE']._serialized_start=20177 - _globals['_WAITSENDPAYRESPONSE']._serialized_end=20739 - _globals['_WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS']._serialized_start=20581 - _globals['_WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS']._serialized_end=20614 - _globals['_NEWADDRREQUEST']._serialized_start=20742 - _globals['_NEWADDRREQUEST']._serialized_end=20893 - _globals['_NEWADDRREQUEST_NEWADDRADDRESSTYPE']._serialized_start=20826 - _globals['_NEWADDRREQUEST_NEWADDRADDRESSTYPE']._serialized_end=20877 - _globals['_NEWADDRRESPONSE']._serialized_start=20895 - _globals['_NEWADDRRESPONSE']._serialized_end=21014 - _globals['_WITHDRAWREQUEST']._serialized_start=21017 - _globals['_WITHDRAWREQUEST']._serialized_end=21219 - _globals['_WITHDRAWRESPONSE']._serialized_start=21221 - _globals['_WITHDRAWRESPONSE']._serialized_end=21279 - _globals['_KEYSENDREQUEST']._serialized_start=21282 - _globals['_KEYSENDREQUEST']._serialized_end=21668 - _globals['_KEYSENDRESPONSE']._serialized_start=21671 - _globals['_KEYSENDRESPONSE']._serialized_end=22041 - _globals['_KEYSENDRESPONSE_KEYSENDSTATUS']._serialized_start=21965 - _globals['_KEYSENDRESPONSE_KEYSENDSTATUS']._serialized_end=21994 - _globals['_FUNDPSBTREQUEST']._serialized_start=22044 - _globals['_FUNDPSBTREQUEST']._serialized_end=22464 - _globals['_FUNDPSBTRESPONSE']._serialized_start=22467 - _globals['_FUNDPSBTRESPONSE']._serialized_end=22684 - _globals['_FUNDPSBTRESERVATIONS']._serialized_start=22686 - _globals['_FUNDPSBTRESERVATIONS']._serialized_end=22803 - _globals['_SENDPSBTREQUEST']._serialized_start=22805 - _globals['_SENDPSBTREQUEST']._serialized_end=22870 - _globals['_SENDPSBTRESPONSE']._serialized_start=22872 - _globals['_SENDPSBTRESPONSE']._serialized_end=22916 - _globals['_SIGNPSBTREQUEST']._serialized_start=22918 - _globals['_SIGNPSBTREQUEST']._serialized_end=22967 - _globals['_SIGNPSBTRESPONSE']._serialized_start=22969 - _globals['_SIGNPSBTRESPONSE']._serialized_end=23008 - _globals['_UTXOPSBTREQUEST']._serialized_start=23011 - _globals['_UTXOPSBTREQUEST']._serialized_end=23422 - _globals['_UTXOPSBTRESPONSE']._serialized_start=23425 - _globals['_UTXOPSBTRESPONSE']._serialized_end=23642 - _globals['_UTXOPSBTRESERVATIONS']._serialized_start=23644 - _globals['_UTXOPSBTRESERVATIONS']._serialized_end=23761 - _globals['_TXDISCARDREQUEST']._serialized_start=23763 - _globals['_TXDISCARDREQUEST']._serialized_end=23795 - _globals['_TXDISCARDRESPONSE']._serialized_start=23797 - _globals['_TXDISCARDRESPONSE']._serialized_end=23851 - _globals['_TXPREPAREREQUEST']._serialized_start=23854 - _globals['_TXPREPAREREQUEST']._serialized_end=24018 - _globals['_TXPREPARERESPONSE']._serialized_start=24020 - _globals['_TXPREPARERESPONSE']._serialized_end=24088 - _globals['_TXSENDREQUEST']._serialized_start=24090 - _globals['_TXSENDREQUEST']._serialized_end=24119 - _globals['_TXSENDRESPONSE']._serialized_start=24121 - _globals['_TXSENDRESPONSE']._serialized_end=24177 - _globals['_LISTPEERCHANNELSREQUEST']._serialized_start=24179 - _globals['_LISTPEERCHANNELSREQUEST']._serialized_end=24228 - _globals['_LISTPEERCHANNELSRESPONSE']._serialized_start=24230 - _globals['_LISTPEERCHANNELSRESPONSE']._serialized_end=24305 - _globals['_LISTPEERCHANNELSCHANNELS']._serialized_start=24308 - _globals['_LISTPEERCHANNELSCHANNELS']._serialized_end=27535 - _globals['_LISTPEERCHANNELSCHANNELS_LISTPEERCHANNELSCHANNELSSTATE']._serialized_start=26299 - _globals['_LISTPEERCHANNELSCHANNELS_LISTPEERCHANNELSCHANNELSSTATE']._serialized_end=26620 - _globals['_LISTPEERCHANNELSCHANNELSFEERATE']._serialized_start=27537 - _globals['_LISTPEERCHANNELSCHANNELSFEERATE']._serialized_end=27630 - _globals['_LISTPEERCHANNELSCHANNELSINFLIGHT']._serialized_start=27633 - _globals['_LISTPEERCHANNELSCHANNELSINFLIGHT']._serialized_end=28017 - _globals['_LISTPEERCHANNELSCHANNELSFUNDING']._serialized_start=28020 - _globals['_LISTPEERCHANNELSCHANNELSFUNDING']._serialized_end=28358 - _globals['_LISTPEERCHANNELSCHANNELSALIAS']._serialized_start=28360 - _globals['_LISTPEERCHANNELSCHANNELSALIAS']._serialized_end=28453 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS']._serialized_start=28456 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS']._serialized_end=28938 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION']._serialized_start=28777 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION']._serialized_end=28834 - _globals['_LISTCLOSEDCHANNELSREQUEST']._serialized_start=28940 - _globals['_LISTCLOSEDCHANNELSREQUEST']._serialized_end=28991 - _globals['_LISTCLOSEDCHANNELSRESPONSE']._serialized_start=28993 - _globals['_LISTCLOSEDCHANNELSRESPONSE']._serialized_end=29084 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS']._serialized_start=29087 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS']._serialized_end=30289 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSE_CAUSE']._serialized_start=29987 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSE_CAUSE']._serialized_end=30105 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS']._serialized_start=30291 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS']._serialized_end=30392 - _globals['_DECODEPAYREQUEST']._serialized_start=30394 - _globals['_DECODEPAYREQUEST']._serialized_end=30470 - _globals['_DECODEPAYRESPONSE']._serialized_start=30473 - _globals['_DECODEPAYRESPONSE']._serialized_end=30998 - _globals['_DECODEPAYFALLBACKS']._serialized_start=31001 - _globals['_DECODEPAYFALLBACKS']._serialized_end=31199 - _globals['_DECODEPAYFALLBACKS_DECODEPAYFALLBACKSTYPE']._serialized_start=31122 - _globals['_DECODEPAYFALLBACKS_DECODEPAYFALLBACKSTYPE']._serialized_end=31190 - _globals['_DECODEPAYEXTRA']._serialized_start=31201 - _globals['_DECODEPAYEXTRA']._serialized_end=31244 - _globals['_DECODEREQUEST']._serialized_start=31246 - _globals['_DECODEREQUEST']._serialized_end=31277 - _globals['_DECODERESPONSE']._serialized_start=31280 - _globals['_DECODERESPONSE']._serialized_end=35546 - _globals['_DECODERESPONSE_DECODETYPE']._serialized_start=33848 - _globals['_DECODERESPONSE_DECODETYPE']._serialized_end=33956 - _globals['_DECODEOFFER_PATHS']._serialized_start=35548 - _globals['_DECODEOFFER_PATHS']._serialized_end=35608 - _globals['_DECODEOFFER_RECURRENCEPAYWINDOW']._serialized_start=35611 - _globals['_DECODEOFFER_RECURRENCEPAYWINDOW']._serialized_end=35749 - _globals['_DECODEINVOICE_PATHSPATH']._serialized_start=35751 - _globals['_DECODEINVOICE_PATHSPATH']._serialized_end=35835 - _globals['_DECODEINVOICE_FALLBACKS']._serialized_start=35837 - _globals['_DECODEINVOICE_FALLBACKS']._serialized_end=35926 - _globals['_DECODEFALLBACKS']._serialized_start=35928 - _globals['_DECODEFALLBACKS']._serialized_end=36047 - _globals['_DECODEEXTRA']._serialized_start=36049 - _globals['_DECODEEXTRA']._serialized_end=36089 - _globals['_DECODERESTRICTIONS']._serialized_start=36091 - _globals['_DECODERESTRICTIONS']._serialized_end=36150 - _globals['_DISCONNECTREQUEST']._serialized_start=36152 - _globals['_DISCONNECTREQUEST']._serialized_end=36213 - _globals['_DISCONNECTRESPONSE']._serialized_start=36215 - _globals['_DISCONNECTRESPONSE']._serialized_end=36235 - _globals['_FEERATESREQUEST']._serialized_start=36237 - _globals['_FEERATESREQUEST']._serialized_end=36344 - _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_start=36307 - _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_end=36344 - _globals['_FEERATESRESPONSE']._serialized_start=36347 - _globals['_FEERATESRESPONSE']._serialized_end=36631 - _globals['_FEERATESPERKB']._serialized_start=36634 - _globals['_FEERATESPERKB']._serialized_end=37101 - _globals['_FEERATESPERKBESTIMATES']._serialized_start=37104 - _globals['_FEERATESPERKBESTIMATES']._serialized_end=37254 - _globals['_FEERATESPERKW']._serialized_start=37257 - _globals['_FEERATESPERKW']._serialized_end=37724 - _globals['_FEERATESPERKWESTIMATES']._serialized_start=37727 - _globals['_FEERATESPERKWESTIMATES']._serialized_end=37877 - _globals['_FEERATESONCHAIN_FEE_ESTIMATES']._serialized_start=37880 - _globals['_FEERATESONCHAIN_FEE_ESTIMATES']._serialized_end=38163 - _globals['_FUNDCHANNELREQUEST']._serialized_start=38166 - _globals['_FUNDCHANNELREQUEST']._serialized_end=38651 - _globals['_FUNDCHANNELRESPONSE']._serialized_start=38654 - _globals['_FUNDCHANNELRESPONSE']._serialized_end=38809 - _globals['_GETROUTEREQUEST']._serialized_start=38812 - _globals['_GETROUTEREQUEST']._serialized_end=39048 - _globals['_GETROUTERESPONSE']._serialized_start=39050 - _globals['_GETROUTERESPONSE']._serialized_end=39103 - _globals['_GETROUTEROUTE']._serialized_start=39106 - _globals['_GETROUTEROUTE']._serialized_end=39303 - _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_start=39274 - _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_end=39303 - _globals['_LISTFORWARDSREQUEST']._serialized_start=39306 - _globals['_LISTFORWARDSREQUEST']._serialized_end=39564 - _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_start=39446 - _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_end=39522 - _globals['_LISTFORWARDSRESPONSE']._serialized_start=39566 - _globals['_LISTFORWARDSRESPONSE']._serialized_end=39633 - _globals['_LISTFORWARDSFORWARDS']._serialized_start=39636 - _globals['_LISTFORWARDSFORWARDS']._serialized_end=40242 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_start=40025 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_end=40109 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_start=40111 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_end=40159 - _globals['_LISTPAYSREQUEST']._serialized_start=40245 - _globals['_LISTPAYSREQUEST']._serialized_end=40464 - _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_start=40370 - _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_end=40425 - _globals['_LISTPAYSRESPONSE']._serialized_start=40466 - _globals['_LISTPAYSRESPONSE']._serialized_end=40517 - _globals['_LISTPAYSPAYS']._serialized_start=40520 - _globals['_LISTPAYSPAYS']._serialized_end=41159 - _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_start=40934 - _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_end=40993 - _globals['_LISTHTLCSREQUEST']._serialized_start=41161 - _globals['_LISTHTLCSREQUEST']._serialized_end=41203 - _globals['_LISTHTLCSRESPONSE']._serialized_start=41205 - _globals['_LISTHTLCSRESPONSE']._serialized_end=41260 - _globals['_LISTHTLCSHTLCS']._serialized_start=41263 - _globals['_LISTHTLCSHTLCS']._serialized_end=41528 - _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_start=41486 - _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_end=41528 - _globals['_PINGREQUEST']._serialized_start=41530 - _globals['_PINGREQUEST']._serialized_end=41619 - _globals['_PINGRESPONSE']._serialized_start=41621 - _globals['_PINGRESPONSE']._serialized_end=41651 - _globals['_SENDCUSTOMMSGREQUEST']._serialized_start=41653 - _globals['_SENDCUSTOMMSGREQUEST']._serialized_end=41705 - _globals['_SENDCUSTOMMSGRESPONSE']._serialized_start=41707 - _globals['_SENDCUSTOMMSGRESPONSE']._serialized_end=41746 - _globals['_SETCHANNELREQUEST']._serialized_start=41749 - _globals['_SETCHANNELREQUEST']._serialized_end=42047 - _globals['_SETCHANNELRESPONSE']._serialized_start=42049 - _globals['_SETCHANNELRESPONSE']._serialized_end=42112 - _globals['_SETCHANNELCHANNELS']._serialized_start=42115 - _globals['_SETCHANNELCHANNELS']._serialized_end=42573 - _globals['_SIGNINVOICEREQUEST']._serialized_start=42575 - _globals['_SIGNINVOICEREQUEST']._serialized_end=42614 - _globals['_SIGNINVOICERESPONSE']._serialized_start=42616 - _globals['_SIGNINVOICERESPONSE']._serialized_end=42653 - _globals['_SIGNMESSAGEREQUEST']._serialized_start=42655 - _globals['_SIGNMESSAGEREQUEST']._serialized_end=42692 - _globals['_SIGNMESSAGERESPONSE']._serialized_start=42694 - _globals['_SIGNMESSAGERESPONSE']._serialized_end=42764 - _globals['_STOPREQUEST']._serialized_start=42766 - _globals['_STOPREQUEST']._serialized_end=42779 - _globals['_STOPRESPONSE']._serialized_start=42781 - _globals['_STOPRESPONSE']._serialized_end=42795 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_start=42798 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_end=42965 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_start=42967 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_end=42994 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_start=42996 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_end=43054 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_start=43056 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_end=43083 - _globals['_STATICBACKUPREQUEST']._serialized_start=43085 - _globals['_STATICBACKUPREQUEST']._serialized_end=43106 - _globals['_STATICBACKUPRESPONSE']._serialized_start=43108 - _globals['_STATICBACKUPRESPONSE']._serialized_end=43143 - _globals['_NODE']._serialized_start=43146 - _globals['_NODE']._serialized_end=46873 + _GETINFOREQUEST._serialized_start=37 + _GETINFOREQUEST._serialized_end=53 + _GETINFORESPONSE._serialized_start=56 + _GETINFORESPONSE._serialized_end=633 + _GETINFOOUR_FEATURES._serialized_start=635 + _GETINFOOUR_FEATURES._serialized_end=718 + _GETINFOADDRESS._serialized_start=721 + _GETINFOADDRESS._serialized_end=917 + _GETINFOADDRESS_GETINFOADDRESSTYPE._serialized_start=834 + _GETINFOADDRESS_GETINFOADDRESSTYPE._serialized_end=905 + _GETINFOBINDING._serialized_start=920 + _GETINFOBINDING._serialized_end=1186 + _GETINFOBINDING_GETINFOBINDINGTYPE._serialized_start=1059 + _GETINFOBINDING_GETINFOBINDINGTYPE._serialized_end=1154 + _LISTPEERSREQUEST._serialized_start=1188 + _LISTPEERSREQUEST._serialized_end=1260 + _LISTPEERSRESPONSE._serialized_start=1262 + _LISTPEERSRESPONSE._serialized_end=1317 + _LISTPEERSPEERS._serialized_start=1320 + _LISTPEERSPEERS._serialized_end=1590 + _LISTPEERSPEERSLOG._serialized_start=1593 + _LISTPEERSPEERSLOG._serialized_end=1974 + _LISTPEERSPEERSLOG_LISTPEERSPEERSLOGTYPE._serialized_start=1804 + _LISTPEERSPEERSLOG_LISTPEERSPEERSLOGTYPE._serialized_end=1909 + _LISTPEERSPEERSCHANNELS._serialized_start=1977 + _LISTPEERSPEERSCHANNELS._serialized_end=5007 + _LISTPEERSPEERSCHANNELS_LISTPEERSPEERSCHANNELSSTATE._serialized_start=3877 + _LISTPEERSPEERSCHANNELS_LISTPEERSPEERSCHANNELSSTATE._serialized_end=4166 + _LISTPEERSPEERSCHANNELSFEERATE._serialized_start=5009 + _LISTPEERSPEERSCHANNELSFEERATE._serialized_end=5070 + _LISTPEERSPEERSCHANNELSINFLIGHT._serialized_start=5073 + _LISTPEERSPEERSCHANNELSINFLIGHT._serialized_end=5316 + _LISTPEERSPEERSCHANNELSFUNDING._serialized_start=5319 + _LISTPEERSPEERSCHANNELSFUNDING._serialized_end=5602 + _LISTPEERSPEERSCHANNELSALIAS._serialized_start=5604 + _LISTPEERSPEERSCHANNELSALIAS._serialized_end=5695 + _LISTPEERSPEERSCHANNELSHTLCS._serialized_start=5698 + _LISTPEERSPEERSCHANNELSHTLCS._serialized_end=6067 + _LISTPEERSPEERSCHANNELSHTLCS_LISTPEERSPEERSCHANNELSHTLCSDIRECTION._serialized_start=5983 + _LISTPEERSPEERSCHANNELSHTLCS_LISTPEERSPEERSCHANNELSHTLCSDIRECTION._serialized_end=6038 + _LISTFUNDSREQUEST._serialized_start=6069 + _LISTFUNDSREQUEST._serialized_end=6117 + _LISTFUNDSRESPONSE._serialized_start=6119 + _LISTFUNDSRESPONSE._serialized_end=6220 + _LISTFUNDSOUTPUTS._serialized_start=6223 + _LISTFUNDSOUTPUTS._serialized_end=6610 + _LISTFUNDSOUTPUTS_LISTFUNDSOUTPUTSSTATUS._serialized_start=6484 + _LISTFUNDSOUTPUTS_LISTFUNDSOUTPUTSSTATUS._serialized_end=6565 + _LISTFUNDSCHANNELS._serialized_start=6613 + _LISTFUNDSCHANNELS._serialized_end=6912 + _SENDPAYREQUEST._serialized_start=6915 + _SENDPAYREQUEST._serialized_end=7264 + _SENDPAYRESPONSE._serialized_start=7267 + _SENDPAYRESPONSE._serialized_end=7860 + _SENDPAYRESPONSE_SENDPAYSTATUS._serialized_start=7681 + _SENDPAYRESPONSE_SENDPAYSTATUS._serialized_end=7723 + _SENDPAYROUTE._serialized_start=7862 + _SENDPAYROUTE._serialized_end=7954 + _LISTCHANNELSREQUEST._serialized_start=7957 + _LISTCHANNELSREQUEST._serialized_end=8104 + _LISTCHANNELSRESPONSE._serialized_start=8106 + _LISTCHANNELSRESPONSE._serialized_end=8173 + _LISTCHANNELSCHANNELS._serialized_start=8176 + _LISTCHANNELSCHANNELS._serialized_end=8611 + _ADDGOSSIPREQUEST._serialized_start=8613 + _ADDGOSSIPREQUEST._serialized_end=8648 + _ADDGOSSIPRESPONSE._serialized_start=8650 + _ADDGOSSIPRESPONSE._serialized_end=8669 + _AUTOCLEANINVOICEREQUEST._serialized_start=8671 + _AUTOCLEANINVOICEREQUEST._serialized_end=8782 + _AUTOCLEANINVOICERESPONSE._serialized_start=8785 + _AUTOCLEANINVOICERESPONSE._serialized_end=8914 + _CHECKMESSAGEREQUEST._serialized_start=8916 + _CHECKMESSAGEREQUEST._serialized_end=9001 + _CHECKMESSAGERESPONSE._serialized_start=9003 + _CHECKMESSAGERESPONSE._serialized_end=9059 + _CLOSEREQUEST._serialized_start=9062 + _CLOSEREQUEST._serialized_end=9393 + _CLOSERESPONSE._serialized_start=9396 + _CLOSERESPONSE._serialized_end=9567 + _CLOSERESPONSE_CLOSETYPE._serialized_start=9498 + _CLOSERESPONSE_CLOSETYPE._serialized_end=9551 + _CONNECTREQUEST._serialized_start=9569 + _CONNECTREQUEST._serialized_end=9653 + _CONNECTRESPONSE._serialized_start=9656 + _CONNECTRESPONSE._serialized_end=9836 + _CONNECTRESPONSE_CONNECTDIRECTION._serialized_start=9801 + _CONNECTRESPONSE_CONNECTDIRECTION._serialized_end=9836 + _CONNECTADDRESS._serialized_start=9839 + _CONNECTADDRESS._serialized_end=10090 + _CONNECTADDRESS_CONNECTADDRESSTYPE._serialized_start=9978 + _CONNECTADDRESS_CONNECTADDRESSTYPE._serialized_end=10058 + _CREATEINVOICEREQUEST._serialized_start=10092 + _CREATEINVOICEREQUEST._serialized_end=10166 + _CREATEINVOICERESPONSE._serialized_start=10169 + _CREATEINVOICERESPONSE._serialized_end=10856 + _CREATEINVOICERESPONSE_CREATEINVOICESTATUS._serialized_start=10631 + _CREATEINVOICERESPONSE_CREATEINVOICESTATUS._serialized_end=10687 + _DATASTOREREQUEST._serialized_start=10859 + _DATASTOREREQUEST._serialized_end=11167 + _DATASTOREREQUEST_DATASTOREMODE._serialized_start=11012 + _DATASTOREREQUEST_DATASTOREMODE._serialized_end=11124 + _DATASTORERESPONSE._serialized_start=11170 + _DATASTORERESPONSE._serialized_end=11300 + _CREATEONIONREQUEST._serialized_start=11303 + _CREATEONIONREQUEST._serialized_end=11460 + _CREATEONIONRESPONSE._serialized_start=11462 + _CREATEONIONRESPONSE._serialized_end=11522 + _CREATEONIONHOPS._serialized_start=11524 + _CREATEONIONHOPS._serialized_end=11574 + _DELDATASTOREREQUEST._serialized_start=11576 + _DELDATASTOREREQUEST._serialized_end=11650 + _DELDATASTORERESPONSE._serialized_start=11653 + _DELDATASTORERESPONSE._serialized_end=11786 + _DELEXPIREDINVOICEREQUEST._serialized_start=11788 + _DELEXPIREDINVOICEREQUEST._serialized_end=11860 + _DELEXPIREDINVOICERESPONSE._serialized_start=11862 + _DELEXPIREDINVOICERESPONSE._serialized_end=11889 + _DELINVOICEREQUEST._serialized_start=11892 + _DELINVOICEREQUEST._serialized_end=12074 + _DELINVOICEREQUEST_DELINVOICESTATUS._serialized_start=12008 + _DELINVOICEREQUEST_DELINVOICESTATUS._serialized_end=12061 + _DELINVOICERESPONSE._serialized_start=12077 + _DELINVOICERESPONSE._serialized_end=12622 + _DELINVOICERESPONSE_DELINVOICESTATUS._serialized_start=12008 + _DELINVOICERESPONSE_DELINVOICESTATUS._serialized_end=12061 + _INVOICEREQUEST._serialized_start=12625 + _INVOICEREQUEST._serialized_end=12875 + _INVOICERESPONSE._serialized_start=12878 + _INVOICERESPONSE._serialized_end=13283 + _LISTDATASTOREREQUEST._serialized_start=13285 + _LISTDATASTOREREQUEST._serialized_end=13320 + _LISTDATASTORERESPONSE._serialized_start=13322 + _LISTDATASTORERESPONSE._serialized_end=13393 + _LISTDATASTOREDATASTORE._serialized_start=13396 + _LISTDATASTOREDATASTORE._serialized_end=13531 + _LISTINVOICESREQUEST._serialized_start=13534 + _LISTINVOICESREQUEST._serialized_end=13884 + _LISTINVOICESREQUEST_LISTINVOICESINDEX._serialized_start=13755 + _LISTINVOICESREQUEST_LISTINVOICESINDEX._serialized_end=13800 + _LISTINVOICESRESPONSE._serialized_start=13886 + _LISTINVOICESRESPONSE._serialized_end=13953 + _LISTINVOICESINVOICES._serialized_start=13956 + _LISTINVOICESINVOICES._serialized_end=14722 + _LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS._serialized_start=14456 + _LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS._serialized_end=14519 + _SENDONIONREQUEST._serialized_start=14725 + _SENDONIONREQUEST._serialized_end=15119 + _SENDONIONRESPONSE._serialized_start=15122 + _SENDONIONRESPONSE._serialized_end=15645 + _SENDONIONRESPONSE_SENDONIONSTATUS._serialized_start=15493 + _SENDONIONRESPONSE_SENDONIONSTATUS._serialized_end=15537 + _SENDONIONFIRST_HOP._serialized_start=15647 + _SENDONIONFIRST_HOP._serialized_end=15728 + _LISTSENDPAYSREQUEST._serialized_start=15731 + _LISTSENDPAYSREQUEST._serialized_end=15966 + _LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS._serialized_start=15868 + _LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS._serialized_end=15927 + _LISTSENDPAYSRESPONSE._serialized_start=15968 + _LISTSENDPAYSRESPONSE._serialized_end=16035 + _LISTSENDPAYSPAYMENTS._serialized_start=16038 + _LISTSENDPAYSPAYMENTS._serialized_end=16666 + _LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS._serialized_start=16472 + _LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS._serialized_end=16539 + _LISTTRANSACTIONSREQUEST._serialized_start=16668 + _LISTTRANSACTIONSREQUEST._serialized_end=16693 + _LISTTRANSACTIONSRESPONSE._serialized_start=16695 + _LISTTRANSACTIONSRESPONSE._serialized_end=16778 + _LISTTRANSACTIONSTRANSACTIONS._serialized_start=16781 + _LISTTRANSACTIONSTRANSACTIONS._serialized_end=17029 + _LISTTRANSACTIONSTRANSACTIONSINPUTS._serialized_start=17031 + _LISTTRANSACTIONSTRANSACTIONSINPUTS._serialized_end=17114 + _LISTTRANSACTIONSTRANSACTIONSOUTPUTS._serialized_start=17116 + _LISTTRANSACTIONSTRANSACTIONSOUTPUTS._serialized_end=17224 + _PAYREQUEST._serialized_start=17227 + _PAYREQUEST._serialized_end=17701 + _PAYRESPONSE._serialized_start=17704 + _PAYRESPONSE._serialized_end=18083 + _PAYRESPONSE_PAYSTATUS._serialized_start=17986 + _PAYRESPONSE_PAYSTATUS._serialized_end=18036 + _LISTNODESREQUEST._serialized_start=18085 + _LISTNODESREQUEST._serialized_end=18127 + _LISTNODESRESPONSE._serialized_start=18129 + _LISTNODESRESPONSE._serialized_end=18184 + _LISTNODESNODES._serialized_start=18187 + _LISTNODESNODES._serialized_end=18412 + _LISTNODESNODESADDRESSES._serialized_start=18415 + _LISTNODESNODESADDRESSES._serialized_end=18647 + _LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE._serialized_start=18555 + _LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE._serialized_end=18635 + _WAITANYINVOICEREQUEST._serialized_start=18649 + _WAITANYINVOICEREQUEST._serialized_end=18752 + _WAITANYINVOICERESPONSE._serialized_start=18755 + _WAITANYINVOICERESPONSE._serialized_end=19378 + _WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS._serialized_start=19187 + _WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS._serialized_end=19232 + _WAITINVOICEREQUEST._serialized_start=19380 + _WAITINVOICEREQUEST._serialized_end=19415 + _WAITINVOICERESPONSE._serialized_start=19418 + _WAITINVOICERESPONSE._serialized_end=20029 + _WAITINVOICERESPONSE_WAITINVOICESTATUS._serialized_start=19841 + _WAITINVOICERESPONSE_WAITINVOICESTATUS._serialized_end=19883 + _WAITSENDPAYREQUEST._serialized_start=20032 + _WAITSENDPAYREQUEST._serialized_end=20174 + _WAITSENDPAYRESPONSE._serialized_start=20177 + _WAITSENDPAYRESPONSE._serialized_end=20739 + _WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS._serialized_start=20581 + _WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS._serialized_end=20614 + _NEWADDRREQUEST._serialized_start=20742 + _NEWADDRREQUEST._serialized_end=20893 + _NEWADDRREQUEST_NEWADDRADDRESSTYPE._serialized_start=20826 + _NEWADDRREQUEST_NEWADDRADDRESSTYPE._serialized_end=20877 + _NEWADDRRESPONSE._serialized_start=20895 + _NEWADDRRESPONSE._serialized_end=21014 + _WITHDRAWREQUEST._serialized_start=21017 + _WITHDRAWREQUEST._serialized_end=21219 + _WITHDRAWRESPONSE._serialized_start=21221 + _WITHDRAWRESPONSE._serialized_end=21279 + _KEYSENDREQUEST._serialized_start=21282 + _KEYSENDREQUEST._serialized_end=21668 + _KEYSENDRESPONSE._serialized_start=21671 + _KEYSENDRESPONSE._serialized_end=22041 + _KEYSENDRESPONSE_KEYSENDSTATUS._serialized_start=21965 + _KEYSENDRESPONSE_KEYSENDSTATUS._serialized_end=21994 + _FUNDPSBTREQUEST._serialized_start=22044 + _FUNDPSBTREQUEST._serialized_end=22464 + _FUNDPSBTRESPONSE._serialized_start=22467 + _FUNDPSBTRESPONSE._serialized_end=22684 + _FUNDPSBTRESERVATIONS._serialized_start=22686 + _FUNDPSBTRESERVATIONS._serialized_end=22803 + _SENDPSBTREQUEST._serialized_start=22805 + _SENDPSBTREQUEST._serialized_end=22870 + _SENDPSBTRESPONSE._serialized_start=22872 + _SENDPSBTRESPONSE._serialized_end=22916 + _SIGNPSBTREQUEST._serialized_start=22918 + _SIGNPSBTREQUEST._serialized_end=22967 + _SIGNPSBTRESPONSE._serialized_start=22969 + _SIGNPSBTRESPONSE._serialized_end=23008 + _UTXOPSBTREQUEST._serialized_start=23011 + _UTXOPSBTREQUEST._serialized_end=23422 + _UTXOPSBTRESPONSE._serialized_start=23425 + _UTXOPSBTRESPONSE._serialized_end=23642 + _UTXOPSBTRESERVATIONS._serialized_start=23644 + _UTXOPSBTRESERVATIONS._serialized_end=23761 + _TXDISCARDREQUEST._serialized_start=23763 + _TXDISCARDREQUEST._serialized_end=23795 + _TXDISCARDRESPONSE._serialized_start=23797 + _TXDISCARDRESPONSE._serialized_end=23851 + _TXPREPAREREQUEST._serialized_start=23854 + _TXPREPAREREQUEST._serialized_end=24018 + _TXPREPARERESPONSE._serialized_start=24020 + _TXPREPARERESPONSE._serialized_end=24088 + _TXSENDREQUEST._serialized_start=24090 + _TXSENDREQUEST._serialized_end=24119 + _TXSENDRESPONSE._serialized_start=24121 + _TXSENDRESPONSE._serialized_end=24177 + _LISTPEERCHANNELSREQUEST._serialized_start=24179 + _LISTPEERCHANNELSREQUEST._serialized_end=24228 + _LISTPEERCHANNELSRESPONSE._serialized_start=24230 + _LISTPEERCHANNELSRESPONSE._serialized_end=24305 + _LISTPEERCHANNELSCHANNELS._serialized_start=24308 + _LISTPEERCHANNELSCHANNELS._serialized_end=27535 + _LISTPEERCHANNELSCHANNELS_LISTPEERCHANNELSCHANNELSSTATE._serialized_start=26299 + _LISTPEERCHANNELSCHANNELS_LISTPEERCHANNELSCHANNELSSTATE._serialized_end=26620 + _LISTPEERCHANNELSCHANNELSFEERATE._serialized_start=27537 + _LISTPEERCHANNELSCHANNELSFEERATE._serialized_end=27630 + _LISTPEERCHANNELSCHANNELSINFLIGHT._serialized_start=27633 + _LISTPEERCHANNELSCHANNELSINFLIGHT._serialized_end=28017 + _LISTPEERCHANNELSCHANNELSFUNDING._serialized_start=28020 + _LISTPEERCHANNELSCHANNELSFUNDING._serialized_end=28358 + _LISTPEERCHANNELSCHANNELSALIAS._serialized_start=28360 + _LISTPEERCHANNELSCHANNELSALIAS._serialized_end=28453 + _LISTPEERCHANNELSCHANNELSHTLCS._serialized_start=28456 + _LISTPEERCHANNELSCHANNELSHTLCS._serialized_end=28938 + _LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION._serialized_start=28777 + _LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION._serialized_end=28834 + _LISTCLOSEDCHANNELSREQUEST._serialized_start=28940 + _LISTCLOSEDCHANNELSREQUEST._serialized_end=28991 + _LISTCLOSEDCHANNELSRESPONSE._serialized_start=28993 + _LISTCLOSEDCHANNELSRESPONSE._serialized_end=29084 + _LISTCLOSEDCHANNELSCLOSEDCHANNELS._serialized_start=29087 + _LISTCLOSEDCHANNELSCLOSEDCHANNELS._serialized_end=30289 + _LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSE_CAUSE._serialized_start=29987 + _LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSE_CAUSE._serialized_end=30105 + _LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS._serialized_start=30291 + _LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS._serialized_end=30392 + _DECODEPAYREQUEST._serialized_start=30394 + _DECODEPAYREQUEST._serialized_end=30470 + _DECODEPAYRESPONSE._serialized_start=30473 + _DECODEPAYRESPONSE._serialized_end=30998 + _DECODEPAYFALLBACKS._serialized_start=31001 + _DECODEPAYFALLBACKS._serialized_end=31199 + _DECODEPAYFALLBACKS_DECODEPAYFALLBACKSTYPE._serialized_start=31122 + _DECODEPAYFALLBACKS_DECODEPAYFALLBACKSTYPE._serialized_end=31190 + _DECODEPAYEXTRA._serialized_start=31201 + _DECODEPAYEXTRA._serialized_end=31244 + _DECODEREQUEST._serialized_start=31246 + _DECODEREQUEST._serialized_end=31277 + _DECODERESPONSE._serialized_start=31280 + _DECODERESPONSE._serialized_end=35546 + _DECODERESPONSE_DECODETYPE._serialized_start=33848 + _DECODERESPONSE_DECODETYPE._serialized_end=33956 + _DECODEOFFER_PATHS._serialized_start=35548 + _DECODEOFFER_PATHS._serialized_end=35608 + _DECODEOFFER_RECURRENCEPAYWINDOW._serialized_start=35611 + _DECODEOFFER_RECURRENCEPAYWINDOW._serialized_end=35749 + _DECODEINVOICE_PATHSPATH._serialized_start=35751 + _DECODEINVOICE_PATHSPATH._serialized_end=35835 + _DECODEINVOICE_FALLBACKS._serialized_start=35837 + _DECODEINVOICE_FALLBACKS._serialized_end=35926 + _DECODEFALLBACKS._serialized_start=35928 + _DECODEFALLBACKS._serialized_end=36047 + _DECODEEXTRA._serialized_start=36049 + _DECODEEXTRA._serialized_end=36089 + _DECODERESTRICTIONS._serialized_start=36091 + _DECODERESTRICTIONS._serialized_end=36150 + _DISCONNECTREQUEST._serialized_start=36152 + _DISCONNECTREQUEST._serialized_end=36213 + _DISCONNECTRESPONSE._serialized_start=36215 + _DISCONNECTRESPONSE._serialized_end=36235 + _FEERATESREQUEST._serialized_start=36237 + _FEERATESREQUEST._serialized_end=36344 + _FEERATESREQUEST_FEERATESSTYLE._serialized_start=36307 + _FEERATESREQUEST_FEERATESSTYLE._serialized_end=36344 + _FEERATESRESPONSE._serialized_start=36347 + _FEERATESRESPONSE._serialized_end=36631 + _FEERATESPERKB._serialized_start=36634 + _FEERATESPERKB._serialized_end=37101 + _FEERATESPERKBESTIMATES._serialized_start=37104 + _FEERATESPERKBESTIMATES._serialized_end=37254 + _FEERATESPERKW._serialized_start=37257 + _FEERATESPERKW._serialized_end=37724 + _FEERATESPERKWESTIMATES._serialized_start=37727 + _FEERATESPERKWESTIMATES._serialized_end=37877 + _FEERATESONCHAIN_FEE_ESTIMATES._serialized_start=37880 + _FEERATESONCHAIN_FEE_ESTIMATES._serialized_end=38163 + _FUNDCHANNELREQUEST._serialized_start=38166 + _FUNDCHANNELREQUEST._serialized_end=38651 + _FUNDCHANNELRESPONSE._serialized_start=38654 + _FUNDCHANNELRESPONSE._serialized_end=38809 + _GETROUTEREQUEST._serialized_start=38812 + _GETROUTEREQUEST._serialized_end=39048 + _GETROUTERESPONSE._serialized_start=39050 + _GETROUTERESPONSE._serialized_end=39103 + _GETROUTEROUTE._serialized_start=39106 + _GETROUTEROUTE._serialized_end=39303 + _GETROUTEROUTE_GETROUTEROUTESTYLE._serialized_start=39274 + _GETROUTEROUTE_GETROUTEROUTESTYLE._serialized_end=39303 + _LISTFORWARDSREQUEST._serialized_start=39306 + _LISTFORWARDSREQUEST._serialized_end=39564 + _LISTFORWARDSREQUEST_LISTFORWARDSSTATUS._serialized_start=39446 + _LISTFORWARDSREQUEST_LISTFORWARDSSTATUS._serialized_end=39522 + _LISTFORWARDSRESPONSE._serialized_start=39566 + _LISTFORWARDSRESPONSE._serialized_end=39633 + _LISTFORWARDSFORWARDS._serialized_start=39636 + _LISTFORWARDSFORWARDS._serialized_end=40242 + _LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS._serialized_start=40025 + _LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS._serialized_end=40109 + _LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE._serialized_start=40111 + _LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE._serialized_end=40159 + _LISTPAYSREQUEST._serialized_start=40245 + _LISTPAYSREQUEST._serialized_end=40464 + _LISTPAYSREQUEST_LISTPAYSSTATUS._serialized_start=40370 + _LISTPAYSREQUEST_LISTPAYSSTATUS._serialized_end=40425 + _LISTPAYSRESPONSE._serialized_start=40466 + _LISTPAYSRESPONSE._serialized_end=40517 + _LISTPAYSPAYS._serialized_start=40520 + _LISTPAYSPAYS._serialized_end=41159 + _LISTPAYSPAYS_LISTPAYSPAYSSTATUS._serialized_start=40934 + _LISTPAYSPAYS_LISTPAYSPAYSSTATUS._serialized_end=40993 + _LISTHTLCSREQUEST._serialized_start=41161 + _LISTHTLCSREQUEST._serialized_end=41203 + _LISTHTLCSRESPONSE._serialized_start=41205 + _LISTHTLCSRESPONSE._serialized_end=41260 + _LISTHTLCSHTLCS._serialized_start=41263 + _LISTHTLCSHTLCS._serialized_end=41528 + _LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION._serialized_start=41486 + _LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION._serialized_end=41528 + _PINGREQUEST._serialized_start=41530 + _PINGREQUEST._serialized_end=41619 + _PINGRESPONSE._serialized_start=41621 + _PINGRESPONSE._serialized_end=41651 + _SENDCUSTOMMSGREQUEST._serialized_start=41653 + _SENDCUSTOMMSGREQUEST._serialized_end=41705 + _SENDCUSTOMMSGRESPONSE._serialized_start=41707 + _SENDCUSTOMMSGRESPONSE._serialized_end=41746 + _SETCHANNELREQUEST._serialized_start=41749 + _SETCHANNELREQUEST._serialized_end=42047 + _SETCHANNELRESPONSE._serialized_start=42049 + _SETCHANNELRESPONSE._serialized_end=42112 + _SETCHANNELCHANNELS._serialized_start=42115 + _SETCHANNELCHANNELS._serialized_end=42573 + _SIGNINVOICEREQUEST._serialized_start=42575 + _SIGNINVOICEREQUEST._serialized_end=42614 + _SIGNINVOICERESPONSE._serialized_start=42616 + _SIGNINVOICERESPONSE._serialized_end=42653 + _SIGNMESSAGEREQUEST._serialized_start=42655 + _SIGNMESSAGEREQUEST._serialized_end=42692 + _SIGNMESSAGERESPONSE._serialized_start=42694 + _SIGNMESSAGERESPONSE._serialized_end=42764 + _STOPREQUEST._serialized_start=42766 + _STOPREQUEST._serialized_end=42779 + _STOPRESPONSE._serialized_start=42781 + _STOPRESPONSE._serialized_end=42795 + _PREAPPROVEKEYSENDREQUEST._serialized_start=42798 + _PREAPPROVEKEYSENDREQUEST._serialized_end=42965 + _PREAPPROVEKEYSENDRESPONSE._serialized_start=42967 + _PREAPPROVEKEYSENDRESPONSE._serialized_end=42994 + _PREAPPROVEINVOICEREQUEST._serialized_start=42996 + _PREAPPROVEINVOICEREQUEST._serialized_end=43054 + _PREAPPROVEINVOICERESPONSE._serialized_start=43056 + _PREAPPROVEINVOICERESPONSE._serialized_end=43083 + _STATICBACKUPREQUEST._serialized_start=43085 + _STATICBACKUPREQUEST._serialized_end=43106 + _STATICBACKUPRESPONSE._serialized_start=43108 + _STATICBACKUPRESPONSE._serialized_end=43143 + _NODE._serialized_start=43146 + _NODE._serialized_end=46873 # @@protoc_insertion_point(module_scope) diff --git a/doc/Makefile b/doc/Makefile index ce7ea26c8583..692203230ba4 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -87,6 +87,8 @@ MANPAGES := doc/lightning-cli.1 \ doc/lightning-preapproveinvoice.7 \ doc/lightning-preapprovekeysend.7 \ doc/lightning-recoverchannel.7 \ + doc/lightning-renepay.7 \ + doc/lightning-renepaystatus.7 \ doc/lightning-reserveinputs.7 \ doc/lightning-sendinvoice.7 \ doc/lightning-sendonion.7 \ @@ -98,6 +100,9 @@ MANPAGES := doc/lightning-cli.1 \ doc/lightning-sendcustommsg.7 \ doc/lightning-signinvoice.7 \ doc/lightning-signmessage.7 \ + doc/lightning-splice_init.7 \ + doc/lightning-splice_update.7 \ + doc/lightning-splice_signed.7 \ doc/lightning-staticbackup.7 \ doc/lightning-txprepare.7 \ doc/lightning-txdiscard.7 \ diff --git a/doc/developers-guide/tracing-cln-performance.md b/doc/developers-guide/tracing-cln-performance.md index 2c80413bceb3..54d75a0268f7 100644 --- a/doc/developers-guide/tracing-cln-performance.md +++ b/doc/developers-guide/tracing-cln-performance.md @@ -78,4 +78,6 @@ Attaching 1 probe... + + Notice that due to a [limitation](https://github.com/iovisor/bpftrace/issues/305) in `bpftrace` you'll at most get the first 200 bytes of the payload. If you write your own exporter you'll be able to specify the size of the buffer that is being used, and can extract the entire span. diff --git a/doc/index.rst b/doc/index.rst index a0eeee988913..d59d7700cf9f 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -3,27 +3,9 @@ Core Lightning Documentation .. toctree:: :maxdepth: 1 - :caption: User Documentation + :caption: Main Documentation - INSTALL.md - TOR.md - FAQ - Backups - -.. toctree:: - :maxdepth: 2 - :caption: Integrator Documentation - - Writing plugins - -.. toctree:: - :maxdepth: 1 - :caption: Developer Documentation - - HACKING.md - Coding Style Guideline - MAKING-RELEASES.md - CHANGELOG.md + https://docs.corelightning.org/docs .. toctree:: :maxdepth: 1 @@ -117,6 +99,8 @@ Core Lightning Documentation lightning-preapproveinvoice lightning-preapprovekeysend lightning-recoverchannel + lightning-renepay + lightning-renepaystatus lightning-reserveinputs lightning-sendcustommsg lightning-sendinvoice @@ -132,6 +116,8 @@ Core Lightning Documentation lightning-signmessage lightning-signpsbt lightning-splice_init + lightning-splice_signed + lightning-splice_update lightning-sql lightning-staticbackup lightning-stop diff --git a/doc/lightning-listclosedchannels.7.md b/doc/lightning-listclosedchannels.7.md index 4e193428d928..8fd24df7d3e3 100644 --- a/doc/lightning-listclosedchannels.7.md +++ b/doc/lightning-listclosedchannels.7.md @@ -25,7 +25,7 @@ On success, an object containing **closedchannels** is returned. It is an array - **channel\_id** (hash): The full channel\_id (funding txid Xored with output number) - **opener** (string): Who initiated the channel (one of "local", "remote") -- **private** (boolean): if False, we will not announce this channel +- **private** (boolean): if True, we will not announce this channel - **total\_local\_commitments** (u64): Number of commitment transaction we made - **total\_remote\_commitments** (u64): Number of commitment transaction they made - **total\_htlcs\_sent** (u64): Number of HTLCs we ever sent @@ -76,4 +76,4 @@ RESOURCES Main web site: Lightning -[comment]: # ( SHA256STAMP:0c368cb41f46a2124e9b3f0b760494d1f4b9c3b248267f56b887fbf96f26e176) +[comment]: # ( SHA256STAMP:3020e068d48a43494983df1a902d7483a52d0c41faef85e6d858dcf7c64c188d) diff --git a/doc/lightning-listpeerchannels.7.md b/doc/lightning-listpeerchannels.7.md index 426e7ad6cfa0..08fb9f62c7e5 100644 --- a/doc/lightning-listpeerchannels.7.md +++ b/doc/lightning-listpeerchannels.7.md @@ -58,7 +58,7 @@ On success, an object containing **channels** is returned. It is an array of ob - **our\_funding\_msat** (msat): amount we have in the channel - **scratch\_txid** (txid): The commitment transaction txid we would use if we went onchain now - **close\_to** (hex, optional): scriptPubkey which we have to close to if we mutual close -- **private** (boolean, optional): if False, we will not announce this channel +- **private** (boolean, optional): if True, we will not announce this channel - **closer** (string, optional): Who initiated the channel close (only present if closing) (one of "local", "remote") - **funding** (object, optional): - **local\_funds\_msat** (msat): Amount of channel we funded @@ -196,4 +196,4 @@ Main web site: Lightning RFC site (BOLT \#9): -[comment]: # ( SHA256STAMP:dade32248bd309f2514a237cb71be6ddbe12220e1b6899693a032b45b7980a01) +[comment]: # ( SHA256STAMP:359d0035f98350d2de5f539ce8d2c3d82ccf633d3cbee4ed992a71687a25770a) diff --git a/doc/lightning-listpeers.7.md b/doc/lightning-listpeers.7.md index 3b95a1688068..4f79be6b00b8 100644 --- a/doc/lightning-listpeers.7.md +++ b/doc/lightning-listpeers.7.md @@ -92,7 +92,7 @@ On success, an object containing **peers** is returned. It is an array of objec - **splice\_amount** (integer): The amouont of sats we're splicing in or out *(added v23.08)* - **scratch\_txid** (txid): The commitment transaction txid we would use if we went onchain now - **close\_to** (hex, optional): scriptPubkey which we have to close to if we mutual close - - **private** (boolean, optional): if False, we will not announce this channel + - **private** (boolean, optional): if True, we will not announce this channel - **closer** (string, optional): Who initiated the channel close (one of "local", "remote") - **funding** (object, optional): - **local\_funds\_msat** (msat): Amount of channel we funded @@ -399,4 +399,4 @@ Main web site: Lightning RFC site (BOLT \#9): -[comment]: # ( SHA256STAMP:d75b5070288f26a39df39831212f40c397f1389e7c1765f22829d3f3389a56aa) +[comment]: # ( SHA256STAMP:7402bcd43be7c031c1e8e1ec7a4d58e94beb44ca48ba2f8f06e4ea908ab8940b) diff --git a/doc/lightning-offer.7.md b/doc/lightning-offer.7.md index d44eaff8334e..e9cea4014260 100644 --- a/doc/lightning-offer.7.md +++ b/doc/lightning-offer.7.md @@ -16,8 +16,7 @@ one), which is a precursor to creating one or more invoices. It automatically enables the processing of an incoming invoice\_request, and issuing of invoices. -Note that for making an offer to *pay* someone else, see -lightning-invoicerequest(7). +Note that for making an offer to *pay* someone else, see lightning-invoicerequest(7). The *amount* parameter can be the string "any", which creates an offer that can be paid with any amount (e.g. a donation). Otherwise it can diff --git a/doc/lightning-renepay.7.md b/doc/lightning-renepay.7.md new file mode 100644 index 000000000000..826ae9bbb6f4 --- /dev/null +++ b/doc/lightning-renepay.7.md @@ -0,0 +1,152 @@ +lightning-renepay -- Command for sending a payment to a BOLT11 invoice +====================================================================== + +SYNOPSIS +-------- + +**renepay** *invstring* [*amount\_msat*] [*maxfee*] [*maxdelay*] +[*retry\_for*] [*description*] [*label*] + + +DESCRIPTION +----------- + +**renepay** is a new payment plugin based on Pickhardt-Richter optimization +method for Multi-Path-Payments. This implementation has not been thoroughly +tested and it should be used with caution. + +The **renepay** RPC command attempts to pay the invoice specified +as *invstring*. Currently, **renepay** supports bolt11 invoices only. + +The response will occur when the payment fails or succeeds. Once a +payment has succeeded, calls to **renepay** with the same *invstring* +will not lead to a new payment attempt, but instead it will succeed immediately. + +If the *invstring* does not contain an amount, +*amount\_msat* is required, otherwise if it is specified +it must be *null*. *amount\_msat* is in millisatoshi precision; it can be a +whole number, or a whole number with suffix *msat* or *sat*, or a three +decimal point number with suffix *sat*, or an 1 to 11 decimal point +number suffixed by *btc*. + +*maxfee* limits how much is paid fees and it is measured in millisatoshi +by default, but also in this case the unit can be specified with a suffix: *msat*, *sat* or *btc*. +The default value is 5 sats or 0.5% whichever is higher. + +*maxdelay* overrides the value of `max-locktime-blocks` for this payment. +It serves to limit the locktime of funds in the payment HTLC measured in blocks. + +*retry\_for* measured in seconds (default: 60) specifies how much time it is +allowed for the command to keep retrying the payment. + +*description* is only required for bolt11 invoices which do not +contain a description themselves, but contain a description hash: +in this case *description* is required. +*description* is then checked against the hash inside the invoice +before it will be paid. + +The *label* field is used to attach a label to payments, and is returned +in lightning-listpays(7) and lightning-listsendpays(7). + +When using *lightning-cli*, you may skip optional parameters by using +*null*. Alternatively, use **-k** option to provide parameters by name. + + +OPTIMALITY +---------- + +**renepay** is based on the work by Pickhardt-Richter's +*Optimally Reliable & Cheap Payment Flows on the Lightning Network*. +Which means the payment command will prefer routes that have a higher +probability of success while keeping fees low. + +The algorithm records some partial knowledge of the state of the Network +deduced from the responses obtained after evey payment attempt. +This knowledge is kept through different payment requests, but decays with time +to account for the dynamics of the Network (after 1 hour all previous knowledge +will be erased). +Knowledge from previous payment attempts increases the reliability for +subsequent ones. + +Higher probabilities of success and lower fees cannot generally by optimized at +once. Hence **renepay** combines the two in different amounts seeking solutions +that satisfy *maxfee* bound and a target for 90% probability of success. +*maxfee* is a hard bound, in the sense that the command will never attempt a +payment when the fees exceed that value. While the probability target is not +compulsory (but desirable), i.e. if the best route does not satisfy the +90% probability target it will be tried anyways. + +When *maxfee* and the 90% probability bounds are satified, the algorithm will +optimize the fees to its lowest value. + + +RANDOMIZATION +------------- + +To protect user privacy, the payment algorithm performs *shadow route* +randomization. +Which means the payment algorithm will virtually extend the route +by adding delays and fees along it, making it appear to intermediate nodes +that the route is longer than it actually is. This prevents intermediate +nodes from reliably guessing their distance from the payee. + +Route randomization will never exceed *maxfee* of the payment. +Route randomization and shadow routing will not take routes that would +exceed *maxdelay*. + +RETURN VALUE +------------ + +[comment]: # (GENERATE-FROM-SCHEMA-START) +On success, an object is returned, containing: + +- **payment\_preimage** (secret): the proof of payment: SHA256 of this **payment\_hash** +- **payment\_hash** (hash): the hash of the *payment\_preimage* which will prove payment +- **created\_at** (number): the UNIX timestamp showing when this payment was initiated +- **parts** (u32): how many attempts this took +- **amount\_msat** (msat): amount the recipient received +- **amount\_sent\_msat** (msat): total amount we sent (including fees) +- **status** (string): status of payment (one of "complete", "pending", "failed") +- **destination** (pubkey, optional): the final destination of the payment + +[comment]: # (GENERATE-FROM-SCHEMA-END) + +You can monitor the progress and retries of a payment using the +lightning-renepaystatus(7) command. + +The following error codes may occur: + +-1: Catchall nonspecific error. + +200: Other payment attempts are in progress. + +203: Permanent failure at destination. + +205: Unable to find a route. + +206: Payment routes are too expensive. + +207: Invoice expired. Payment took too long before expiration, or +already expired at the time you initiated payment. + +210: Payment timed out without a payment in progress. + +212: Invoice is invalid. + +AUTHOR +------ + +Eduardo Quintana-Miranda <> is mainly responsible. + +SEE ALSO +-------- + +lightning-renepaystatus(7), lightning-listpays(7), lightning-invoice(7). + +RESOURCES +--------- + +- Main web site: +- Pickhardt R. and Richter S., *Optimally Reliable & Cheap Payment Flows on the Lightning Network* + +[comment]: # ( SHA256STAMP:505a2ea336078020826b5897f2db02d4c4e0e03a9561170458afae008e47e06e) diff --git a/doc/lightning-renepaystatus.7.md b/doc/lightning-renepaystatus.7.md new file mode 100644 index 000000000000..df78aabe7624 --- /dev/null +++ b/doc/lightning-renepaystatus.7.md @@ -0,0 +1,55 @@ +lightning-renepaystatus -- Command for quering the status of previous renepay attempts +====================================================================================== + +SYNOPSIS +-------- + +**renepaystatus** [*invstring*] + + +DESCRIPTION +----------- + +The **renepaystatus** RPC command queries the payment plugin **renepay** +for the status of previous payment attempts. +If *invstring* is specified, the command will return a list of payment attempts +whose invoice matches *invstring*, otherwise all payments with be listed. +This command always succeeds. + +RETURN VALUE +------------ + +[comment]: # (GENERATE-FROM-SCHEMA-START) +On success, an object containing **paystatus** is returned. It is an array of objects, where each object contains: + +- **bolt11** (string): invoice string BOLT11 +- **payment\_hash** (hash): the hash of the *payment\_preimage* which will prove payment +- **created\_at** (number): the UNIX timestamp showing when this payment was initiated +- **groupid** (u32): the id for this payment attempt +- **amount\_msat** (msat): amount the recipient received +- **status** (string): status of payment (one of "complete", "pending", "failed") +- **notes** (array of strings): a list of messages for debugging purposes: + - a message generated by renepay +- **payment\_preimage** (secret, optional): the proof of payment: SHA256 of this **payment\_hash** (for completed payments only) +- **parts** (u32, optional): how many attempts this took +- **amount\_sent\_msat** (msat, optional): total amount we sent including fees (for completed payments only) +- **destination** (pubkey, optional): the final destination of the payment + +[comment]: # (GENERATE-FROM-SCHEMA-END) + +AUTHOR +------ + +Eduardo Quintana-Miranda <> is mainly responsible. + +SEE ALSO +-------- + +lightning-renepay(7), lightning-listpays(7). + +RESOURCES +--------- + +Main web site: + +[comment]: # ( SHA256STAMP:3dfae7499b76853c08d307d8d723933ab680f6827ff079569af97ba2dda03833) diff --git a/doc/lightning-splice_init.7.md b/doc/lightning-splice_init.7.md index 291b4ea9e71b..b461cc135f6a 100644 --- a/doc/lightning-splice_init.7.md +++ b/doc/lightning-splice_init.7.md @@ -49,7 +49,7 @@ RESULT=$(lightning-cli splice_update $CHANNEL_ID $PSBT) PSBT=$(echo $RESULT | jq -r ".psbt") echo $RESULT -RESULT=$(lightning-cli signpsbt $PSBT) +RESULT=$(lightning-cli signpsbt -k psbt="$PSBT") PSBT=$(echo $RESULT | jq -r ".signed_psbt") echo $RESULT @@ -79,4 +79,4 @@ RESOURCES Main web site: -[comment]: # ( SHA256STAMP:40121e2e7b0db8c99de12b4fd086f58f63e0d6643b9da1c1697a34dd5057454e) +[comment]: # ( SHA256STAMP:28e857bb214a084bb638c7db3e7277291b7d60d78360fb8603423bc4d1d427a1) diff --git a/doc/lightning-splice_signed.7.md b/doc/lightning-splice_signed.7.md new file mode 100644 index 000000000000..de281cc965a2 --- /dev/null +++ b/doc/lightning-splice_signed.7.md @@ -0,0 +1,93 @@ +lightning-splice\_signed -- Command to initiate a channel to a peer +===================================================================== + +SYNOPSIS +-------- +**(WARNING: experimental-splicing only)** + +**splice\_signed** *channel\_id* *psbt* [*sign\_first*] + +DESCRIPTION +----------- + +`splice_signed` is a low level RPC command which finishes the active channel +splice associated with `channel_id`. + +*channel\_id* is the channel id of the channel being spliced. + +*psbt* is the final version of the psbt to complete the splice with. + +*sign\_first* is a flag that makes our node offer the final splice signature +first (defaults to false). When false, the node will calculate who should +sign first based off who is adding inputting the least sats to the splice as per +spec. + +The *psbt* must have all signatures attached to all inputs that you have added +to it or it will fail. + +In this example we funded the psbt from our lightning node, so we can use the +lightning node to sign for its funds. +```shell +RESULT=$(lightning-cli signpsbt $PSBT) +PSBT=$(echo $RESULT | jq -r ".signed_psbt") +echo $RESULT + +lightning-cli splice_signed $CHANNEL_ID $PSBT +``` + +Here is a full example set of splice commands that will splice in 100,000 sats +to the first channel that comes out of `listpeerchannels`. The example assumes +you already have at least one confirmed channel. +```shell +RESULT=$(lightning-cli listpeerchannels) +CHANNEL_ID=$(echo $RESULT| jq -r ".channels[0].channel_id") +echo $RESULT + +RESULT=$(lightning-cli fundpsbt -k satoshi=100000sat feerate=urgent startweight=800 excess_as_change=true) +INITIALPSBT=$(echo $RESULT | jq -r ".psbt") +echo $RESULT + +RESULT=$(lightning-cli splice_init $CHANNEL_ID 100000 $INITIALPSBT) +PSBT=$(echo $RESULT | jq -r ".psbt") +echo $RESULT + +RESULT="{\"commitments_secured\":false}" +while [[ $(echo $RESULT | jq -r ".commitments_secured") == "false" ]] +do + RESULT=$(lightning-cli splice_update $CHANNEL_ID $PSBT) + PSBT=$(echo $RESULT | jq -r ".psbt") + echo $RESULT +done + +RESULT=$(lightning-cli signpsbt -k psbt="$PSBT") +PSBT=$(echo $RESULT | jq -r ".signed_psbt") +echo $RESULT + +lightning-cli splice_signed $CHANNEL_ID $PSBT +``` + +RETURN VALUE +------------ + +[comment]: # (GENERATE-FROM-SCHEMA-START) +On success, an object is returned, containing: + +- **tx** (hex): The hex representation of the final transaction that is published +- **txid** (txid): The txid is of the final transaction + +[comment]: # (GENERATE-FROM-SCHEMA-END) + +SEE ALSO +-------- + +AUTHOR +------ + +@dusty\_daemon + +RESOURCES +--------- + +Main web site: + +[comment]: # ( SHA256STAMP:c084b5d6ce24db28226d5f37176f339009f4a2a761104404e7a41ed32cb2664c) diff --git a/doc/lightning-splice_update.7.md b/doc/lightning-splice_update.7.md new file mode 100644 index 000000000000..0b1629bc28cd --- /dev/null +++ b/doc/lightning-splice_update.7.md @@ -0,0 +1,106 @@ +lightning-splice\_update -- Command to initiate a channel to a peer +===================================================================== + +SYNOPSIS +-------- +**(WARNING: experimental-splicing only)** + +**splice\_update** *channel\_id* *psbt* + +DESCRIPTION +----------- + +`splice_update` is a low level RPC command which updates the active channel +splice associated with `channel_id`. + +*channel\_id* is the channel id of the channel being spliced. + +*psbt* is the base 64 encoded PSBT returned from `splice_init` with any changes +added by the user. + +`splice_update` must be called repeatidly until the result `commitments_secured` +is `true`. Each time `splice_update` is called, it will return a new PSBT that +may have changes. In the simplest case, you take the returned `psbt` and pass +it back into `splice_update` for the incoming `psbt` field. + +For more complex use cases, you may modify the `psbt` both before calling +`splice_update` and inbetween subsequent calls until `commitments_secured` is +`true`. After which point you can no long make modifications to the PSBT (beyond +signing, which comes later with `splice_signed`). + +Each `splice_update` result may include changes to the PSBT specified by your +channel peer. You can review these changes between calls to `splice_update` to +perform additional validation or strategy adjustment. + +Typically, `splice_update` will return `commitments_secured` true after one call +but you should assume it will need multiple calls. Here is an example way to +call `splice_update` +```shell +RESULT="{\"commitments_secured\":false}" +while [[ $(echo $RESULT | jq -r ".commitments_secured") == "false" ]] +do + RESULT=$(lightning-cli splice_update $CHANNEL_ID $PSBT) + PSBT=$(echo $RESULT | jq -r ".psbt") + echo $RESULT +done +``` + +Before each call to `splice_update` you have the opportunity +to make additional changes. + +Here is a full example set of splice commands that will splice in 100,000 sats +to the first channel that comes out of `listpeerchannels`. The example assumes +you already have at least one confirmed channel. +```shell +RESULT=$(lightning-cli listpeerchannels) +CHANNEL_ID=$(echo $RESULT| jq -r ".channels[0].channel_id") +echo $RESULT + +RESULT=$(lightning-cli fundpsbt -k satoshi=100000sat feerate=urgent startweight=800 excess_as_change=true) +INITIALPSBT=$(echo $RESULT | jq -r ".psbt") +echo $RESULT + +RESULT=$(lightning-cli splice_init $CHANNEL_ID 100000 $INITIALPSBT) +PSBT=$(echo $RESULT | jq -r ".psbt") +echo $RESULT + +RESULT="{\"commitments_secured\":false}" +while [[ $(echo $RESULT | jq -r ".commitments_secured") == "false" ]] +do + RESULT=$(lightning-cli splice_update $CHANNEL_ID $PSBT) + PSBT=$(echo $RESULT | jq -r ".psbt") + echo $RESULT +done + +RESULT=$(lightning-cli signpsbt -k psbt="$PSBT") +PSBT=$(echo $RESULT | jq -r ".signed_psbt") +echo $RESULT + +lightning-cli splice_signed $CHANNEL_ID $PSBT +``` + +RETURN VALUE +------------ + +[comment]: # (GENERATE-FROM-SCHEMA-START) +On success, an object is returned, containing: + +- **psbt** (string): the (incomplete) PSBT of the splice transaction +- **commitments\_secured** (boolean): whether or not the commitments were secured + +[comment]: # (GENERATE-FROM-SCHEMA-END) + +SEE ALSO +-------- + +AUTHOR +------ + +@dusty\_daemon + +RESOURCES +--------- + +Main web site: + +[comment]: # ( SHA256STAMP:e7f65170f8d32eb56b327a4eae0b5978517aba8e4f12e8271e71481afc33e0f3) diff --git a/doc/schemas/listclosedchannels.schema.json b/doc/schemas/listclosedchannels.schema.json index 7ee9ae5c4ab8..b090bf2cbcc0 100644 --- a/doc/schemas/listclosedchannels.schema.json +++ b/doc/schemas/listclosedchannels.schema.json @@ -73,7 +73,7 @@ }, "private": { "type": "boolean", - "description": "if False, we will not announce this channel" + "description": "if True, we will not announce this channel" }, "channel_type": { "type": "object", diff --git a/doc/schemas/listpeerchannels.schema.json b/doc/schemas/listpeerchannels.schema.json index 3d994c08cb8b..b08970247c2b 100644 --- a/doc/schemas/listpeerchannels.schema.json +++ b/doc/schemas/listpeerchannels.schema.json @@ -199,7 +199,7 @@ }, "private": { "type": "boolean", - "description": "if False, we will not announce this channel" + "description": "if True, we will not announce this channel" }, "opener": { "type": "string", @@ -378,7 +378,8 @@ "FUNDING_SPEND_SEEN", "ONCHAIN", "DUALOPEND_OPEN_INIT", - "DUALOPEND_AWAITING_LOCKIN" + "DUALOPEND_AWAITING_LOCKIN", + "CHANNELD_AWAITING_SPLICE" ], "description": "Previous state" }, @@ -395,7 +396,8 @@ "FUNDING_SPEND_SEEN", "ONCHAIN", "DUALOPEND_OPEN_INIT", - "DUALOPEND_AWAITING_LOCKIN" + "DUALOPEND_AWAITING_LOCKIN", + "CHANNELD_AWAITING_SPLICE" ], "description": "New state" }, diff --git a/doc/schemas/listpeers.schema.json b/doc/schemas/listpeers.schema.json index efe4c8f5227e..a30cbb44da7f 100644 --- a/doc/schemas/listpeers.schema.json +++ b/doc/schemas/listpeers.schema.json @@ -315,7 +315,7 @@ }, "private": { "type": "boolean", - "description": "if False, we will not announce this channel" + "description": "if True, we will not announce this channel" }, "opener": { "type": "string", diff --git a/doc/schemas/renepay.schema.json b/doc/schemas/renepay.schema.json new file mode 100644 index 000000000000..2700a5e92608 --- /dev/null +++ b/doc/schemas/renepay.schema.json @@ -0,0 +1,54 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "added": "v23.08", + "type": "object", + "additionalProperties": false, + "required": [ + "payment_preimage", + "payment_hash", + "created_at", + "parts", + "amount_msat", + "amount_sent_msat", + "status" + ], + "properties": { + "payment_preimage": { + "type": "secret", + "description": "the proof of payment: SHA256 of this **payment_hash**" + }, + "payment_hash": { + "type": "hash", + "description": "the hash of the *payment_preimage* which will prove payment" + }, + "created_at": { + "type": "number", + "description": "the UNIX timestamp showing when this payment was initiated" + }, + "parts": { + "type": "u32", + "description": "how many attempts this took" + }, + "amount_msat": { + "type": "msat", + "description": "amount the recipient received" + }, + "amount_sent_msat": { + "type": "msat", + "description": "total amount we sent (including fees)" + }, + "status": { + "type": "string", + "enum": [ + "complete", + "pending", + "failed" + ], + "description": "status of payment" + }, + "destination": { + "type": "pubkey", + "description": "the final destination of the payment" + } + } +} diff --git a/doc/schemas/renepaystatus.schema.json b/doc/schemas/renepaystatus.schema.json new file mode 100644 index 000000000000..03da45dc14d8 --- /dev/null +++ b/doc/schemas/renepaystatus.schema.json @@ -0,0 +1,83 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "added": "v23.08", + "type": "object", + "additionalProperties": false, + "required": [ + "paystatus" + ], + "properties": { + "paystatus": { + "type": "array", + "description": "a list of payments attempted by renepay", + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "bolt11", + "payment_hash", + "created_at", + "groupid", + "amount_msat", + "status", + "notes" + ], + "properties": { + "bolt11": { + "type": "string", + "description": "invoice string BOLT11" + }, + "payment_preimage": { + "type": "secret", + "description": "the proof of payment: SHA256 of this **payment_hash** (for completed payments only)" + }, + "payment_hash": { + "type": "hash", + "description": "the hash of the *payment_preimage* which will prove payment" + }, + "created_at": { + "type": "number", + "description": "the UNIX timestamp showing when this payment was initiated" + }, + "groupid": { + "type": "u32", + "description": "the id for this payment attempt" + }, + "parts": { + "type": "u32", + "description": "how many attempts this took" + }, + "amount_msat": { + "type": "msat", + "description": "amount the recipient received" + }, + "amount_sent_msat": { + "type": "msat", + "description": "total amount we sent including fees (for completed payments only)" + }, + "status": { + "type": "string", + "enum": [ + "complete", + "pending", + "failed" + ], + "description": "status of payment" + }, + "destination": { + "type": "pubkey", + "description": "the final destination of the payment" + }, + "notes": { + "type": "array", + "description": "a list of messages for debugging purposes", + "items": { + "type": "string", + "description": "a message generated by renepay" + } + } + } + } + } + } +} diff --git a/doc/schemas/splice_init.request.json b/doc/schemas/splice_init.request.json new file mode 100644 index 000000000000..ed01150df351 --- /dev/null +++ b/doc/schemas/splice_init.request.json @@ -0,0 +1,32 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "required": [ + "channel_id", + "relative_amount" + ], + "added": "v23.08", + "properties": { + "channel_id": { + "type": "string", + "description": "the channel id of the channel to be spliced" + }, + "relative_amount": { + "type": "integer", + "description": "a positive or negative amount of satoshis to add or subtract from the channel" + }, + "initialpsbt": { + "type": "string", + "description": "the (optional) base 64 encoded PSBT to begin with. If not specified, one will be generated automatically" + }, + "feerate_per_kw": { + "type": "u32", + "description": "the miner fee we promise our peer to pay for our side of the splice transaction. It is calculated by `feerate_per_kw` * our_bytes_in_splice_tx / 1000" + }, + "force_feerate": { + "type": "boolean", + "description": "By default splices will fail if the fee provided looks too high. This is to protect against accidentally setting your fee higher than intended. Set `force_feerate` to true to skip this saftey check" + } + } +} diff --git a/doc/schemas/splice_init.schema.json b/doc/schemas/splice_init.schema.json new file mode 100644 index 000000000000..0551f7e8180b --- /dev/null +++ b/doc/schemas/splice_init.schema.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "required": [ + "psbt" + ], + "added": "v23.08", + "properties": { + "psbt": { + "type": "string", + "description": "the (incomplete) PSBT of the splice transaction" + } + } +} diff --git a/doc/schemas/splice_signed.request.json b/doc/schemas/splice_signed.request.json new file mode 100644 index 000000000000..8e6b8dec2515 --- /dev/null +++ b/doc/schemas/splice_signed.request.json @@ -0,0 +1,24 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "required": [ + "channel_id", + "psbt" + ], + "added": "v23.08", + "properties": { + "channel_id": { + "type": "string", + "description": "the channel id of the channel to be spliced" + }, + "psbt": { + "type": "string", + "description": "the final version of the psbt to complete the splice with" + }, + "sign_first": { + "type": "boolean", + "description": "a flag that makes our node offer the final splice signature first (defaults to false). When false, the node will calculate who should sign first based off who is adding inputting the least sats to the splice as per spec" + } + } +} diff --git a/doc/schemas/splice_signed.schema.json b/doc/schemas/splice_signed.schema.json new file mode 100644 index 000000000000..0457c2d346d4 --- /dev/null +++ b/doc/schemas/splice_signed.schema.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "required": [ + "tx", + "txid" + ], + "added": "v23.08", + "properties": { + "tx": { + "type": "hex", + "description": "The hex representation of the final transaction that is published" + }, + "txid": { + "type": "txid", + "description": "The txid is of the final transaction" + } + } +} diff --git a/doc/schemas/splice_update.request.json b/doc/schemas/splice_update.request.json new file mode 100644 index 000000000000..08bf814a49a8 --- /dev/null +++ b/doc/schemas/splice_update.request.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "required": [ + "channel_id", + "psbt" + ], + "added": "v23.08", + "properties": { + "channel_id": { + "type": "string", + "description": "the channel id of the channel to be spliced" + }, + "psbt": { + "type": "string", + "description": "the (optional) base 64 encoded PSBT to begin with. If not specified, one will be generated automatically" + } + } +} diff --git a/doc/schemas/splice_update.schema.json b/doc/schemas/splice_update.schema.json new file mode 100644 index 000000000000..96e04edac6d1 --- /dev/null +++ b/doc/schemas/splice_update.schema.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": false, + "required": [ + "psbt", + "commitments_secured" + ], + "added": "v23.08", + "properties": { + "psbt": { + "type": "string", + "description": "the (incomplete) PSBT of the splice transaction" + }, + "commitments_secured": { + "type": "boolean", + "description": "whether or not the commitments were secured" + } + } +} diff --git a/gossipd/gossip_store.c b/gossipd/gossip_store.c index d16866e8f9ff..248fd81d3242 100644 --- a/gossipd/gossip_store.c +++ b/gossipd/gossip_store.c @@ -926,8 +926,9 @@ u32 gossip_store_load(struct routing_state *rstate, struct gossip_store *gs) if (!routing_add_node_announcement(rstate, take(msg), gs->len, NULL, NULL, spam)) { - bad = "Bad node_announcement"; - goto badmsg; + /* FIXME: This has been reported: routing.c + * has logged, so ignore. */ + break; } stats[2]++; break; diff --git a/hsmd/Makefile b/hsmd/Makefile index 40f74edb5389..c50c7a4e0cc4 100644 --- a/hsmd/Makefile +++ b/hsmd/Makefile @@ -4,7 +4,7 @@ HSMD_SRC := hsmd/hsmd.c \ hsmd/hsmd_wiregen.c \ hsmd/libhsmd.c -HSMD_HEADERS := hsmd/hsmd_wiregen.h +HSMD_HEADERS := hsmd/hsmd_wiregen.h hsmd/permissions.h HSMD_OBJS := $(HSMD_SRC:.c=.o) $(HSMD_OBJS): $(HSMD_HEADERS) diff --git a/hsmd/capabilities.h b/hsmd/capabilities.h deleted file mode 100644 index e538ed35b3f1..000000000000 --- a/hsmd/capabilities.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef LIGHTNING_HSMD_CAPABILITIES_H -#define LIGHTNING_HSMD_CAPABILITIES_H -#include "config.h" - -#define HSM_CAP_ECDH 1 -#define HSM_CAP_SIGN_GOSSIP 2 -#define HSM_CAP_SIGN_ONCHAIN_TX 4 -#define HSM_CAP_COMMITMENT_POINT 8 -#define HSM_CAP_SIGN_REMOTE_TX 16 -#define HSM_CAP_SIGN_CLOSING_TX 32 -#define HSM_CAP_SIGN_WILL_FUND_OFFER 64 - -#define HSM_CAP_MASTER 1024 -#endif /* LIGHTNING_HSMD_CAPABILITIES_H */ diff --git a/hsmd/hsmd.c b/hsmd/hsmd.c index 73119731d8e5..1af682ffe8a3 100644 --- a/hsmd/hsmd.c +++ b/hsmd/hsmd.c @@ -22,9 +22,9 @@ #include #include #include -#include /*~ _wiregen files are autogenerated by tools/generate-wire.py */ #include +#include #include #include #include @@ -754,7 +754,7 @@ int main(int argc, char *argv[]) uintmap_init(&clients); master = new_client(NULL, NULL, NULL, 0, - HSM_CAP_MASTER | HSM_CAP_SIGN_GOSSIP | HSM_CAP_ECDH, + HSM_PERM_MASTER | HSM_PERM_SIGN_GOSSIP | HSM_PERM_ECDH, REQ_FD); /* First client == lightningd. */ diff --git a/hsmd/hsmd_wire.csv b/hsmd/hsmd_wire.csv index 66179b3c9f27..2eefd6962cd8 100644 --- a/hsmd/hsmd_wire.csv +++ b/hsmd/hsmd_wire.csv @@ -46,13 +46,13 @@ msgdata,hsmd_new_channel,dbid,u64, # No value returned. msgtype,hsmd_new_channel_reply,130 -# Get a new HSM FD, with the specified capabilities +# Get a new HSM FD, with the specified permissions msgtype,hsmd_client_hsmfd,9 # Which identity to use for requests msgdata,hsmd_client_hsmfd,id,node_id, # Database id for this client, if any. msgdata,hsmd_client_hsmfd,dbid,u64, -msgdata,hsmd_client_hsmfd,capabilities,u64, +msgdata,hsmd_client_hsmfd,permissions,u64, # No content, just an fd. msgtype,hsmd_client_hsmfd_reply,109 diff --git a/hsmd/libhsmd.c b/hsmd/libhsmd.c index b157f4f250c3..1eb0e5b7cf2a 100644 --- a/hsmd/libhsmd.c +++ b/hsmd/libhsmd.c @@ -8,8 +8,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -79,38 +79,38 @@ bool hsmd_check_client_capabilities(struct hsmd_client *client, */ switch (t) { case WIRE_HSMD_ECDH_REQ: - return (client->capabilities & HSM_CAP_ECDH) != 0; + return (client->capabilities & HSM_PERM_ECDH) != 0; case WIRE_HSMD_CANNOUNCEMENT_SIG_REQ: case WIRE_HSMD_CUPDATE_SIG_REQ: case WIRE_HSMD_NODE_ANNOUNCEMENT_SIG_REQ: - return (client->capabilities & HSM_CAP_SIGN_GOSSIP) != 0; + return (client->capabilities & HSM_PERM_SIGN_GOSSIP) != 0; case WIRE_HSMD_SIGN_DELAYED_PAYMENT_TO_US: case WIRE_HSMD_SIGN_REMOTE_HTLC_TO_US: case WIRE_HSMD_SIGN_PENALTY_TO_US: case WIRE_HSMD_SIGN_LOCAL_HTLC_TX: - return (client->capabilities & HSM_CAP_SIGN_ONCHAIN_TX) != 0; + return (client->capabilities & HSM_PERM_SIGN_ONCHAIN_TX) != 0; case WIRE_HSMD_GET_PER_COMMITMENT_POINT: case WIRE_HSMD_CHECK_FUTURE_SECRET: case WIRE_HSMD_READY_CHANNEL: - return (client->capabilities & HSM_CAP_COMMITMENT_POINT) != 0; + return (client->capabilities & HSM_PERM_COMMITMENT_POINT) != 0; case WIRE_HSMD_SIGN_REMOTE_COMMITMENT_TX: case WIRE_HSMD_SIGN_REMOTE_HTLC_TX: case WIRE_HSMD_VALIDATE_COMMITMENT_TX: case WIRE_HSMD_VALIDATE_REVOCATION: - return (client->capabilities & HSM_CAP_SIGN_REMOTE_TX) != 0; + return (client->capabilities & HSM_PERM_SIGN_REMOTE_TX) != 0; case WIRE_HSMD_SIGN_MUTUAL_CLOSE_TX: - return (client->capabilities & HSM_CAP_SIGN_CLOSING_TX) != 0; + return (client->capabilities & HSM_PERM_SIGN_CLOSING_TX) != 0; case WIRE_HSMD_SIGN_SPLICE_TX: - return (client->capabilities & WIRE_HSMD_SIGN_SPLICE_TX) != 0; + return (client->capabilities & HSM_PERM_SIGN_SPLICE_TX) != 0; case WIRE_HSMD_SIGN_OPTION_WILL_FUND_OFFER: - return (client->capabilities & HSM_CAP_SIGN_WILL_FUND_OFFER) != 0; + return (client->capabilities & HSM_PERM_SIGN_WILL_FUND_OFFER) != 0; case WIRE_HSMD_INIT: case WIRE_HSMD_NEW_CHANNEL: @@ -133,7 +133,7 @@ bool hsmd_check_client_capabilities(struct hsmd_client *client, case WIRE_HSMD_SIGN_ANY_LOCAL_HTLC_TX: case WIRE_HSMD_SIGN_ANCHORSPEND: case WIRE_HSMD_SIGN_HTLC_TX_MINGLE: - return (client->capabilities & HSM_CAP_MASTER) != 0; + return (client->capabilities & HSM_PERM_MASTER) != 0; /*~ These are messages sent by the HSM so we should never receive them. */ /* FIXME: Since we autogenerate these, we should really generate separate diff --git a/hsmd/permissions.h b/hsmd/permissions.h new file mode 100644 index 000000000000..afc396c2246a --- /dev/null +++ b/hsmd/permissions.h @@ -0,0 +1,15 @@ +#ifndef LIGHTNING_HSMD_PERMISSIONS_H +#define LIGHTNING_HSMD_PERMISSIONS_H +#include "config.h" + +#define HSM_PERM_ECDH 1 +#define HSM_PERM_SIGN_GOSSIP 2 +#define HSM_PERM_SIGN_ONCHAIN_TX 4 +#define HSM_PERM_COMMITMENT_POINT 8 +#define HSM_PERM_SIGN_REMOTE_TX 16 +#define HSM_PERM_SIGN_CLOSING_TX 32 +#define HSM_PERM_SIGN_WILL_FUND_OFFER 64 +#define HSM_PERM_SIGN_SPLICE_TX 128 + +#define HSM_PERM_MASTER 1024 +#endif /* LIGHTNING_HSMD_PERMISSIONS_H */ diff --git a/lightningd/channel_control.c b/lightningd/channel_control.c index f3c6bc633c9b..ab698564b068 100644 --- a/lightningd/channel_control.c +++ b/lightningd/channel_control.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include @@ -1264,12 +1264,13 @@ bool peer_start_channeld(struct channel *channel, hsmfd = hsm_get_client_fd(ld, &channel->peer->id, channel->dbid, - HSM_CAP_SIGN_GOSSIP - | HSM_CAP_ECDH - | HSM_CAP_COMMITMENT_POINT - | HSM_CAP_SIGN_REMOTE_TX - | HSM_CAP_SIGN_ONCHAIN_TX - | HSM_CAP_SIGN_CLOSING_TX); + HSM_PERM_SIGN_GOSSIP + | HSM_PERM_ECDH + | HSM_PERM_COMMITMENT_POINT + | HSM_PERM_SIGN_REMOTE_TX + | HSM_PERM_SIGN_ONCHAIN_TX + | HSM_PERM_SIGN_CLOSING_TX + | HSM_PERM_SIGN_SPLICE_TX); channel_set_owner(channel, new_channel_subd(channel, ld, @@ -1868,7 +1869,7 @@ static struct command_result *param_channel_for_splice(struct command *cmd, if (!feature_negotiated(cmd->ld->our_features, (*channel)->peer->their_features, - OPT_SPLICE)) + OPT_EXPERIMENTAL_SPLICE)) return command_fail(cmd, SPLICE_NOT_SUPPORTED, "splicing not supported"); diff --git a/lightningd/closing_control.c b/lightningd/closing_control.c index 53732c0c66a1..93d2602fd25e 100644 --- a/lightningd/closing_control.c +++ b/lightningd/closing_control.c @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include @@ -379,8 +379,8 @@ void peer_start_closingd(struct channel *channel, struct peer_fd *peer_fd) } hsmfd = hsm_get_client_fd(ld, &channel->peer->id, channel->dbid, - HSM_CAP_SIGN_CLOSING_TX - | HSM_CAP_COMMITMENT_POINT); + HSM_PERM_SIGN_CLOSING_TX + | HSM_PERM_COMMITMENT_POINT); channel_set_owner(channel, new_channel_subd(channel, ld, diff --git a/lightningd/configs.c b/lightningd/configs.c index 65b325a221fa..564dde853b50 100644 --- a/lightningd/configs.c +++ b/lightningd/configs.c @@ -504,7 +504,8 @@ static bool configfile_replace_var(struct lightningd *ld, contents = tal_strjoin(tmpctx, take(lines), "\n", STR_TRAIL); if (!write_all(outfd, contents, strlen(contents))) fatal("Writing %s: %s", template, strerror(errno)); - fdatasync(outfd); + if (fsync(outfd) != 0) + fatal("Syncing %s: %s", template, strerror(errno)); if (rename(template, cv->file) != 0) fatal("Renaming %s over %s: %s", diff --git a/lightningd/connect_control.c b/lightningd/connect_control.c index 290bc1fd727c..ae253c5a4939 100644 --- a/lightningd/connect_control.c +++ b/lightningd/connect_control.c @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include #include @@ -661,7 +661,7 @@ int connectd_init(struct lightningd *ld) if (socketpair(AF_LOCAL, SOCK_STREAM, 0, fds) != 0) fatal("Could not socketpair for connectd<->gossipd"); - hsmfd = hsm_get_global_fd(ld, HSM_CAP_ECDH); + hsmfd = hsm_get_global_fd(ld, HSM_PERM_ECDH); ld->connectd = new_global_subd(ld, "lightning_connectd", connectd_wire_name, connectd_msg, diff --git a/lightningd/dual_open_control.c b/lightningd/dual_open_control.c index eb0f9b7927e7..6f70dd4362bb 100644 --- a/lightningd/dual_open_control.c +++ b/lightningd/dual_open_control.c @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -3695,9 +3695,9 @@ bool peer_start_dualopend(struct peer *peer, const u8 *msg; hsmfd = hsm_get_client_fd(peer->ld, &peer->id, channel->unsaved_dbid, - HSM_CAP_COMMITMENT_POINT - | HSM_CAP_SIGN_REMOTE_TX - | HSM_CAP_SIGN_WILL_FUND_OFFER); + HSM_PERM_COMMITMENT_POINT + | HSM_PERM_SIGN_REMOTE_TX + | HSM_PERM_SIGN_WILL_FUND_OFFER); channel->owner = new_channel_subd(channel, peer->ld, @@ -3767,9 +3767,9 @@ bool peer_restart_dualopend(struct peer *peer, return peer_start_dualopend(peer, peer_fd, channel); hsmfd = hsm_get_client_fd(peer->ld, &peer->id, channel->dbid, - HSM_CAP_COMMITMENT_POINT - | HSM_CAP_SIGN_REMOTE_TX - | HSM_CAP_SIGN_WILL_FUND_OFFER); + HSM_PERM_COMMITMENT_POINT + | HSM_PERM_SIGN_REMOTE_TX + | HSM_PERM_SIGN_WILL_FUND_OFFER); channel_set_owner(channel, new_channel_subd(channel, peer->ld, diff --git a/lightningd/gossip_control.c b/lightningd/gossip_control.c index 7b2779d490cb..bc9b894473da 100644 --- a/lightningd/gossip_control.c +++ b/lightningd/gossip_control.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include @@ -270,7 +270,7 @@ void gossip_init(struct lightningd *ld, int connectd_fd) int hsmfd; void *ret; - hsmfd = hsm_get_global_fd(ld, HSM_CAP_ECDH|HSM_CAP_SIGN_GOSSIP); + hsmfd = hsm_get_global_fd(ld, HSM_PERM_ECDH|HSM_PERM_SIGN_GOSSIP); ld->gossip = new_global_subd(ld, "lightning_gossipd", gossipd_wire_name, gossip_msg, diff --git a/lightningd/hsm_control.c b/lightningd/hsm_control.c index c4e660647d2f..bd703c75c608 100644 --- a/lightningd/hsm_control.c +++ b/lightningd/hsm_control.c @@ -24,12 +24,12 @@ static int hsm_get_fd(struct lightningd *ld, const struct node_id *id, u64 dbid, - int capabilities) + u64 permissions) { int hsm_fd; const u8 *msg; - msg = towire_hsmd_client_hsmfd(NULL, id, dbid, capabilities); + msg = towire_hsmd_client_hsmfd(NULL, id, dbid, permissions); msg = hsm_sync_req(tmpctx, ld, take(msg)); if (!fromwire_hsmd_client_hsmfd_reply(msg)) fatal("Bad reply from HSM: %s", tal_hex(tmpctx, msg)); @@ -43,16 +43,16 @@ static int hsm_get_fd(struct lightningd *ld, int hsm_get_client_fd(struct lightningd *ld, const struct node_id *id, u64 dbid, - int capabilities) + u64 permissions) { assert(dbid); - return hsm_get_fd(ld, id, dbid, capabilities); + return hsm_get_fd(ld, id, dbid, permissions); } -int hsm_get_global_fd(struct lightningd *ld, int capabilities) +int hsm_get_global_fd(struct lightningd *ld, u64 permissions) { - return hsm_get_fd(ld, &ld->id, 0, capabilities); + return hsm_get_fd(ld, &ld->id, 0, permissions); } static unsigned int hsm_msg(struct subd *hsmd, diff --git a/lightningd/hsm_control.h b/lightningd/hsm_control.h index 9a8fcc01bf70..355f8bd51e45 100644 --- a/lightningd/hsm_control.h +++ b/lightningd/hsm_control.h @@ -11,10 +11,10 @@ struct ext_key; int hsm_get_client_fd(struct lightningd *ld, const struct node_id *id, u64 dbid, - int capabilities); + u64 permissions); /* Ask HSM for an fd for a global subdaemon to use (gossipd, connectd) */ -int hsm_get_global_fd(struct lightningd *ld, int capabilities); +int hsm_get_global_fd(struct lightningd *ld, u64 permissions); /* Is this capability supported by the HSM? (So far, always a message * number) */ diff --git a/lightningd/invoice.c b/lightningd/invoice.c index 512edde957a0..cc7580a4f4aa 100644 --- a/lightningd/invoice.c +++ b/lightningd/invoice.c @@ -1852,7 +1852,7 @@ static struct command_result *json_preapproveinvoice(struct command *cmd, if (!param(cmd, buffer, params, /* FIXME: parameter should be invstring now */ - p_req("bolt11", param_string, &invstring), + p_req("bolt11", param_invstring, &invstring), NULL)) return command_param_failed(); diff --git a/lightningd/onchain_control.c b/lightningd/onchain_control.c index edb143cd1d10..1982ba6b1cf6 100644 --- a/lightningd/onchain_control.c +++ b/lightningd/onchain_control.c @@ -9,8 +9,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -1553,8 +1553,8 @@ enum watch_result onchaind_funding_spent(struct channel *channel, hsmfd = hsm_get_client_fd(ld, &channel->peer->id, channel->dbid, - HSM_CAP_SIGN_ONCHAIN_TX - | HSM_CAP_COMMITMENT_POINT); + HSM_PERM_SIGN_ONCHAIN_TX + | HSM_PERM_COMMITMENT_POINT); channel_set_owner(channel, new_channel_subd(channel, ld, "lightning_onchaind", diff --git a/lightningd/opening_control.c b/lightningd/opening_control.c index 180a9067cb5d..85f9c9c6ecf0 100644 --- a/lightningd/opening_control.c +++ b/lightningd/opening_control.c @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include @@ -933,8 +933,8 @@ bool peer_start_openingd(struct peer *peer, struct peer_fd *peer_fd) assert(!uc->open_daemon); hsmfd = hsm_get_client_fd(peer->ld, &uc->peer->id, uc->dbid, - HSM_CAP_COMMITMENT_POINT - | HSM_CAP_SIGN_REMOTE_TX); + HSM_PERM_COMMITMENT_POINT + | HSM_PERM_SIGN_REMOTE_TX); uc->open_daemon = new_channel_subd(peer, peer->ld, "lightning_openingd", diff --git a/lightningd/options.c b/lightningd/options.c index e1a30d3e6a60..856a1086e521 100644 --- a/lightningd/options.c +++ b/lightningd/options.c @@ -1196,7 +1196,7 @@ static char *opt_set_splicing(struct lightningd *ld) OPTIONAL_FEATURE(OPT_QUIESCE)))); feature_set_or(ld->our_features, take(feature_set_for_feature(NULL, - OPTIONAL_FEATURE(OPT_SPLICE)))); + OPTIONAL_FEATURE(OPT_EXPERIMENTAL_SPLICE)))); return NULL; } @@ -1911,7 +1911,7 @@ void add_config_deprecated(struct lightningd *ld, json_add_bool(response, name0, feature_offered(ld->our_features ->bits[INIT_FEATURE], - OPT_SPLICE)); + OPT_EXPERIMENTAL_SPLICE)); } else if (opt->cb == (void *)opt_set_onion_messages) { json_add_bool(response, name0, feature_offered(ld->our_features diff --git a/lightningd/pay.c b/lightningd/pay.c index 0dd517317f21..e74d92533f51 100644 --- a/lightningd/pay.c +++ b/lightningd/pay.c @@ -1333,7 +1333,7 @@ static struct command_result *json_sendonion(struct command *cmd, p_opt("shared_secrets", param_secrets_array, &path_secrets), p_opt_def("partid", param_u64, &partid, 0), /* FIXME: parameter should be invstring now */ - p_opt("bolt11", param_string, &invstring), + p_opt("bolt11", param_invstring, &invstring), p_opt_def("amount_msat|msatoshi", param_msat, &msat, AMOUNT_MSAT(0)), p_opt("destination", param_node_id, &destination), p_opt("localinvreqid", param_sha256, &local_invreq_id), @@ -1711,7 +1711,7 @@ static struct command_result *json_listsendpays(struct command *cmd, if (!param(cmd, buffer, params, /* FIXME: parameter should be invstring now */ - p_opt("bolt11", param_string, &invstring), + p_opt("bolt11", param_invstring, &invstring), p_opt("payment_hash", param_sha256, &rhash), p_opt("status", param_payment_status, &status), NULL)) diff --git a/lightningd/peer_htlcs.c b/lightningd/peer_htlcs.c index 0688099cb129..242f29de9cb3 100644 --- a/lightningd/peer_htlcs.c +++ b/lightningd/peer_htlcs.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -591,6 +592,14 @@ static void htlc_offer_timeout(struct htlc_out *out) tal_free(channel->owner); channel_set_billboard(channel, false, "Adding HTLC timed out: killed connection"); + + /* Force a disconnect in case the issue is with TCP */ + if (channel->peer->ld->connectd) { + const struct peer *peer = channel->peer; + subd_send_msg(peer->ld->connectd, + take(towire_connectd_discard_peer(NULL, &peer->id, + peer->connectd_counter))); + } } /* Returns failmsg, or NULL on success. */ diff --git a/lightningd/plugin.c b/lightningd/plugin.c index 3e7aa88fe475..8734dc6da24e 100644 --- a/lightningd/plugin.c +++ b/lightningd/plugin.c @@ -2340,7 +2340,8 @@ void plugins_set_builtin_plugins_dir(struct plugins *plugins, take(path_join(NULL, dir, list_of_builtin_plugins[i])), NULL, - /* important = */ true, + /* important = */ + !streq(list_of_builtin_plugins[i], "cln-renepay"), NULL, NULL); } diff --git a/plugins/bcli.c b/plugins/bcli.c index 759a21010579..d7bd4fac809a 100644 --- a/plugins/bcli.c +++ b/plugins/bcli.c @@ -298,16 +298,16 @@ static void next_bcli(enum bitcoind_prio prio) bcli->pid = pipecmdarr(&in, &bcli->fd, &bcli->fd, cast_const2(char **, bcli->args)); + if (bcli->pid < 0) + plugin_err(bcli->cmd->plugin, "%s exec failed: %s", + bcli->args[0], strerror(errno)); + if (bitcoind->rpcpass) write_all(in, bitcoind->rpcpass, strlen(bitcoind->rpcpass)); close(in); - if (bcli->pid < 0) - plugin_err(bcli->cmd->plugin, "%s exec failed: %s", - bcli->args[0], strerror(errno)); - bcli->start = time_now(); bitcoind->num_requests[prio]++; @@ -918,7 +918,7 @@ static void parse_getnetworkinfo_result(struct plugin *p, const char *buf) { const jsmntok_t *result; bool tx_relay; - u32 min_version = 160000; + u32 min_version = 220000; const char *err; result = json_parse_simple(NULL, buf, strlen(buf)); diff --git a/plugins/renepay/pay.c b/plugins/renepay/pay.c index 27888cae471a..ff11721447df 100644 --- a/plugins/renepay/pay.c +++ b/plugins/renepay/pay.c @@ -625,7 +625,7 @@ static struct command_result *json_paystatus(struct command *cmd, struct payment *p; if (!param(cmd, buf, params, - p_opt("invstring", param_string, &invstring), + p_opt("invstring", param_invstring, &invstring), NULL)) return command_param_failed(); @@ -940,7 +940,7 @@ static struct command_result *json_pay(struct command *cmd, #endif if (!param(cmd, buf, params, - p_req("invstring", param_string, &invstr), + p_req("invstring", param_invstring, &invstr), p_opt("amount_msat", param_msat, &msat), p_opt("maxfee", param_msat, &maxfee), diff --git a/plugins/renepay/test/run-payflow_map.c b/plugins/renepay/test/run-payflow_map.c index e98eea1914b1..9627ef810ecc 100644 --- a/plugins/renepay/test/run-payflow_map.c +++ b/plugins/renepay/test/run-payflow_map.c @@ -69,8 +69,8 @@ static void valgrind_ok1(void) printf("key1 = %s\n",fmt_payflow_key(local_ctx,&p1->key)); printf("key1 = %s\n",fmt_payflow_key(local_ctx,&p2->key)); - printf("key hash 1 = %ld\n",payflow_key_hash(p1->key)); - printf("key hash 2 = %ld\n",payflow_key_hash(p2->key)); + printf("key hash 1 = %zu\n",payflow_key_hash(p1->key)); + printf("key hash 2 = %zu\n",payflow_key_hash(p2->key)); payflow_map_add(map,p1); tal_add_destructor2(p1,destroy_payflow,map); payflow_map_add(map,p2); tal_add_destructor2(p2,destroy_payflow,map); diff --git a/plugins/src/lib.rs b/plugins/src/lib.rs index c3d58bcd6470..1db632caa0cf 100644 --- a/plugins/src/lib.rs +++ b/plugins/src/lib.rs @@ -104,7 +104,7 @@ where impl Builder where O: Send + AsyncWrite + Unpin + 'static, - S: Clone + Sync + Send + Clone + 'static, + S: Clone + Sync + Send + 'static, I: AsyncRead + Send + Unpin + 'static, { pub fn new(input: I, output: O) -> Self { @@ -146,7 +146,7 @@ where where C: Send + Sync + 'static, C: Fn(Plugin, Request) -> F + 'static, - F: Future> + Send + Sync + 'static, + F: Future> + Send + 'static, { self.subscriptions.insert( topic.to_string(), @@ -162,7 +162,7 @@ where where C: Send + Sync + 'static, C: Fn(Plugin, Request) -> F + 'static, - F: Future + Send + Sync + 'static, + F: Future + Send + 'static, { self.hooks.insert( hookname.to_string(), @@ -179,7 +179,7 @@ where where C: Send + Sync + 'static, C: Fn(Plugin, Request) -> F + 'static, - F: Future + Send + Sync + 'static, + F: Future + Send + 'static, { self.rpcmethods.insert( name.to_string(), @@ -504,7 +504,7 @@ where impl PluginDriver where - S: Send + Clone + Sync, + S: Send + Clone, { /// Run the plugin until we get a shutdown command. async fn run( diff --git a/tests/test_closing.py b/tests/test_closing.py index aca67f264c4e..7c6be181f522 100644 --- a/tests/test_closing.py +++ b/tests/test_closing.py @@ -3677,6 +3677,10 @@ def test_onchain_close_upstream(node_factory, bitcoind): with pytest.raises(RpcError, match=r'WIRE_TEMPORARY_CHANNEL_FAILURE \(reply from remote\)'): l1.rpc.waitsendpay(ph2, timeout=TIMEOUT) + # An important response to the timeout is to force a reconnect, + # since the problem may be TCP connectivity. + assert only_one(l2.rpc.listpeerchannels(l3.info['id'])['channels'])['peer_connected'] is False + # Make close unilaterally. l3.rpc.close(l2.info['id'], 1) diff --git a/tests/test_pay.py b/tests/test_pay.py index 4122da3e2cf3..b16a2d7b088e 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -5380,3 +5380,10 @@ def test_strip_lightning_suffix_from_inv(node_factory): listpays = l1.rpc.listpays()["pays"] assert len(listpays) == 3, f"the list pays is bigger than what we expected {listpays}" assert listpays[2]['bolt11'] == inv, f"list pays contains a different invoice, expected is {inv} but we get {listpays[0]['bolt11']}" + + +def test_listsendpays_crash(node_factory): + l1 = node_factory.get_node() + + inv = l1.rpc.invoice(40, "inv", "inv")["bolt11"] + l1.rpc.listsendpays('lightning:' + inv) diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 16344423221d..c5549edd7d42 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -4255,3 +4255,21 @@ def test_all_subscription(node_factory, directory): # shutdown and connect are subscribed before the wildcard, so is handled by that handler assert not l2.daemon.is_in_log(f'.*test_libplugin: all: shutdown.*') assert not l2.daemon.is_in_log(f'.*test_libplugin: all: connect.*') + + +def test_renepay_not_important(node_factory): + # I mean, it's *important*, it's just not "mission-critical" just yet! + l1 = node_factory.get_node(options={'allow-deprecated-apis': True}) + + assert not any([p['name'] == 'cln-renepay' for p in l1.rpc.listconfigs()['important-plugins']]) + assert [p['name'] for p in l1.rpc.listconfigs()['plugins'] if p['name'] == 'cln-renepay'] == ['cln-renepay'] + + # We can kill it without cln dying. + line = l1.daemon.is_in_log(r'.*started\([0-9]*\).*plugins/cln-renepay') + pidstr = re.search(r'.*started\(([0-9]*)\).*plugins/cln-renepay', line).group(1) + os.kill(int(pidstr), signal.SIGKILL) + l1.daemon.wait_for_log('plugin-cln-renepay: Killing plugin: exited during normal operation') + + # But we don't shut down, and we can restrart. + assert [p['name'] for p in l1.rpc.listconfigs()['plugins'] if p['name'] == 'cln-renepay'] == [] + l1.rpc.plugin_start(os.path.join(os.getcwd(), 'plugins/cln-renepay')) diff --git a/tests/test_splicing.py b/tests/test_splicing.py index 614c0f52257f..fb675afcc048 100644 --- a/tests/test_splicing.py +++ b/tests/test_splicing.py @@ -1,16 +1,22 @@ from fixtures import * # noqa: F401,F403 -import os +from utils import TEST_NETWORK import pytest import unittest -@unittest.skipIf(os.environ.get("EXPERIMENTAL_SPLICING", '0') != '1', "Need experimental splicing turned on") +@pytest.mark.openchannel('v1') @pytest.mark.openchannel('v2') +@unittest.skipIf(TEST_NETWORK != 'regtest', 'elementsd doesnt yet support PSBT features we need') def test_splice(node_factory, bitcoind): - l1, l2 = node_factory.line_graph(2, fundamount=1000000, wait_for_announce=True) + l1, l2 = node_factory.line_graph(2, fundamount=1000000, wait_for_announce=True, opts={'experimental-splicing': None}) + # get channel id chan_id = l1.get_channel_id(l2) + + channels = l1.rpc.listpeerchannels()['channels'] + original_scid = channels[0].get('short_channel_id') + # add extra sats to pay fee funds_result = l1.rpc.fundpsbt("109000sat", "slow", 166, excess_as_change=True) @@ -26,10 +32,20 @@ def test_splice(node_factory, bitcoind): assert len(list(mempool.keys())) == 1 assert result['txid'] in list(mempool.keys()) - bitcoind.generate_block(6, wait_for_mempool=1) + bitcoind.generate_block(9, wait_for_mempool=1) l2.daemon.wait_for_log(r'CHANNELD_AWAITING_SPLICE to CHANNELD_NORMAL') l1.daemon.wait_for_log(r'CHANNELD_AWAITING_SPLICE to CHANNELD_NORMAL') inv = l2.rpc.invoice(10**2, '3', 'no_3') l1.rpc.pay(inv['bolt11']) + + peer_channels = l1.rpc.listpeerchannels()['channels'] + assert len(peer_channels) > 0 + + new_scid = peer_channels[0].get('short_channel_id') + + assert new_scid != original_scid + all_channels = l1.rpc.listchannels()['channels'] + print("ALL CHANNELS: {}".format(all_channels)) + assert len(all_channels) > 0 \ No newline at end of file diff --git a/tests/utils.py b/tests/utils.py index 789b7b8026a1..3063b89aff4c 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -44,7 +44,7 @@ def expected_peer_features(wumbo_channels=False, extra=[]): features += [29] if EXPERIMENTAL_SPLICING: features += [35] # option_quiesce - features += [63] # option_splice + features += [163] # option_experimental_splice return hex_bits(features + extra) @@ -60,7 +60,7 @@ def expected_node_features(wumbo_channels=False, extra=[]): features += [29] if EXPERIMENTAL_SPLICING: features += [35] # option_quiesce - features += [63] # option_splice + features += [163] # option_experimental_splice return hex_bits(features + extra)