diff --git a/.codespellignore b/.codespellignore new file mode 100644 index 000000000000..972d0b2596ab --- /dev/null +++ b/.codespellignore @@ -0,0 +1,3 @@ +connectd +crate +mut diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 000000000000..092dcccfc418 --- /dev/null +++ b/.codespellrc @@ -0,0 +1,4 @@ +[codespell] + +count = true +ignore-words = .codespellignore diff --git a/.gitattributes b/.gitattributes index 39273407a78f..c7a10d30adb3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -17,4 +17,4 @@ statements_gettextgen.po linguist-generated=true cln-grpc/proto/node.proto -text -diff linguist-generated=true cln-grpc/src/convert.rs -text -diff linguist-generated=true cln-rpc/src/model.rs -text -diff linguist-generated=true -contrib/pyln-testing/pyln/testing/node_pb2.py -text -diff linguist-generated=true +contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py -text -diff linguist-generated=true diff --git a/.github/scripts/install-bitcoind.sh b/.github/scripts/install-bitcoind.sh index 842c6ccd92a3..edf73474ebc6 100755 --- a/.github/scripts/install-bitcoind.sh +++ b/.github/scripts/install-bitcoind.sh @@ -1,4 +1,6 @@ #!/bin/sh +# If an argument is specified, that dir is checked before downloading, +# and updated after successful install. set -e @@ -18,13 +20,23 @@ cd /tmp/ # testing against `bitcoind` but still believe that we ran against # `elementsd`. if [ "$TEST_NETWORK" = "liquid-regtest" ]; then - wget "https://github.com/ElementsProject/elements/releases/download/elements-${ELEMENTS_VERSION}/${EFILENAME}" + if [ -f "$1/${EFILENAME}" ]; then + cp "$1/${EFILENAME}" . + else + wget "https://github.com/ElementsProject/elements/releases/download/elements-${ELEMENTS_VERSION}/${EFILENAME}" + fi tar -xf "${EFILENAME}" + [ "$1" = "" ] || cp "${EFILENAME}" "$1"/ sudo mv "${EDIRNAME}"/bin/* "/usr/local/bin" rm -rf "${EFILENAME}" "${EDIRNAME}" else - wget "https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/${FILENAME}" + if [ -f "$1/${FILENAME}" ]; then + cp "$1/${FILENAME}" . + else + wget "https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/${FILENAME}" + fi tar -xf "${FILENAME}" + [ "$1" = "" ] || cp "${FILENAME}" "$1"/ sudo mv "${DIRNAME}"/bin/* "/usr/local/bin" rm -rf "${FILENAME}" "${DIRNAME}" fi diff --git a/.github/scripts/setup.sh b/.github/scripts/setup.sh index 2409cdf0d543..291c4c074c0f 100755 --- a/.github/scripts/setup.sh +++ b/.github/scripts/setup.sh @@ -3,10 +3,19 @@ set -e export DEBIAN_FRONTEND=noninteractive export RUST_VERSION=stable -sudo useradd -ms /bin/bash tester -sudo apt-get update -qq +sudo mkdir -p /var/cache/apt/archives +mkdir -p ~/ci-cache/apt/ +sudo cp -a ~/ci-cache/apt/. /var/cache/apt/archives/ 2>/dev/null || true -sudo apt-get -qq install --no-install-recommends --allow-unauthenticated -yy \ +sudo apt-get update + +# Install eatmydata, then use it for the rest. +sudo apt-get install --no-install-recommends --allow-unauthenticated -yy \ + -o APT::Keep-Downloaded-Packages=true \ + eatmydata + +sudo eatmydata apt-get install --no-install-recommends --allow-unauthenticated -yy \ + -o APT::Keep-Downloaded-Packages=true \ autoconf \ automake \ binfmt-support \ @@ -14,7 +23,6 @@ sudo apt-get -qq install --no-install-recommends --allow-unauthenticated -yy \ clang \ cppcheck \ docbook-xml \ - eatmydata \ gcc-aarch64-linux-gnu \ gcc-arm-linux-gnueabihf \ gcc-arm-none-eabi \ @@ -52,9 +60,11 @@ sudo apt-get -qq install --no-install-recommends --allow-unauthenticated -yy \ sudo \ tcl \ tclsh \ + tshark \ unzip \ valgrind \ wget \ + wireshark-common \ xsltproc \ systemtap-sdt-dev \ zlib1g-dev @@ -62,7 +72,7 @@ sudo apt-get -qq install --no-install-recommends --allow-unauthenticated -yy \ echo "tester ALL=(root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/tester sudo chmod 0440 /etc/sudoers.d/tester -"$(dirname "$0")"/install-bitcoind.sh +"$(dirname "$0")"/install-bitcoind.sh ~/ci-cache/ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- \ -y --default-toolchain ${RUST_VERSION} @@ -90,10 +100,29 @@ uv tool install poetry PROTOC_VERSION=29.4 PB_REL="https://github.com/protocolbuffers/protobuf/releases" -curl -LO $PB_REL/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip -sudo unzip protoc-${PROTOC_VERSION}-linux-x86_64.zip -d /usr/local/ +PROTOC_ZIP=protoc-${PROTOC_VERSION}-linux-x86_64.zip +if [ ! -f ~/ci-cache/$PROTOC_ZIP ]; then + curl -LO $PB_REL/download/v${PROTOC_VERSION}/$PROTOC_ZIP + # Check it before we commit it to the cache! + unzip -t $PROTOC_ZIP + cp $PROTOC_ZIP ~/ci-cache/ +fi +sudo unzip ~/ci-cache/$PROTOC_ZIP -d /usr/local/ sudo chmod a+x /usr/local/bin/protoc export PROTOC=/usr/local/bin/protoc export PATH=$PATH:/usr/local/bin env ls -lha /usr/local/bin + +# wireshark-common normally does this, but GH runners are special, so we +# do it explicitly +sudo groupadd -f wireshark +sudo chgrp wireshark /usr/bin/dumpcap +sudo chmod 750 /usr/bin/dumpcap +sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap + +# Add ourselves to the wireshark group (still need "sg wireshark..." for it to take effect) +sudo usermod -aG wireshark "$(id -nu)" + +# Copy archives back for caching +cp /var/cache/apt/archives/*.deb ~/ci-cache/apt/ || true diff --git a/.github/scripts/sync-rpc-cmds.py b/.github/scripts/sync-rpc-cmds.py index f1bf8de181a4..368f37a077dc 100644 --- a/.github/scripts/sync-rpc-cmds.py +++ b/.github/scripts/sync-rpc-cmds.py @@ -1,5 +1,4 @@ import os -from urllib.parse import quote from time import sleep import requests import re @@ -7,7 +6,7 @@ # readme url URL = "https://api.readme.com/v2/branches/stable" -CATEGORY_SLUG = "JSON-RPC API Reference" +CATEGORY_SLUG = "JSON-RPC" class Action(Enum): @@ -17,10 +16,12 @@ class Action(Enum): def getListOfRPCDocs(headers): - response = requests.get(f"{URL}/categories/reference/{quote(CATEGORY_SLUG)}/pages", headers=headers) + response = requests.get(f"{URL}/categories/reference/{CATEGORY_SLUG}/pages", headers=headers) if response.status_code == 200: return response.json().get('data', []) else: + print(f"❌ Failed to get pages: {response.status_code}") + print(response.text) return [] @@ -34,7 +35,7 @@ def check_renderable(response, action, title): renderable = data.get("renderable") if renderable is None: - # Some endpoints don’t include renderable (e.g. DELETE) + # Some endpoints don't include renderable (e.g. DELETE) return True if not renderable.get("status", False): @@ -46,7 +47,7 @@ def check_renderable(response, action, title): return True -def publishDoc(action, title, body, order, headers): +def publishDoc(action, title, body, position, headers): payload = { "title": title, "type": "basic", @@ -54,45 +55,45 @@ def publishDoc(action, title, body, order, headers): "body": body, }, "category": { - "uri": f"/branches/1/categories/reference/{CATEGORY_SLUG}" + "uri": f"/branches/stable/categories/reference/{CATEGORY_SLUG}" }, "hidden": False, - "order": order, + "position": position, } if action == Action.ADD: payload["slug"] = title response = requests.post(URL + "/reference", json=payload, headers=headers) if response.status_code != 201: - print("❌ HTTP ERROR:", response.status_code) + print(f"❌ HTTP ERROR ({response.status_code}):", title) print(response.text) return if not check_renderable(response, action, title): raise RuntimeError(f"Renderable check failed for {title}") - print("✅ Created", title) + print(f"✅ Created '{title}' at position {position + 1}") elif action == Action.UPDATE: response = requests.patch(f"{URL}/reference/{title}", json=payload, headers=headers) if response.status_code != 200: - print("❌ HTTP ERROR:", response.status_code) + print(f"❌ HTTP ERROR ({response.status_code}):", title) print(response.text) return if not check_renderable(response, action, title): raise RuntimeError(f"Renderable check failed for {title}") - print("✅ Updated", title) + print(f"✅ Updated '{title}' to position {position + 1}") elif action == Action.DELETE: response = requests.delete(f"{URL}/reference/{title}", headers=headers) if response.status_code != 204: - print("❌ DELETE FAILED:", title) + print(f"❌ DELETE FAILED ({response.status_code}):", title) print(response.text) else: - print("🗑️ Deleted", title) + print(f"🗑️ Deleted '{title}' from position {position + 1}") else: print("Invalid action") @@ -120,8 +121,18 @@ def main(): "Authorization": "Bearer " + os.environ.get("README_API_KEY"), } + # Validate API key exists + if not os.environ.get("README_API_KEY"): + print("❌ ERROR: README_API_KEY environment variable not set") + return + # path to the rst file from where we fetch all the RPC commands path_to_rst = "doc/index.rst" + + if not os.path.exists(path_to_rst): + print(f"❌ ERROR: File not found: {path_to_rst}") + return + with open(path_to_rst, "r") as file: rst_content = file.read() @@ -130,23 +141,31 @@ def main(): # Compare local and server commands list to get the list of command to add or delete commands_local_title = set(command[0] for command in commands_from_local) - commands_readme_title = set(command['title'] for command in commands_from_readme) + commands_readme_title = set(command['slug'] for command in commands_from_readme) commands_to_delete = commands_readme_title - commands_local_title commands_to_add = commands_local_title - commands_readme_title for name in commands_to_delete: publishDoc(Action.DELETE, name, "", 0, headers) - sleep(3) + sleep(1) if commands_from_local: - order = 0 + position = 0 for name, file in commands_from_local: - with open("doc/" + file) as f: + file_path = "doc/" + file + if not os.path.exists(file_path): + print(f"⚠️ WARNING: File not found: {file_path}, skipping {name}") + continue + + with open(file_path) as f: body = f.read() - publishDoc(Action.ADD if name in commands_to_add else Action.UPDATE, name, body, order, headers) - order = order + 1 - sleep(3) + action = Action.ADD if name in commands_to_add else Action.UPDATE + publishDoc(action, name, body, position, headers) + position += 1 + sleep(1) else: - print("No commands found in the Manpages block.") + print("⚠️ No commands found in the Manpages block.") + + print("\n✨ Sync complete!") if __name__ == "__main__": diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ea79a16d9639..9e610d9161cf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -11,12 +11,14 @@ concurrency: cancel-in-progress: true env: - # Makes the upload-artifact work more reliably at the cost - # of a bit of compile time. - RUST_PROFILE: release + # Reduce size, helps upload-artifact work more reliably + RUST_PROFILE: small SLOW_MACHINE: 1 - CI_SERVER_URL: "http://35.239.136.52:3170" - PYTEST_OPTS_BASE: "--reruns=10 -vvv --junit-xml=report.xml --timeout=1800 --durations=10" + # This is for the pytest-trackflaky: + # CI_SERVER_URL: "http://35.239.136.52:3170" + PYTEST_OPTS_BASE: "-vvv --junit-xml=report.xml --timeout=1800 --durations=10" + TEST_LOG_IGNORE_ERRORS: "1" + SCCACHE_GHA_ENABLED: "true" jobs: prebuild: @@ -80,7 +82,14 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} run: | bash -x .github/scripts/setup.sh # We're going to check BOLT quotes, so get the latest version @@ -92,7 +101,7 @@ jobs: VALGRIND: 0 PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} run: | - uv run make check-source BASE_REF="origin/${{ github.base_ref }}" + uv run make -j $(nproc) check-source BASE_REF="origin/${{ github.base_ref }}" CARGO=false CC=devtools/cc-nobuild SUPPRESS_GENERATION=1 - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -100,13 +109,9 @@ jobs: name: pytest-results-prebuild path: report.xml if-no-files-found: ignore - - name: Check Generated Files have been updated - run: uv run make check-gen-updated - - name: Check docs - run: uv run make check-doc compile: - name: Compile CLN ${{ matrix.cfg }} + name: Build ${{ matrix.cfg }} runs-on: ubuntu-24.04 timeout-minutes: 30 needs: @@ -118,19 +123,30 @@ jobs: - CFG: compile-gcc VALGRIND: 1 COMPILER: gcc + DEBUG_BUILD: --enable-debugbuild + - CFG: compile-gcc-O1 + VALGRIND: 1 + COMPILER: gcc + COPTFLAGS_VAR: COPTFLAGS="-O1" + DEBUG_BUILD: --enable-debugbuild - CFG: compile-gcc-O3 VALGRIND: 1 COMPILER: gcc COPTFLAGS_VAR: COPTFLAGS="-O3 -Werror" + DEBUG_BUILD: # While we're at it let's try to compile with clang - CFG: compile-clang VALGRIND: 1 COMPILER: clang + COPTFLAGS_VAR: COPTFLAGS="-O3" + DEBUG_BUILD: --enable-debugbuild - CFG: compile-clang-sanitizers COMPILER: clang ASAN: 1 UBSAN: 1 VALGRIND: 0 + COPTFLAGS_VAR: COPTFLAGS="-O1" + DEBUG_BUILD: steps: - name: Checkout uses: actions/checkout@v4 @@ -143,10 +159,21 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} run: | bash -x .github/scripts/setup.sh + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 + - run: sccache --zero-stats + - name: Build env: COMPILER: ${{ matrix.COMPILER }} @@ -154,21 +181,73 @@ jobs: UBSAN: ${{ matrix.UBSAN }} VALGRIND: ${{ matrix.VALGRIND }} COMPAT: 1 - CFG: ${{ matrix.CFG }} + RUSTC_WRAPPER: sccache run: | set -e - ./configure --enable-debugbuild CC="$COMPILER" ${{ matrix.COPTFLAGS_VAR }} + ./configure ${{ matrix.DEBUG_BUILD }} CC="sccache $COMPILER" ${{ matrix.COPTFLAGS_VAR }} - uv run make -j $(nproc) testpack.tar.bz2 + uv run make -j $(nproc) testpack.tar.gz # Rename now so we don't clash - mv testpack.tar.bz2 cln-${CFG}.tar.bz2 - - name: Check rust packages - run: cargo test --all + mv testpack.tar.gz cln-${{ matrix.CFG }}.tar.gz - uses: actions/upload-artifact@v4 with: - name: cln-${{ matrix.CFG }}.tar.bz2 - path: cln-${{ matrix.CFG }}.tar.bz2 + name: cln-${{ matrix.CFG }}.tar.gz + path: cln-${{ matrix.CFG }}.tar.gz + + check-compiled-source: + runs-on: ubuntu-24.04 + needs: + - compile + strategy: + matrix: + CFG: [compile-gcc] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} + run: | + bash -x .github/scripts/setup.sh + + - name: Download build + uses: actions/download-artifact@v4 + with: + name: cln-${{ matrix.CFG }}.tar.gz + + - name: Unpack prebuilt binaries + run: | + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz + + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 + - run: sccache --zero-stats + + - name: Check + run: | + uv run eatmydata make -j $(nproc) check-source-bolt check-python check-gen-updated check-doc CARGO=false CC=devtools/cc-nobuild SUPPRESS_GENERATION=1 + - name: Check rust packages + env: + RUSTC_WRAPPER: sccache + run: cargo test --all check-units: # The unit test checks are not in the critical path (not dependent @@ -184,7 +263,7 @@ jobs: fail-fast: true matrix: include: - - CFG: compile-gcc + - CFG: compile-gcc-O1 VALGRIND: 1 - CFG: compile-clang-sanitizers VALGRIND: 0 @@ -200,22 +279,38 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} run: | bash -x .github/scripts/setup.sh - sudo apt-get update -qq # We're going to check BOLT quotes, so get the latest version git clone https://github.com/lightning/bolts.git ../${BOLTDIR} - name: Download build uses: actions/download-artifact@v4 with: - name: cln-${{ matrix.CFG }}.tar.bz2 + name: cln-${{ matrix.CFG }}.tar.gz + + - name: Unpack prebuilt binaries + run: | + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz + + # external/Makefile uses `TARGET_DIR := external/build-$(shell ${CC} -dumpmachine)` so we need sccache to "work" for that. + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 - name: Check run: | - tar -xaf cln-${{ matrix.CFG }}.tar.bz2 - uv run eatmydata make -j $(nproc) check-units installcheck VALGRIND=${{ matrix.VALGRIND }} + uv run eatmydata make -j $(nproc) check-units installcheck VALGRIND=${{ matrix.VALGRIND }} CARGO=false CC=devtools/cc-nobuild SUPPRESS_GENERATION=1 check-fuzz: name: Run fuzz regression tests @@ -234,20 +329,33 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} run: | bash -x .github/scripts/setup.sh + - name: Setup sccache + uses: mozilla-actions/sccache-action@v0.0.9 + - run: sccache --zero-stats + - name: Build + env: + RUSTC_WRAPPER: sccache run: | - ./configure --enable-debugbuild --enable-fuzzing --enable-address-sanitizer --enable-ub-sanitizer --disable-valgrind CC=clang + ./configure --enable-debugbuild --enable-fuzzing --enable-address-sanitizer --enable-ub-sanitizer --disable-valgrind CC="sccache clang" uv run make -j $(nproc) check-fuzz check-downgrade: name: Check we can downgrade the node runs-on: ubuntu-24.04 needs: - - compile + - check-compiled-source strategy: fail-fast: false matrix: @@ -274,32 +382,35 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 - - name: Install dependencies - run: | - bash -x .github/scripts/setup.sh + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} - - name: Install bitcoind + - name: Install dependencies env: TEST_NETWORK: ${{ matrix.TEST_NETWORK }} - run: .github/scripts/install-bitcoind.sh + run: | + bash -x .github/scripts/setup.sh - name: Download build uses: actions/download-artifact@v4 with: - name: cln-${{ matrix.CFG }}.tar.bz2 + name: cln-${{ matrix.CFG }}.tar.gz - - name: Unpack pre-built CLN - env: - CFG: ${{ matrix.CFG }} + - name: Unpack prebuilt binaries run: | - tar -xaf cln-${CFG}.tar.bz2 + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz - name: Fetch and unpack previous CLN run: | - mkdir /tmp/old-cln - cd /tmp/old-cln - wget https://github.com/ElementsProject/lightning/releases/download/v25.09/clightning-v25.09-ubuntu-24.04-amd64.tar.xz - tar -xaf clightning-v25.09-ubuntu-24.04-amd64.tar.xz + mkdir old-cln + cd old-cln + wget https://github.com/ElementsProject/lightning/releases/download/v25.12/clightning-v25.12-ubuntu-24.04-amd64.tar.xz + tar -xaf clightning-v25.12-ubuntu-24.04-amd64.tar.xz - name: Switch network if: ${{ matrix.TEST_NETWORK == 'liquid-regtest' }} @@ -307,22 +418,22 @@ jobs: # Loading the network from config.vars rather than the envvar is a terrible idea... sed -i 's/TEST_NETWORK=regtest/TEST_NETWORK=liquid-regtest/g' config.vars cat config.vars + touch -d yesterday config.vars - name: Test env: SLOW_MACHINE: 1 - PYTEST_PAR: 10 TEST_DEBUG: 1 TEST_DB_PROVIDER: ${{ matrix.TEST_DB_PROVIDER }} TEST_NETWORK: ${{ matrix.TEST_NETWORK }} LIGHTNINGD_POSTGRES_NO_VACUUM: 1 VALGRIND: ${{ matrix.VALGRIND }} - PREV_LIGHTNINGD: /tmp/old-cln/usr/bin/lightningd + PREV_LIGHTNINGD: old-cln/usr/bin/lightningd PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} run: | env cat config.vars - uv run eatmydata pytest tests/test_downgrade.py -n ${PYTEST_PAR} ${PYTEST_OPTS} + sg wireshark "uv run eatmydata pytest tests/test_downgrade.py -n $(($(nproc) + 1)) ${PYTEST_OPTS}" - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -331,40 +442,107 @@ jobs: path: report.xml if-no-files-found: ignore - integration: - name: Test CLN ${{ matrix.name }} + # For speed, we run a first integration test using gcc and sqlite3, in 6 parts. + # If that passes, we move on to the more complete integration tests. + first-integration: + name: First Integration Tests (${{ matrix.GROUP }}/${{ matrix.GROUP_COUNT }}) runs-on: ubuntu-24.04 timeout-minutes: 120 env: - RUST_PROFILE: release # Has to match the one in the compile step - PYTEST_OPTS: --reruns=10 -vvv --junit-xml=report.xml --timeout=1800 --durations=10 + RUST_PROFILE: small # Has to match the one in the compile step needs: - compile + strategy: + fail-fast: false + matrix: + CFG: [compile-gcc] + GROUP: [1,2,3,4,5,6] + GROUP_COUNT: [6] + TEST_DB_PROVIDER: [sqlite3] + COMPILER: [gcc] + TEST_NETWORK: [regtest] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} + run: | + bash -x .github/scripts/setup.sh + + - name: Download build + uses: actions/download-artifact@v4 + with: + name: cln-${{ matrix.CFG }}.tar.gz + + - name: Unpack prebuilt binaries + run: | + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz + + - name: Test + env: + COMPILER: ${{ matrix.COMPILER }} + EXPERIMENTAL_DUAL_FUND: ${{ matrix.EXPERIMENTAL_DUAL_FUND }} + EXPERIMENTAL_SPLICING: ${{ matrix.EXPERIMENTAL_SPLICING }} + COMPAT: 1 + SLOW_MACHINE: 1 + TEST_DEBUG: 1 + TEST_DB_PROVIDER: ${{ matrix.TEST_DB_PROVIDER }} + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} + LIGHTNINGD_POSTGRES_NO_VACUUM: 1 + PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} --test-group-random-seed=42 + run: | + env + cat config.vars + VALGRIND=0 sg wireshark "uv run eatmydata pytest tests/ -n $(($(nproc) + 1)) ${PYTEST_OPTS} --test-group=${{ matrix.GROUP }} --test-group-count=${{ matrix.GROUP_COUNT }}" + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: pytest-results-first-integration-${{ matrix.GROUP }} + path: report.xml + if-no-files-found: ignore + + full-integration: + name: Test CLN ${{ matrix.name }} Full Integration + runs-on: ubuntu-24.04 + timeout-minutes: 120 + env: + RUST_PROFILE: small # Has to match the one in the compile step + needs: + - first-integration strategy: fail-fast: false matrix: include: - - NAME: gcc - CFG: compile-gcc - TEST_DB_PROVIDER: sqlite3 - COMPILER: gcc - TEST_NETWORK: regtest - # While we're at it let's try to compile with clang - - NAME: clang - CFG: compile-clang - TEST_DB_PROVIDER: sqlite3 - COMPILER: clang - TEST_NETWORK: regtest + # We do a clang run, but with minimum BTC version, to avoid YA test run. # And of course we want to test postgres too - NAME: postgres - CFG: compile-gcc + CFG: compile-gcc-O3 COMPILER: gcc TEST_DB_PROVIDER: postgres TEST_NETWORK: regtest # And don't forget about elements (like cdecker did when # reworking the CI...) - NAME: liquid - CFG: compile-gcc + CFG: compile-gcc-O3 COMPILER: gcc TEST_NETWORK: liquid-regtest TEST_DB_PROVIDER: sqlite3 @@ -377,7 +555,7 @@ jobs: EXPERIMENTAL_DUAL_FUND: 1 # And splicing! - NAME: splicing - CFG: compile-gcc + CFG: compile-gcc-O3 TEST_DB_PROVIDER: sqlite3 COMPILER: gcc TEST_NETWORK: regtest @@ -394,25 +572,28 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 - - name: Install dependencies - run: | - bash -x .github/scripts/setup.sh + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} - - name: Install bitcoind + - name: Install dependencies env: TEST_NETWORK: ${{ matrix.TEST_NETWORK }} - run: .github/scripts/install-bitcoind.sh + run: | + bash -x .github/scripts/setup.sh - name: Download build uses: actions/download-artifact@v4 with: - name: cln-${{ matrix.CFG }}.tar.bz2 + name: cln-${{ matrix.CFG }}.tar.gz - - name: Unpack pre-built CLN - env: - CFG: ${{ matrix.CFG }} + - name: Unpack prebuilt binaries run: | - tar -xaf cln-${CFG}.tar.bz2 + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz - name: Switch network if: ${{ matrix.TEST_NETWORK == 'liquid-regtest' }} @@ -427,17 +608,16 @@ jobs: EXPERIMENTAL_DUAL_FUND: ${{ matrix.EXPERIMENTAL_DUAL_FUND }} EXPERIMENTAL_SPLICING: ${{ matrix.EXPERIMENTAL_SPLICING }} COMPAT: 1 - CFG: ${{ matrix.CFG }} SLOW_MACHINE: 1 - PYTEST_PAR: 10 TEST_DEBUG: 1 TEST_DB_PROVIDER: ${{ matrix.TEST_DB_PROVIDER }} TEST_NETWORK: ${{ matrix.TEST_NETWORK }} LIGHTNINGD_POSTGRES_NO_VACUUM: 1 + PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} run: | env cat config.vars - VALGRIND=0 uv run eatmydata pytest tests/ -n ${PYTEST_PAR} ${PYTEST_OPTS} + VALGRIND=0 sg wireshark "uv run eatmydata pytest tests/ -n $(($(nproc) + 1)) ${PYTEST_OPTS}" - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -447,49 +627,19 @@ jobs: if-no-files-found: ignore integration-valgrind: - name: Valgrind Test CLN ${{ matrix.name }} + name: Valgrind Test CLN (${{ matrix.GROUP }}/${{ matrix.GROUP_COUNT }}) runs-on: ubuntu-24.04 timeout-minutes: 120 env: - RUST_PROFILE: release # Has to match the one in the compile step - CFG: compile-gcc - PYTEST_OPTS: --reruns=10 -vvv --junit-xml=report.xml --timeout=1800 --durations=10 --test-group-random-seed=42 + RUST_PROFILE: small # Has to match the one in the compile step needs: - - compile + - check-compiled-source strategy: fail-fast: false matrix: - include: - - NAME: Valgrind (01/10) - GROUP: 1 - PYTEST_OPTS: --test-group=1 --test-group-count=10 - - NAME: Valgrind (02/10) - GROUP: 2 - PYTEST_OPTS: --test-group=2 --test-group-count=10 - - NAME: Valgrind (03/10) - GROUP: 3 - PYTEST_OPTS: --test-group=3 --test-group-count=10 - - NAME: Valgrind (04/10) - GROUP: 4 - PYTEST_OPTS: --test-group=4 --test-group-count=10 - - NAME: Valgrind (05/10) - GROUP: 5 - PYTEST_OPTS: --test-group=5 --test-group-count=10 - - NAME: Valgrind (06/10) - GROUP: 6 - PYTEST_OPTS: --test-group=6 --test-group-count=10 - - NAME: Valgrind (07/10) - GROUP: 7 - PYTEST_OPTS: --test-group=7 --test-group-count=10 - - NAME: Valgrind (08/10) - GROUP: 8 - PYTEST_OPTS: --test-group=8 --test-group-count=10 - - NAME: Valgrind (09/10) - GROUP: 9 - PYTEST_OPTS: --test-group=9 --test-group-count=10 - - NAME: Valgrind (10/10) - GROUP: 10 - PYTEST_OPTS: --test-group=10 --test-group-count=10 + CFG: [compile-gcc-O1] + GROUP: [1,2,3,4,5,6,7,8,9,10,11,12] + GROUP_COUNT: [12] steps: - name: Checkout uses: actions/checkout@v4 @@ -502,29 +652,34 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies run: | - sudo apt-get update -qq - sudo apt-get install -yyq valgrind bash -x .github/scripts/setup.sh - - name: Install bitcoind - run: .github/scripts/install-bitcoind.sh - - name: Download build uses: actions/download-artifact@v4 with: - name: cln-compile-gcc.tar.bz2 + name: cln-${{ matrix.CFG }}.tar.gz - - name: Unpack build - run: tar -xvjf cln-compile-gcc.tar.bz2 + - name: Unpack prebuilt binaries + run: | + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz - name: Test env: SLOW_MACHINE: 1 TEST_DEBUG: 1 + PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} --test-group-random-seed=42 run: | - VALGRIND=1 uv run eatmydata pytest tests/ -n 3 ${PYTEST_OPTS} ${{ matrix.PYTEST_OPTS }} + VALGRIND=1 sg wireshark "uv run eatmydata pytest tests/ -n $(($(nproc) + 1)) ${PYTEST_OPTS} --test-group=${{ matrix.GROUP }} --test-group-count=${{ matrix.GROUP_COUNT }}" - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -534,56 +689,21 @@ jobs: if-no-files-found: ignore integration-sanitizers: - name: Sanitizers Test CLN + name: ASan/UBSan (${{ matrix.GROUP }}/${{ matrix.GROUP_COUNT }}) runs-on: ubuntu-24.04 timeout-minutes: 120 env: - RUST_PROFILE: release + RUST_PROFILE: small SLOW_MACHINE: 1 TEST_DEBUG: 1 - PYTEST_OPTS: --reruns=10 -vvv --junit-xml=report.xml --timeout=1800 --durations=10 --test-group-random-seed=42 needs: - - compile + - check-compiled-source strategy: fail-fast: false matrix: - include: - - NAME: ASan/UBSan (01/12) - GROUP: 1 - PYTEST_OPTS: --test-group=1 --test-group-count=12 - - NAME: ASan/UBSan (02/12) - GROUP: 2 - PYTEST_OPTS: --test-group=2 --test-group-count=12 -n 1 - - NAME: ASan/UBSan (03/12) - GROUP: 3 - PYTEST_OPTS: --test-group=3 --test-group-count=12 - - NAME: ASan/UBSan (04/12) - GROUP: 4 - PYTEST_OPTS: --test-group=4 --test-group-count=12 - - NAME: ASan/UBSan (05/12) - GROUP: 5 - PYTEST_OPTS: --test-group=5 --test-group-count=12 - - NAME: ASan/UBSan (06/12) - GROUP: 6 - PYTEST_OPTS: --test-group=6 --test-group-count=12 - - NAME: ASan/UBSan (07/12) - GROUP: 7 - PYTEST_OPTS: --test-group=7 --test-group-count=12 - - NAME: ASan/UBSan (08/12) - GROUP: 8 - PYTEST_OPTS: --test-group=8 --test-group-count=12 - - NAME: ASan/UBSan (09/12) - GROUP: 9 - PYTEST_OPTS: --test-group=9 --test-group-count=12 - - NAME: ASan/UBSan (10/12) - GROUP: 10 - PYTEST_OPTS: --test-group=10 --test-group-count=12 - - NAME: ASan/UBSan (11/12) - GROUP: 11 - PYTEST_OPTS: --test-group=11 --test-group-count=12 - - NAME: ASan/UBSan (12/12) - GROUP: 12 - PYTEST_OPTS: --test-group=12 --test-group-count=12 + CFG: [compile-clang-sanitizers] + GROUP: [1,2,3,4,5,6] + GROUP_COUNT: [6] steps: - name: Checkout uses: actions/checkout@v4 @@ -596,24 +716,34 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} run: | bash -x .github/scripts/setup.sh - - name: Install bitcoind - run: .github/scripts/install-bitcoind.sh - - name: Download build uses: actions/download-artifact@v4 with: - name: cln-compile-clang-sanitizers.tar.bz2 + name: cln-${{ matrix.CFG }}.tar.gz - - name: Unpack build - run: tar -xvjf cln-compile-clang-sanitizers.tar.bz2 + - name: Unpack prebuilt binaries + run: | + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz - name: Test + env: + PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} --test-group-random-seed=42 run: | - uv run eatmydata pytest tests/ -n 2 ${PYTEST_OPTS} ${{ matrix.PYTEST_OPTS }} + sg wireshark "uv run eatmydata pytest tests/ -n $(($(nproc) + 1)) ${PYTEST_OPTS} --test-group=${{ matrix.GROUP }} --test-group-count=${{ matrix.GROUP_COUNT }}" - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -629,10 +759,11 @@ jobs: timeout-minutes: 30 strategy: fail-fast: false + matrix: + CFG: [compile-gcc] env: VALGRIND: 0 GENERATE_EXAMPLES: 1 - PYTEST_OPTS: --reruns=10 -vvv --junit-xml=report.xml --timeout=1800 --durations=10 TEST_NETWORK: regtest needs: - compile @@ -647,23 +778,31 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies run: | bash -x .github/scripts/setup.sh - - name: Install bitcoind - env: - TEST_NETWORK: regtest - run: .github/scripts/install-bitcoind.sh + - name: Download build uses: actions/download-artifact@v4 with: - name: cln-compile-gcc.tar.bz2 - - name: Unpack pre-built CLN + name: cln-${{ matrix.CFG }}.tar.gz + - name: Unpack prebuilt binaries run: | - tar -xaf cln-compile-gcc.tar.bz2 + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz + - name: Test + env: + PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} run: | - uv run eatmydata make -j $(nproc) check-doc-examples + uv run eatmydata make -j $(($(nproc) + 1)) check-doc-examples CARGO=false CC=devtools/cc-nobuild SUPPRESS_GENERATION=1 - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -677,8 +816,7 @@ jobs: runs-on: ubuntu-24.04 timeout-minutes: 120 env: - RUST_PROFILE: release # Has to match the one in the compile step - PYTEST_OPTS: --reruns=10 -vvv --junit-xml=report.xml --timeout=1800 --durations=10 + RUST_PROFILE: small # Has to match the one in the compile step needs: - compile strategy: @@ -703,7 +841,14 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 + - uses: actions/cache@v4 + with: + path: ~/ci-cache + key: apt-${{ runner.os }} + - name: Install dependencies + env: + TEST_NETWORK: ${{ matrix.TEST_NETWORK }} run: | bash -x .github/scripts/setup.sh @@ -722,29 +867,29 @@ jobs: - name: Download build uses: actions/download-artifact@v4 with: - name: cln-${{ matrix.CFG }}.tar.bz2 + name: cln-${{ matrix.CFG }}.tar.gz - - name: Unpack pre-built CLN - env: - CFG: ${{ matrix.CFG }} + - name: Unpack prebuilt binaries run: | - tar -xaf cln-${CFG}.tar.bz2 + git submodule sync && git submodule update --init --recursive + # Make sure source appears older than what we're about to unpack + find . -type f -print0 | xargs -0 touch -d yesterday + tar xaf cln-${{ matrix.CFG }}.tar.gz - name: Test env: COMPILER: ${{ matrix.COMPILER }} COMPAT: 1 - CFG: ${{ matrix.CFG }} SLOW_MACHINE: 1 - PYTEST_PAR: 10 TEST_DEBUG: 1 TEST_DB_PROVIDER: ${{ matrix.TEST_DB_PROVIDER }} TEST_NETWORK: ${{ matrix.TEST_NETWORK }} LIGHTNINGD_POSTGRES_NO_VACUUM: 1 + PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} run: | env cat config.vars - VALGRIND=0 uv run eatmydata pytest tests/ -n ${PYTEST_PAR} ${PYTEST_OPTS} + VALGRIND=0 sg wireshark "uv run eatmydata pytest tests/ -n $(($(nproc) + 1)) ${PYTEST_OPTS}" - name: Upload test results if: always() uses: actions/upload-artifact@v4 @@ -761,24 +906,28 @@ jobs: name: CI completion runs-on: ubuntu-24.04 needs: - - integration + - first-integration + - full-integration - check-units - integration-valgrind - integration-sanitizers - min-btc-support - check-downgrade + - check-compiled-source if: ${{ always() }} steps: - name: Complete env: - JOB_NAMES: "INTEGRATION CHECK_UNITS VALGRIND SANITIZERS BTC" - INTEGRATION: ${{ needs.integration.result }} + JOB_NAMES: "FIRST_INTEGRATION FULL_INTEGRATION CHECK_UNITS VALGRIND SANITIZERS BTC CHECK_COMPILED_SOURCE" + FIRST_INTEGRATION: ${{ needs['first-integration'].result }} + FULL_INTEGRATION: ${{ needs['full-integration'].result }} CHECK_UNITS: ${{ needs['check-units'].result }} VALGRIND: ${{ needs['integration-valgrind'].result }} SANITIZERS: ${{ needs['integration-sanitizers'].result }} DOCS: ${{ needs['update-docs-examples'].result }} BTC: ${{ needs['min-btc-support'].result }} CHECK_DOWNGRADE: ${{ needs['check-downgrade'].result }} + CHECK_COMPILED_SOURCE: ${{ needs['check-compiled-source'].result }} run: | failed="" for name in $JOB_NAMES; do diff --git a/.github/workflows/coverage-nightly.yaml b/.github/workflows/coverage-nightly.yaml index dfa896867bbf..cbf04b2f4f76 100644 --- a/.github/workflows/coverage-nightly.yaml +++ b/.github/workflows/coverage-nightly.yaml @@ -91,6 +91,7 @@ jobs: PYTEST_PAR: ${{ matrix.pytest_par }} SLOW_MACHINE: 1 TIMEOUT: 900 + TEST_LOG_IGNORE_ERRORS: "1" run: | mkdir -p "$CLN_COVERAGE_DIR" uv run eatmydata pytest tests/ -n ${PYTEST_PAR} -vvv diff --git a/.gitignore b/.gitignore index c54cf77954ac..ffff9f5622e9 100644 --- a/.gitignore +++ b/.gitignore @@ -92,6 +92,7 @@ plugins/cln-grpc plugins/clnrest plugins/wss-proxy plugins/cln-bip353 +plugins/cln-currencyrate .clangd .cargo/ diff --git a/.msggen.json b/.msggen.json index 0f4d53449f46..534debac2ac8 100644 --- a/.msggen.json +++ b/.msggen.json @@ -1208,6 +1208,18 @@ "CheckruneResponse": { "CheckRune.valid": 1 }, + "Clnrest-register-pathRequest": { + "Clnrest-Register-Path.http_method": 5, + "Clnrest-Register-Path.path": 1, + "Clnrest-Register-Path.rpc_method": 2, + "Clnrest-Register-Path.rune_required": 4, + "Clnrest-Register-Path.rune_restrictions": 3 + }, + "Clnrest-register-pathRuneRestrictions": { + "Clnrest-Register-Path.rune_restrictions.method": 2, + "Clnrest-Register-Path.rune_restrictions.nodeid": 1, + "Clnrest-Register-Path.rune_restrictions.params": 3 + }, "CloseRequest": { "Close.destination": 3, "Close.fee_negotiation_step": 4, @@ -2224,6 +2236,7 @@ }, "ListconfigsConfigs": { "ListConfigs.configs.accept-htlc-tlv-types": 65, + "ListConfigs.configs.add-source": 72, "ListConfigs.configs.addr": 47, "ListConfigs.configs.alias": 30, "ListConfigs.configs.allow-deprecated-apis": 14, @@ -2242,12 +2255,15 @@ "ListConfigs.configs.commit-feerate-offset": 70, "ListConfigs.configs.commit-time": 38, "ListConfigs.configs.conf": 1, + "ListConfigs.configs.currencyrate-add-source": 74, + "ListConfigs.configs.currencyrate-disable-source": 75, "ListConfigs.configs.daemon": 18, "ListConfigs.configs.database-upgrade": 28, "ListConfigs.configs.developer": 2, "ListConfigs.configs.disable-dns": 53, "ListConfigs.configs.disable-mpp": 4, "ListConfigs.configs.disable-plugin": 16, + "ListConfigs.configs.disable-source": 73, "ListConfigs.configs.encrypted-hsm": 56, "ListConfigs.configs.experimental-anchors": 27, "ListConfigs.configs.experimental-dual-fund": 21, @@ -2299,6 +2315,11 @@ "ListConfigs.configs.accept-htlc-tlv-types.source": 2, "ListConfigs.configs.accept-htlc-tlv-types.value_str": 1 }, + "ListconfigsConfigsAdd-source": { + "ListConfigs.configs.add-source.plugin": 3, + "ListConfigs.configs.add-source.sources[]": 2, + "ListConfigs.configs.add-source.values_str[]": 1 + }, "ListconfigsConfigsAddr": { "ListConfigs.configs.addr.sources[]": 2, "ListConfigs.configs.addr.values_str[]": 1 @@ -2371,6 +2392,16 @@ "ListConfigs.configs.conf.source": 2, "ListConfigs.configs.conf.value_str": 1 }, + "ListconfigsConfigsCurrencyrate-add-source": { + "ListConfigs.configs.currencyrate-add-source.plugin": 3, + "ListConfigs.configs.currencyrate-add-source.sources[]": 2, + "ListConfigs.configs.currencyrate-add-source.values_str[]": 1 + }, + "ListconfigsConfigsCurrencyrate-disable-source": { + "ListConfigs.configs.currencyrate-disable-source.plugin": 3, + "ListConfigs.configs.currencyrate-disable-source.sources[]": 2, + "ListConfigs.configs.currencyrate-disable-source.values_str[]": 1 + }, "ListconfigsConfigsDaemon": { "ListConfigs.configs.daemon.set": 1, "ListConfigs.configs.daemon.source": 2 @@ -2396,6 +2427,11 @@ "ListConfigs.configs.disable-plugin.sources[]": 2, "ListConfigs.configs.disable-plugin.values_str[]": 1 }, + "ListconfigsConfigsDisable-source": { + "ListConfigs.configs.disable-source.plugin": 3, + "ListConfigs.configs.disable-source.sources[]": 2, + "ListConfigs.configs.disable-source.values_str[]": 1 + }, "ListconfigsConfigsEncrypted-hsm": { "ListConfigs.configs.encrypted-hsm.set": 1, "ListConfigs.configs.encrypted-hsm.source": 2 @@ -3033,6 +3069,7 @@ "ListPeerChannels.channels[].updates.remote.htlc_minimum_msat": 1 }, "ListpeerchannelsRequest": { + "ListPeerChannels.channel_id": 3, "ListPeerChannels.id": 1, "ListPeerChannels.short_channel_id": 2 }, @@ -3325,6 +3362,7 @@ "Offer.absolute_expiry": 6, "Offer.amount": 1, "Offer.description": 2, + "Offer.fronting_nodes[]": 15, "Offer.issuer": 3, "Offer.label": 4, "Offer.optional_recurrence": 14, @@ -5712,6 +5750,42 @@ "added": "pre-v0.10.1", "deprecated": null }, + "Clnrest-Register-Path": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.http_method": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.path": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.rpc_method": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.rune_required": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.rune_restrictions": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.rune_restrictions.method": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.rune_restrictions.nodeid": { + "added": "v26.04", + "deprecated": null + }, + "Clnrest-Register-Path.rune_restrictions.params": { + "added": "v26.04", + "deprecated": null + }, "Close": { "added": "pre-v0.10.1", "deprecated": null @@ -8928,6 +9002,22 @@ "added": "pre-v0.10.1", "deprecated": null }, + "ListConfigs.configs.add-source": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.add-source.plugin": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.add-source.sources[]": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.add-source.values_str[]": { + "added": "v26.04", + "deprecated": null + }, "ListConfigs.configs.addr": { "added": "pre-v0.10.1", "deprecated": null @@ -9144,6 +9234,38 @@ "added": "pre-v0.10.1", "deprecated": null }, + "ListConfigs.configs.currencyrate-add-source": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.currencyrate-add-source.plugin": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.currencyrate-add-source.sources[]": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.currencyrate-add-source.values_str[]": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.currencyrate-disable-source": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.currencyrate-disable-source.plugin": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.currencyrate-disable-source.sources[]": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.currencyrate-disable-source.values_str[]": { + "added": "v26.04", + "deprecated": null + }, "ListConfigs.configs.daemon": { "added": "pre-v0.10.1", "deprecated": null @@ -9220,6 +9342,22 @@ "added": "pre-v0.10.1", "deprecated": null }, + "ListConfigs.configs.disable-source": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.disable-source.plugin": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.disable-source.sources[]": { + "added": "v26.04", + "deprecated": null + }, + "ListConfigs.configs.disable-source.values_str[]": { + "added": "v26.04", + "deprecated": null + }, "ListConfigs.configs.encrypted-hsm": { "added": "pre-v0.10.1", "deprecated": null @@ -10708,6 +10846,10 @@ "added": "v23.02", "deprecated": null }, + "ListPeerChannels.channel_id": { + "added": "v26.03", + "deprecated": null + }, "ListPeerChannels.channels[]": { "added": "v23.02", "deprecated": null @@ -11940,6 +12082,10 @@ "added": "pre-v0.10.1", "deprecated": null }, + "Offer.fronting_nodes[]": { + "added": "v26.04", + "deprecated": null + }, "Offer.issuer": { "added": "pre-v0.10.1", "deprecated": null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fe1a13e4c102..65e0f58bec8d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,13 +1,108 @@ +default_language_version: + node: system + python: python3 + repos: -- repo: https://github.com/astral-sh/ruff-pre-commit - # Ruff version. - rev: v0.8.0 +- repo: https://github.com/pycqa/flake8 + rev: 7.3.0 hooks: - # Run the linter. - - id: ruff - args: [ --diff ] - exclude: "contrib/pyln-grpc-proto/pyln/grpc/(primitives|node)_pb2(|_grpc).py" - # Run the formatter. - - id: ruff-format - args: [ --diff ] + - id: flake8 + args: [ "--ignore=E501,E731,E741,W503,F541,E275" ] exclude: "contrib/pyln-grpc-proto/pyln/grpc/(primitives|node)_pb2(|_grpc).py" + +- repo: https://github.com/shellcheck-py/shellcheck-py + rev: v0.11.0.1 + hooks: + - id: shellcheck + args: [ -fgcc ] + +- repo: https://github.com/pre-commit/mirrors-clang-format + rev: v19.1.4 + hooks: + - id: clang-format + description: Runs formatting checks on the c code and and throws errors if suggestions + are detected, without modifying the code. Style is defined in `.clang-format`. When + encountering formatting-related errors, run `clang-format -i ` to make + (destructively) the suggestions and evalute the resulting diff for more context. + args: [ --dry-run, -Werror ] + entry: clang-format + types: [ c ] + stages: [ manual ] + +- repo: https://github.com/python-jsonschema/check-jsonschema + rev: 0.30.0 + hooks: + - id: check-jsonschema + name: check doc JSON schemas + args: ["--schemafile", "doc/rpc-schema-draft.json"] + files: ^doc/schemas/.*\.json$ + types: [ json ] + + - id: check-metaschema + name: check doc JSON metaschemas + args: ["--verbose"] + files: ^doc/schemas/.*\.json$ + types: [ json ] + +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: pretty-format-json + args: [ "--indent", "2", "--no-sort-keys" ] + files: ^doc/schemas/.*\.json$ + types: [ json ] + - id: trailing-whitespace + args: [ "--markdown-linebreak-ext=md" ] + exclude: ccan|contrib|tests/fuzz/corpora + - id: end-of-file-fixer + exclude: ccan|contrib|tests/fuzz/corpora + +- repo: https://github.com/codespell-project/codespell + rev: v2.3.0 + hooks: + - id: codespell + description: Checks for common misspellings. + exclude: ccan|contrib|tests/fuzz/corpora + stages: [ manual ] + +- repo: https://github.com/alessandrojcm/commitlint-pre-commit-hook + rev: v9.23.0 + hooks: + - id: commitlint + stages: [ commit-msg ] + +- repo: local + hooks: + # Reimplementation of `make check-amount-access` for pygrep. + - id: check-amount-access + name: Check amount_msat and amount_sat members are not accessed directly + description: "Don't access amount_msat and amount_sat members directly without a good reason since it risks overflow." + language: pygrep + entry: (->|\.)(milli)?satoshis(?!.*\/\*\ Raw:)|(?/de $(info Building version $(VERSION)) # Next release. -CLN_NEXT_VERSION := v25.12 +CLN_NEXT_VERSION := v26.04 # Previous release (for downgrade testing) -CLN_PREV_VERSION := v25.09 +CLN_PREV_VERSION := v25.12 # --quiet / -s means quiet, dammit! ifeq ($(findstring s,$(word 1, $(MAKEFLAGS))),s) @@ -21,6 +21,7 @@ ECHO := echo SUPPRESS_OUTPUT := endif +CARGO := cargo DISTRO=$(shell lsb_release -is 2>/dev/null || echo unknown)-$(shell lsb_release -rs 2>/dev/null || echo unknown) OS=$(shell uname -s) ARCH=$(shell uname -m) @@ -104,6 +105,7 @@ CCAN_OBJS := \ ccan-bitmap.o \ ccan-bitops.o \ ccan-breakpoint.o \ + ccan-cdump.o \ ccan-closefrom.o \ ccan-crc32c.o \ ccan-crypto-hmac.o \ @@ -229,8 +231,6 @@ CCAN_HEADERS := \ $(CCANDIR)/ccan/typesafe_cb/typesafe_cb.h \ $(CCANDIR)/ccan/utf8/utf8.h -CDUMP_OBJS := ccan-cdump.o ccan-strmap.o - BOLT_GEN := tools/generate-wire.py WIRE_GEN := $(BOLT_GEN) @@ -313,6 +313,10 @@ else LDLIBS = -L$(CPATH) -lm $(SQLITE3_LDLIBS) $(COVFLAGS) endif +ifeq ($(HAVE_FUNCTION_SECTIONS),1) +LDLIBS += -Wl,--gc-sections +endif + # If we have the postgres client library we need to link against it as well ifeq ($(HAVE_POSTGRES),1) LDLIBS += $(POSTGRES_LDLIBS) @@ -464,6 +468,7 @@ PKGLIBEXEC_PROGRAMS = \ lightningd/lightning_connectd \ lightningd/lightning_dualopend \ lightningd/lightning_gossipd \ + lightningd/lightning_gossip_compactd \ lightningd/lightning_hsmd \ lightningd/lightning_onchaind \ lightningd/lightning_openingd \ @@ -478,16 +483,17 @@ mkdocs.yml: $(MANPAGES:=.md) ) - -# Don't delete these intermediaries. -.PRECIOUS: $(ALL_GEN_HEADERS) $(ALL_GEN_SOURCES) $(PYTHON_GENERATED) - # Every single object file. ALL_OBJS := $(ALL_C_SOURCES:.c=.o) +WIREGEN_FILES := $(filter %printgen.h %printgen.c %wiregen.h %wiregen.c, $(ALL_C_HEADERS) $(ALL_C_SOURCES)) + +# Always make wiregen files before any object file +$(ALL_OBJS): $(WIREGEN_FILES) + # We always regen wiregen and printgen files, since SHA256STAMP protects against # spurious rebuilds. -$(filter %printgen.h %printgen.c %wiregen.h %wiregen.c, $(ALL_C_HEADERS) $(ALL_C_SOURCES)): $(FORCE) +$(WIREGEN_FILES): $(FORCE) ifneq ($(TEST_GROUP_COUNT),) PYTEST_OPTS += --test-group=$(TEST_GROUP) --test-group-count=$(TEST_GROUP_COUNT) @@ -518,7 +524,7 @@ ifeq ($(PYTEST),) exit 1 else # Explicitly hand VALGRIND so you can override on make cmd line. - PYTHONPATH=$(MY_CHECK_PYTHONPATH) TEST_DEBUG=1 VALGRIND=$(VALGRIND) uv run $(PYTEST) $(PYTEST_TESTS) $(PYTEST_OPTS) + PYTHONPATH=$(MY_CHECK_PYTHONPATH) TEST_DEBUG=1 TEST_LOG_IGNORE_ERRORS=1 VALGRIND=$(VALGRIND) uv run $(PYTEST) $(PYTEST_TESTS) $(PYTEST_OPTS) endif check-fuzz: $(ALL_FUZZ_TARGETS) @@ -546,6 +552,11 @@ SRC_TO_CHECK := $(filter-out $(ALL_TEST_PROGRAMS:=.c), $(ALL_NONGEN_SOURCES)) check-src-includes: $(SRC_TO_CHECK:%=check-src-include-order/%) check-hdr-includes: $(ALL_NONGEN_HEADERS:%=check-hdr-include-order/%) +print-src-to-check: + @echo $(SRC_TO_CHECK) +print-hdr-to-check: + @echo $(ALL_NONGEN_HEADERS) + # If you want to check a specific variant of quotes use: # make check-source-bolt BOLTVERSION=xxx ifeq ($(BOLTVERSION),$(DEFAULT_BOLTVERSION)) @@ -634,10 +645,8 @@ update-doc-examples: check-doc-examples: update-doc-examples git diff --exit-code HEAD -# For those without working cppcheck -check-source-no-cppcheck: check-makefile check-source-bolt check-whitespace check-spelling check-python check-includes check-shellcheck check-setup_locale check-tmpctx check-discouraged-functions check-amount-access check-bad-sprintf - -check-source: check-source-no-cppcheck +# This should NOT compile things! +check-source: check-makefile check-whitespace check-spelling check-python-flake8 check-includes check-shellcheck check-setup_locale check-tmpctx check-discouraged-functions check-amount-access check-bad-sprintf full-check: check check-source @@ -710,7 +719,7 @@ TAGS: tags: $(RM) tags; find * -name test -type d -prune -o \( -name '*.[ch]' -o -name '*.py' \) -print0 | xargs -0 ctags --append -ccan/ccan/cdump/tools/cdump-enumstr: ccan/ccan/cdump/tools/cdump-enumstr.o $(CDUMP_OBJS) $(CCAN_OBJS) +ccan/ccan/cdump/tools/cdump-enumstr: ccan/ccan/cdump/tools/cdump-enumstr.o libccan.a ALL_PROGRAMS += ccan/ccan/cdump/tools/cdump-enumstr # Can't add to ALL_OBJS, as that makes a circular dep. @@ -732,6 +741,9 @@ endif header_versions_gen.h: tools/headerversions $(FORCE) @tools/headerversions $@ +# Once you have libccan.a, you don't need these. +.INTERMEDIATE: $(CCAN_OBJS) + # We make a static library, this way linker can discard unused parts. libccan.a: $(CCAN_OBJS) @$(call VERBOSE, "ar $@", $(AR) r $@ $(CCAN_OBJS)) @@ -953,25 +965,21 @@ install-data: installdirs $(MAN1PAGES) $(MAN5PAGES) $(MAN7PAGES) $(MAN8PAGES) $( install: install-program install-data -# Non-artifacts that are needed for testing. These are added to the -# testpack.tar, used to transfer things between builder and tester -# phase. If you get a missing file/executable while testing on CI it -# is likely missing from this variable. -TESTBINS = \ - $(CLN_PLUGIN_EXAMPLES) \ - tests/plugins/test_libplugin \ - tests/plugins/channeld_fakenet \ - tests/plugins/test_selfdisable_after_getmanifest +# We exclude most of target/ and external, but we need: +# 1. config files (we only tar up files *newer* than these) +# 2. $(DEFAULT_TARGETS) for rust stuff. +# 3. $(EXTERNAL_LIBS) for prebuild external libraries. +TESTPACK_EXTRAS := \ + config.vars ccan/config.h \ + header_versions_gen.h \ + $(DEFAULT_TARGETS) \ + $(EXTERNAL_LIBS) # The testpack is used in CI to transfer built artefacts between the -# build and the test phase. This is necessary because the fixtures in -# `tests/` explicitly use the binaries built in the current directory -# rather than using `$PATH`, as that may pick up some other installed -# version of `lightningd` leading to bogus results. We bundle up all -# built artefacts here, and will unpack them on the tester (overlaying -# on top of the checked out repo as if we had just built it in place). -testpack.tar.bz2: $(BIN_PROGRAMS) $(PKGLIBEXEC_PROGRAMS) $(PLUGINS) $(PY_PLUGINS) $(MAN1PAGES) $(MAN5PAGES) $(MAN7PAGES) $(MAN8PAGES) $(DOC_DATA) config.vars $(TESTBINS) $(DEVTOOLS) $(TOOLS) - tar -caf $@ $^ +# build and the test phase. Only useful on a freshly build tree! +# We use Posix format for timestamps with subsecond accuracy. +testpack.tar.gz: all-programs all-fuzz-programs all-test-programs default-targets + (find * -path external -prune -o -path target -prune -o -newer config.vars -type f -print; ls $(TESTPACK_EXTRAS)) | tar --verbatim-files-from -T- -c --format=posix -f - | gzip -5 > $@ uninstall: @$(NORMAL_UNINSTALL) @@ -1147,7 +1155,11 @@ ccan-rune-rune.o: $(CCANDIR)/ccan/rune/rune.c ccan-rune-coding.o: $(CCANDIR)/ccan/rune/coding.c @$(call VERBOSE, "cc $<", $(CC) $(CFLAGS) -c -o $@ $<) -print-binary-sizes: $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS) - @find $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS) -printf '%p\t%s\n' - @echo 'Total program size: '`find $(ALL_PROGRAMS) -printf '%s\n' | awk '{TOTAL+= $$1} END {print TOTAL}'` - @echo 'Total tests size: '`find $(ALL_TEST_PROGRAMS) -printf '%s\n' | awk '{TOTAL+= $$1} END {print TOTAL}'` +canned-gossmap: devtools/gossmap-compress + DATE=`date +%Y-%m-%d` && devtools/gossmap-compress compress --output-node-map /tmp/gossip_store tests/data/gossip-store-$$DATE.compressed > tests/data/gossip-store-$$DATE-node-map && xz -9 tests/data/gossip-store-$$DATE-node-map && ls -l tests/data/gossip-store-$$DATE* + +print-binary-sizes: $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS) $(BIN_PROGRAMS) + @echo User programs: + @size -t $(PKGLIBEXEC_PROGRAMS) $(filter-out tools/reckless,$(BIN_PROGRAMS)) $(PLUGINS) + @echo All programs: + @size -t $(ALL_PROGRAMS) $(ALL_TEST_PROGRAMS) | tail -n1 diff --git a/README.md b/README.md index ebab277fb7b8..5de21964a36f 100644 --- a/README.md +++ b/README.md @@ -166,7 +166,7 @@ This returns some internal details, and a standard invoice string called `bolt11 [BOLT11]: https://github.com/lightning/bolts/blob/master/11-payment-encoding.md -The sender can feed this `bolt11` string to the `decodepay` command to see what it is, and pay it simply using the `pay` command: +The sender can feed this `bolt11` string to the `decode` command to see what it is, and pay it simply using the `pay` command: ```bash lightning-cli pay diff --git a/Taskfile.yml b/Taskfile.yml index 0daf83fb62a7..4c0c8fb7f5d7 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -12,12 +12,15 @@ tasks: dir: '.' deps: - build + env: + TEST_LOG_IGNORE_ERRORS: "1" cmds: - uv run pytest --force-flaky -vvv -n {{ .PYTEST_PAR }} tests {{ .CLI_ARGS }} test-liquid: env: TEST_NETWORK: "liquid-regtest" + TEST_LOG_IGNORE_ERRORS: "1" cmds: - sed -i 's/TEST_NETWORK=regtest/TEST_NETWORK=liquid-regtest/g' config.vars - uv run make cln-grpc/proto/node.proto @@ -62,6 +65,8 @@ tasks: deps: - in-docker-init - in-docker-build-deps + env: + TEST_LOG_IGNORE_ERRORS: "1" cmds: # This way of copying allows us to copy the dirty tree, without # triggering any of the potentially configured hooks which might diff --git a/bitcoin/short_channel_id.h b/bitcoin/short_channel_id.h index 3c7cce9036bc..0a49a73fc7d7 100644 --- a/bitcoin/short_channel_id.h +++ b/bitcoin/short_channel_id.h @@ -17,7 +17,7 @@ static inline bool short_channel_id_eq(struct short_channel_id a, return a.u64 == b.u64; } -static inline size_t short_channel_id_hash(struct short_channel_id scid) +static inline size_t hash_scid(struct short_channel_id scid) { /* scids cost money to generate, so simple hash works here */ return (scid.u64 >> 32) ^ (scid.u64 >> 16) ^ scid.u64; @@ -46,6 +46,12 @@ static inline bool short_channel_id_dir_eq(const struct short_channel_id_dir *a, return short_channel_id_eq(a->scid, b->scid) && a->dir == b->dir; } +static inline size_t hash_scidd(const struct short_channel_id_dir *scidd) +{ + /* Bottom bit is common, so use bit 4 for direction */ + return hash_scid(scidd->scid) | (scidd->dir << 4); +} + static inline u32 short_channel_id_blocknum(struct short_channel_id scid) { return scid.u64 >> 40; diff --git a/ccan/README b/ccan/README index 8b589bc9eaae..e15812c17108 100644 --- a/ccan/README +++ b/ccan/README @@ -1,3 +1,3 @@ CCAN imported from http://ccodearchive.net. -CCAN version: init-2606-g5f219f03 +CCAN version: init-2608-gb35fabb6 diff --git a/ccan/ccan/json_out/json_out.c b/ccan/ccan/json_out/json_out.c index 53837e67c33a..9e371343ac75 100644 --- a/ccan/ccan/json_out/json_out.c +++ b/ccan/ccan/json_out/json_out.c @@ -9,7 +9,7 @@ struct json_out { /* Callback if we reallocate. */ void (*move_cb)(struct json_out *jout, ptrdiff_t delta, void *arg); void *cb_arg; - + #ifdef CCAN_JSON_OUT_DEBUG /* tal_arr of types ( or [ we're enclosed in. NULL if oom. */ char *wrapping; @@ -246,7 +246,7 @@ bool json_out_addv(struct json_out *jout, dst = mkroom(jout, fmtlen + 1 + (int)quote*2); if (!dst) goto out; - vsprintf(dst + quote, fmt, ap2); + vsnprintf(dst + quote, fmtlen + 1, fmt, ap2); } #ifdef CCAN_JSON_OUT_DEBUG @@ -294,7 +294,14 @@ bool json_out_addstr(struct json_out *jout, const char *fieldname, const char *str) { - size_t len = strlen(str); + return json_out_addstrn(jout, fieldname, str, strlen(str)); +} + +bool json_out_addstrn(struct json_out *jout, + const char *fieldname, + const char *str, + size_t len) +{ char *p; struct json_escape *e; diff --git a/ccan/ccan/json_out/json_out.h b/ccan/ccan/json_out/json_out.h index da8b4ffa7062..eab20b7a9075 100644 --- a/ccan/ccan/json_out/json_out.h +++ b/ccan/ccan/json_out/json_out.h @@ -121,6 +121,20 @@ bool json_out_addstr(struct json_out *jout, const char *fieldname, const char *str); +/** + * json_out_addstrn - convenience helper to add a string field (with length). + * @jout: the json_out object to write into. + * @fieldname: optional fieldname to prepend. + * @str: the string to add (must not be NULL). + * @len: the length of @str + * + * Equivalent to json_out_add(@jout, @fieldname, true, "%.*s", @len, @str); + */ +bool json_out_addstrn(struct json_out *jout, + const char *fieldname, + const char *str, + size_t len); + /** * json_out_member_direct - add a field, with direct access. * @jout: the json_out object to write into. diff --git a/ccan/ccan/json_out/test/run.c b/ccan/ccan/json_out/test/run.c index f6f9d41ee288..2fe9cbcfcbd2 100644 --- a/ccan/ccan/json_out/test/run.c +++ b/ccan/ccan/json_out/test/run.c @@ -69,7 +69,7 @@ static void test_json_out_add(const tal_t *ctx, } } -static void json_eq(const struct json_out *jout, const char *expect) +static void json_eq(struct json_out *jout, const char *expect) { size_t len; const char *p; diff --git a/channeld/channeld.c b/channeld/channeld.c index bef107c66f4e..467cfd1e340f 100644 --- a/channeld/channeld.c +++ b/channeld/channeld.c @@ -4099,6 +4099,16 @@ static void splice_accepter(struct peer *peer, const u8 *inmsg) } } else if (type == WIRE_TX_INIT_RBF) { + /* BOLT #2: + * The sender: + * - MUST NOT send `tx_init_rbf` if `option_zeroconf` + * has been negotiated. + */ + if (channel_type_has(peer->channel->type, OPT_ZEROCONF)) + peer_failed_warn(peer->pps, &peer->channel_id, + "Peer sent tx_init_rbf but channel" + " uses option_zeroconf"); + if (!fromwire_tx_init_rbf(tmpctx, inmsg, &channel_id, &locktime, @@ -4793,6 +4803,16 @@ static void handle_splice_stfu_success(struct peer *peer) &peer->channel->funding_pubkey[LOCAL]); } else { /* RBF attempt */ + /* BOLT #2: + * The sender: + * - MUST NOT send `tx_init_rbf` if `option_zeroconf` + * has been negotiated. + */ + if (channel_type_has(peer->channel->type, OPT_ZEROCONF)) + peer_failed_warn(peer->pps, &peer->channel_id, + "Cannot RBF splice: channel uses" + " option_zeroconf"); + init_rbf_tlvs = tlv_tx_init_rbf_tlvs_new(tmpctx); init_rbf_tlvs->funding_output_contribution = tal(init_rbf_tlvs, s64); *init_rbf_tlvs->funding_output_contribution = peer->splicing->opener_relative; diff --git a/cln-grpc/proto/node.proto b/cln-grpc/proto/node.proto index 1835e22df849..8010a927953f 100644 --- a/cln-grpc/proto/node.proto +++ b/cln-grpc/proto/node.proto @@ -59,7 +59,6 @@ service Node { rpc TxSend(TxsendRequest) returns (TxsendResponse) {} rpc ListPeerChannels(ListpeerchannelsRequest) returns (ListpeerchannelsResponse) {} rpc ListClosedChannels(ListclosedchannelsRequest) returns (ListclosedchannelsResponse) {} - rpc DecodePay(DecodepayRequest) returns (DecodepayResponse) {} rpc Decode(DecodeRequest) returns (DecodeResponse) {} rpc DelPay(DelpayRequest) returns (DelpayResponse) {} rpc DelForward(DelforwardRequest) returns (DelforwardResponse) {} @@ -150,6 +149,7 @@ service Node { rpc ListChainMoves(ListchainmovesRequest) returns (ListchainmovesResponse) {} rpc ListNetworkEvents(ListnetworkeventsRequest) returns (ListnetworkeventsResponse) {} rpc DelNetworkEvent(DelnetworkeventRequest) returns (DelnetworkeventResponse) {} + rpc ClnrestRegisterPath(ClnrestregisterpathRequest) returns (ClnrestregisterpathResponse) {} rpc SubscribeBlockAdded(StreamBlockAddedRequest) returns (stream BlockAddedNotification) {} rpc SubscribeChannelOpenFailed(StreamChannelOpenFailedRequest) returns (stream ChannelOpenFailedNotification) {} @@ -547,8 +547,6 @@ message CloseResponse { UNOPENED = 2; } CloseType item_type = 1; - optional bytes tx = 2; - optional bytes txid = 3; repeated bytes txs = 4; repeated bytes txids = 5; } @@ -1398,6 +1396,7 @@ message TxsendResponse { message ListpeerchannelsRequest { optional bytes id = 1; optional string short_channel_id = 2; + optional bytes channel_id = 3; } message ListpeerchannelsResponse { @@ -1584,49 +1583,6 @@ message ListclosedchannelsClosedchannelsAlias { optional string remote = 2; } -message DecodepayRequest { - string bolt11 = 1; - optional string description = 2; -} - -message DecodepayResponse { - string currency = 1; - uint64 created_at = 2; - uint64 expiry = 3; - bytes payee = 4; - optional Amount amount_msat = 5; - bytes payment_hash = 6; - string signature = 7; - optional string description = 8; - optional bytes description_hash = 9; - uint32 min_final_cltv_expiry = 10; - optional bytes payment_secret = 11; - optional bytes features = 12; - optional bytes payment_metadata = 13; - repeated DecodepayFallbacks fallbacks = 14; - repeated DecodepayExtra extra = 16; - optional DecodeRoutehintList routes = 17; -} - -message DecodepayFallbacks { - // DecodePay.fallbacks[].type - enum DecodepayFallbacksType { - P2PKH = 0; - P2SH = 1; - P2WPKH = 2; - P2WSH = 3; - P2TR = 4; - } - DecodepayFallbacksType item_type = 1; - optional string addr = 2; - bytes hex = 3; -} - -message DecodepayExtra { - string tag = 1; - string data = 2; -} - message DecodeRequest { string string = 1; } @@ -2471,6 +2427,7 @@ message OfferRequest { optional bool single_use = 11; optional bool proportional_amount = 13; optional bool optional_recurrence = 14; + repeated bytes fronting_nodes = 15; } message OfferResponse { @@ -3119,6 +3076,8 @@ message ListconfigsConfigs { optional ListconfigsConfigsCommitfee commit_fee = 69; optional ListconfigsConfigsCommitfeerateoffset commit_feerate_offset = 70; optional ListconfigsConfigsAutoconnectseekerpeers autoconnect_seeker_peers = 71; + optional ListconfigsConfigsCurrencyrateaddsource currencyrate_add_source = 74; + optional ListconfigsConfigsCurrencyratedisablesource currencyrate_disable_source = 75; } message ListconfigsConfigsConf { @@ -3484,6 +3443,18 @@ message ListconfigsConfigsAutoconnectseekerpeers { string source = 2; } +message ListconfigsConfigsCurrencyrateaddsource { + repeated string values_str = 1; + repeated string sources = 2; + optional string plugin = 3; +} + +message ListconfigsConfigsCurrencyratedisablesource { + repeated string values_str = 1; + repeated string sources = 2; + optional string plugin = 3; +} + message StopRequest { } @@ -4314,6 +4285,23 @@ message DelnetworkeventRequest { message DelnetworkeventResponse { } +message ClnrestregisterpathRequest { + string path = 1; + string rpc_method = 2; + optional ClnrestregisterpathRuneRestrictions rune_restrictions = 3; + optional bool rune_required = 4; + optional string http_method = 5; +} + +message ClnrestregisterpathResponse { +} + +message ClnrestregisterpathRuneRestrictions { + optional string nodeid = 1; + optional string method = 2; + map params = 3; +} + message StreamBlockAddedRequest { } diff --git a/cln-grpc/src/convert.rs b/cln-grpc/src/convert.rs index c4701c6f483e..fa3d4fd0107f 100644 --- a/cln-grpc/src/convert.rs +++ b/cln-grpc/src/convert.rs @@ -9,6 +9,7 @@ use cln_rpc::model::{responses,requests}; use cln_rpc::notifications; use crate::pb; use std::str::FromStr; +use std::collections::HashMap; use bitcoin::hashes::sha256::Hash as Sha256; use bitcoin::hashes::Hash; use cln_rpc::primitives::PublicKey; @@ -448,14 +449,10 @@ impl From for pb::CheckmessageResponse { } } -#[allow(unused_variables,deprecated)] +#[allow(unused_variables)] impl From for pb::CloseResponse { fn from(c: responses::CloseResponse) -> Self { Self { - #[allow(deprecated)] - tx: c.tx.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex? - #[allow(deprecated)] - txid: c.txid.map(|v| hex::decode(v).unwrap()), // Rule #2 for type txid? // Field: Close.txids[] txids: c.txids.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 // Field: Close.txs[] @@ -1459,53 +1456,6 @@ impl From for pb::ListclosedchannelsRespo } } -#[allow(unused_variables)] -impl From for pb::DecodepayExtra { - fn from(c: responses::DecodepayExtra) -> Self { - Self { - data: c.data, // Rule #2 for type string - tag: c.tag, // Rule #2 for type string - } - } -} - -#[allow(unused_variables)] -impl From for pb::DecodepayFallbacks { - fn from(c: responses::DecodepayFallbacks) -> Self { - Self { - addr: c.addr, // Rule #2 for type string? - hex: hex::decode(&c.hex).unwrap(), // Rule #2 for type hex - item_type: c.item_type as i32, - } - } -} - -#[allow(unused_variables)] -impl From for pb::DecodepayResponse { - fn from(c: responses::DecodepayResponse) -> Self { - Self { - amount_msat: c.amount_msat.map(|f| f.into()), // Rule #2 for type msat? - created_at: c.created_at, // Rule #2 for type u64 - currency: c.currency, // Rule #2 for type string - description: c.description, // Rule #2 for type string? - description_hash: c.description_hash.map(|v| >::as_ref(&v).to_vec()), // Rule #2 for type hash? - expiry: c.expiry, // Rule #2 for type u64 - // Field: DecodePay.extra[] - extra: c.extra.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 - // Field: DecodePay.fallbacks[] - fallbacks: c.fallbacks.map(|arr| arr.into_iter().map(|i| i.into()).collect()).unwrap_or(vec![]), // Rule #3 - features: c.features.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex? - min_final_cltv_expiry: c.min_final_cltv_expiry, // Rule #2 for type u32 - payee: c.payee.serialize().to_vec(), // Rule #2 for type pubkey - payment_hash: >::as_ref(&c.payment_hash).to_vec(), // Rule #2 for type hash - payment_metadata: c.payment_metadata.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex? - payment_secret: c.payment_secret.map(|v| >::as_ref(&v).to_vec()), // Rule #2 for type hash? - routes: c.routes.map(|drl| drl.into()), // Rule #2 for type DecodeRoutehintList? - signature: c.signature, // Rule #2 for type signature - } - } -} - #[allow(unused_variables)] impl From for pb::DecodeExtra { fn from(c: responses::DecodeExtra) -> Self { @@ -3038,6 +2988,32 @@ impl From for pb::ListconfigsConfigsConf { } } +#[allow(unused_variables)] +impl From for pb::ListconfigsConfigsCurrencyrateaddsource { + fn from(c: responses::ListconfigsConfigsCurrencyrateaddsource) -> Self { + Self { + plugin: c.plugin, // Rule #2 for type string? + // Field: ListConfigs.configs.currencyrate-add-source.sources[] + sources: c.sources.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string + // Field: ListConfigs.configs.currencyrate-add-source.values_str[] + values_str: c.values_str.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string + } + } +} + +#[allow(unused_variables)] +impl From for pb::ListconfigsConfigsCurrencyratedisablesource { + fn from(c: responses::ListconfigsConfigsCurrencyratedisablesource) -> Self { + Self { + plugin: c.plugin, // Rule #2 for type string? + // Field: ListConfigs.configs.currencyrate-disable-source.sources[] + sources: c.sources.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string + // Field: ListConfigs.configs.currencyrate-disable-source.values_str[] + values_str: c.values_str.into_iter().map(|i| i.into()).collect(), // Rule #3 for type string + } + } +} + #[allow(unused_variables)] impl From for pb::ListconfigsConfigsDaemon { fn from(c: responses::ListconfigsConfigsDaemon) -> Self { @@ -3595,6 +3571,8 @@ impl From for pb::ListconfigsConfigs { commit_feerate_offset: c.commit_feerate_offset.map(|v| v.into()), commit_time: c.commit_time.map(|v| v.into()), conf: c.conf.map(|v| v.into()), + currencyrate_add_source: c.currencyrate_add_source.map(|v| v.into()), + currencyrate_disable_source: c.currencyrate_disable_source.map(|v| v.into()), daemon: c.daemon.map(|v| v.into()), database_upgrade: c.database_upgrade.map(|v| v.into()), developer: c.developer.map(|v| v.into()), @@ -4583,6 +4561,14 @@ impl From for pb::DelnetworkeventResponse { } } +#[allow(unused_variables)] +impl From for pb::ClnrestregisterpathResponse { + fn from(c: responses::ClnrestregisterpathResponse) -> Self { + Self { + } + } +} + #[allow(unused_variables)] impl From for pb::BlockAddedNotification { fn from(c: notifications::BlockAddedNotification) -> Self { @@ -5287,6 +5273,7 @@ impl From for pb::TxsendRequest { impl From for pb::ListpeerchannelsRequest { fn from(c: requests::ListpeerchannelsRequest) -> Self { Self { + channel_id: c.channel_id.map(|v| >::as_ref(&v).to_vec()), // Rule #2 for type hash? id: c.id.map(|v| v.serialize().to_vec()), // Rule #2 for type pubkey? short_channel_id: c.short_channel_id.map(|v| v.to_string()), // Rule #2 for type short_channel_id? } @@ -5302,16 +5289,6 @@ impl From for pb::ListclosedchannelsRequest } } -#[allow(unused_variables)] -impl From for pb::DecodepayRequest { - fn from(c: requests::DecodepayRequest) -> Self { - Self { - bolt11: c.bolt11, // Rule #2 for type string - description: c.description, // Rule #2 for type string? - } - } -} - #[allow(unused_variables)] impl From for pb::DecodeRequest { fn from(c: requests::DecodeRequest) -> Self { @@ -5648,6 +5625,8 @@ impl From for pb::OfferRequest { absolute_expiry: c.absolute_expiry, // Rule #2 for type u64? amount: c.amount, // Rule #2 for type string description: c.description, // Rule #2 for type string? + // Field: Offer.fronting_nodes[] + fronting_nodes: c.fronting_nodes.map(|arr| arr.into_iter().map(|i| i.serialize().to_vec()).collect()).unwrap_or(vec![]), // Rule #3 issuer: c.issuer, // Rule #2 for type string? label: c.label, // Rule #2 for type string? optional_recurrence: c.optional_recurrence, // Rule #2 for type boolean? @@ -6409,6 +6388,30 @@ impl From for pb::DelnetworkeventRequest { } } +#[allow(unused_variables)] +impl From for pb::ClnrestregisterpathRuneRestrictions { + fn from(c: requests::ClnrestregisterpathRuneRestrictions) -> Self { + Self { + method: c.method, // Rule #2 for type string? + nodeid: c.nodeid, // Rule #2 for type string? + params: c.params.unwrap_or(HashMap::new()), // Rule #2 for type string_map? + } + } +} + +#[allow(unused_variables)] +impl From for pb::ClnrestregisterpathRequest { + fn from(c: requests::ClnrestregisterpathRequest) -> Self { + Self { + http_method: c.http_method, // Rule #2 for type string? + path: c.path, // Rule #2 for type string + rpc_method: c.rpc_method, // Rule #2 for type string + rune_required: c.rune_required, // Rule #2 for type boolean? + rune_restrictions: c.rune_restrictions.map(|v| v.into()), + } + } +} + #[allow(unused_variables)] impl From for pb::StreamBlockAddedRequest { fn from(c: notifications::requests::StreamBlockAddedRequest) -> Self { @@ -7065,6 +7068,7 @@ impl From for requests::TxsendRequest { impl From for requests::ListpeerchannelsRequest { fn from(c: pb::ListpeerchannelsRequest) -> Self { Self { + channel_id: c.channel_id.map(|v| Sha256::from_slice(&v).unwrap()), // Rule #1 for type hash? id: c.id.map(|v| PublicKey::from_slice(&v).unwrap()), // Rule #1 for type pubkey? short_channel_id: c.short_channel_id.map(|v| cln_rpc::primitives::ShortChannelId::from_str(&v).unwrap()), // Rule #1 for type short_channel_id? } @@ -7080,16 +7084,6 @@ impl From for requests::ListclosedchannelsRequest } } -#[allow(unused_variables)] -impl From for requests::DecodepayRequest { - fn from(c: pb::DecodepayRequest) -> Self { - Self { - bolt11: c.bolt11, // Rule #1 for type string - description: c.description, // Rule #1 for type string? - } - } -} - #[allow(unused_variables)] impl From for requests::DecodeRequest { fn from(c: pb::DecodeRequest) -> Self { @@ -7418,6 +7412,7 @@ impl From for requests::OfferRequest { absolute_expiry: c.absolute_expiry, // Rule #1 for type u64? amount: c.amount, // Rule #1 for type string description: c.description, // Rule #1 for type string? + fronting_nodes: Some(c.fronting_nodes.into_iter().map(|s| PublicKey::from_slice(&s).unwrap()).collect()), // Rule #4 issuer: c.issuer, // Rule #1 for type string? label: c.label, // Rule #1 for type string? optional_recurrence: c.optional_recurrence, // Rule #1 for type boolean? @@ -8170,6 +8165,30 @@ impl From for requests::DelnetworkeventRequest { } } +#[allow(unused_variables)] +impl From for requests::ClnrestregisterpathRuneRestrictions { + fn from(c: pb::ClnrestregisterpathRuneRestrictions) -> Self { + Self { + method: c.method, // Rule #1 for type string? + nodeid: c.nodeid, // Rule #1 for type string? + params: Some(c.params), // Rule #1 for type string_map? + } + } +} + +#[allow(unused_variables)] +impl From for requests::ClnrestregisterpathRequest { + fn from(c: pb::ClnrestregisterpathRequest) -> Self { + Self { + http_method: c.http_method, // Rule #1 for type string? + path: c.path, // Rule #1 for type string + rpc_method: c.rpc_method, // Rule #1 for type string + rune_required: c.rune_required, // Rule #1 for type boolean? + rune_restrictions: c.rune_restrictions.map(|v| v.into()), + } + } +} + #[allow(unused_variables)] impl From for notifications::requests::StreamBlockAddedRequest { fn from(c: pb::StreamBlockAddedRequest) -> Self { diff --git a/cln-grpc/src/server.rs b/cln-grpc/src/server.rs index cd42a1614ead..eab35a993a58 100644 --- a/cln-grpc/src/server.rs +++ b/cln-grpc/src/server.rs @@ -1714,38 +1714,6 @@ impl Node for Server } - async fn decode_pay( - &self, - request: tonic::Request, - ) -> Result, tonic::Status> { - let req = request.into_inner(); - let req: requests::DecodepayRequest = req.into(); - debug!("Client asked for decode_pay"); - trace!("decode_pay request: {:?}", req); - let mut rpc = ClnRpc::new(&self.rpc_path) - .await - .map_err(|e| Status::new(Code::Internal, e.to_string()))?; - let result = rpc.call(Request::DecodePay(req)) - .await - .map_err(|e| Status::new( - Code::Unknown, - format!("Error calling method DecodePay: {:?}", e)))?; - match result { - Response::DecodePay(r) => { - trace!("decode_pay response: {:?}", r); - Ok(tonic::Response::new(r.into())) - }, - r => Err(Status::new( - Code::Internal, - format!( - "Unexpected result {:?} to method call DecodePay", - r - ) - )), - } - - } - async fn decode( &self, request: tonic::Request, @@ -4626,6 +4594,38 @@ impl Node for Server } + async fn clnrest_register_path( + &self, + request: tonic::Request, + ) -> Result, tonic::Status> { + let req = request.into_inner(); + let req: requests::ClnrestregisterpathRequest = req.into(); + debug!("Client asked for clnrest_register_path"); + trace!("clnrest_register_path request: {:?}", req); + let mut rpc = ClnRpc::new(&self.rpc_path) + .await + .map_err(|e| Status::new(Code::Internal, e.to_string()))?; + let result = rpc.call(Request::ClnrestRegisterPath(req)) + .await + .map_err(|e| Status::new( + Code::Unknown, + format!("Error calling method ClnrestRegisterPath: {:?}", e)))?; + match result { + Response::ClnrestRegisterPath(r) => { + trace!("clnrest_register_path response: {:?}", r); + Ok(tonic::Response::new(r.into())) + }, + r => Err(Status::new( + Code::Internal, + format!( + "Unexpected result {:?} to method call ClnrestRegisterPath", + r + ) + )), + } + + } + type SubscribeBlockAddedStream = NotificationStream; diff --git a/cln-rpc/Makefile b/cln-rpc/Makefile index c43467ab0c94..808dd71cca13 100644 --- a/cln-rpc/Makefile +++ b/cln-rpc/Makefile @@ -9,13 +9,13 @@ DEFAULT_TARGETS += $(CLN_RPC_EXAMPLES) $(CLN_RPC_GENALL) MSGGEN_GENALL += $(CLN_RPC_GENALL) target/${RUST_PROFILE}/examples/cln-rpc-getinfo: ${CLN_RPC_SOURCES} cln-rpc/examples/getinfo.rs - cargo build ${CARGO_OPTS} --example cln-rpc-getinfo + $(CARGO) build ${CARGO_OPTS} --example cln-rpc-getinfo target/${RUST_PROFILE}/examples/cln-plugin-startup: ${CLN_RPC_SOURCES} plugins/examples/cln-plugin-startup.rs - cargo build ${CARGO_OPTS} --example cln-plugin-startup + $(CARGO) build ${CARGO_OPTS} --example cln-plugin-startup target/${RUST_PROFILE}/examples/cln-plugin-reentrant: ${CLN_RPC_SOURCES} plugins/examples/cln-plugin-reentrant.rs - cargo build ${CARGO_OPTS} --example cln-plugin-reentrant + $(CARGO) build ${CARGO_OPTS} --example cln-plugin-reentrant cln-rpc-all: ${CLN_RPC_GENALL} ${CLN_RPC_EXAMPLES} diff --git a/cln-rpc/src/codec.rs b/cln-rpc/src/codec.rs index 25af70258ea8..ccecc73449a5 100644 --- a/cln-rpc/src/codec.rs +++ b/cln-rpc/src/codec.rs @@ -12,22 +12,13 @@ use std::{io, str}; use tokio_util::codec::{Decoder, Encoder}; pub use crate::jsonrpc::JsonRpc; -use crate::{ - model::{Request}, - notifications::Notification, -}; +use crate::{model::Request, notifications::Notification}; /// A simple codec that parses messages separated by two successive /// `\n` newlines. #[derive(Default)] -pub struct MultiLineCodec {} - -/// Find two consecutive newlines, i.e., an empty line, signalling the -/// end of one message and the start of the next message. -fn find_separator(buf: &mut BytesMut) -> Option { - buf.iter() - .zip(buf.iter().skip(1)) - .position(|b| *b.0 == b'\n' && *b.1 == b'\n') +pub struct MultiLineCodec { + search_pos: usize, } fn utf8(buf: &[u8]) -> Result<&str, io::Error> { @@ -39,14 +30,24 @@ impl Decoder for MultiLineCodec { type Item = String; type Error = Error; fn decode(&mut self, buf: &mut BytesMut) -> Result, Error> { - if let Some(newline_offset) = find_separator(buf) { - let line = buf.split_to(newline_offset + 2); - let line = &line[..line.len() - 2]; - let line = utf8(line)?; - Ok(Some(line.to_string())) - } else { - Ok(None) + let bytes = &buf[..]; + let mut i = self.search_pos; + + while i + 1 < bytes.len() { + if bytes[i] == b'\n' && bytes[i + 1] == b'\n' { + let line = buf.split_to(i + 2); + let line = &line[..line.len() - 2]; + + self.search_pos = 0; + + return Ok(Some(utf8(line)?.to_owned())); + } + i += 1; } + + self.search_pos = bytes.len().saturating_sub(1); + + Ok(None) } } @@ -129,27 +130,11 @@ impl Decoder for JsonRpcCodec { #[cfg(test)] mod test { - use super::{find_separator, JsonCodec, MultiLineCodec}; + use super::{JsonCodec, MultiLineCodec}; use bytes::{BufMut, BytesMut}; use serde_json::json; use tokio_util::codec::{Decoder, Encoder}; - #[test] - fn test_separator() { - struct Test(String, Option); - let tests = vec![ - Test("".to_string(), None), - Test("}\n\n".to_string(), Some(1)), - Test("\"hello\"},\n\"world\"}\n\n".to_string(), Some(18)), - ]; - - for t in tests.iter() { - let mut buf = BytesMut::new(); - buf.put_slice(t.0.as_bytes()); - assert_eq!(find_separator(&mut buf), t.1); - } - } - #[test] fn test_ml_decoder() { struct Test(String, Option, String); diff --git a/cln-rpc/src/model.rs b/cln-rpc/src/model.rs index 229f2bc41be9..e0a12e49dce2 100644 --- a/cln-rpc/src/model.rs +++ b/cln-rpc/src/model.rs @@ -70,7 +70,6 @@ pub enum Request { TxSend(requests::TxsendRequest), ListPeerChannels(requests::ListpeerchannelsRequest), ListClosedChannels(requests::ListclosedchannelsRequest), - DecodePay(requests::DecodepayRequest), Decode(requests::DecodeRequest), DelPay(requests::DelpayRequest), DelForward(requests::DelforwardRequest), @@ -194,6 +193,8 @@ pub enum Request { ListChainMoves(requests::ListchainmovesRequest), ListNetworkEvents(requests::ListnetworkeventsRequest), DelNetworkEvent(requests::DelnetworkeventRequest), + #[serde(rename = "clnrest-register-path")] + ClnrestRegisterPath(requests::ClnrestregisterpathRequest), } #[derive(Clone, Debug, Serialize, Deserialize)] @@ -254,7 +255,6 @@ pub enum Response { TxSend(responses::TxsendResponse), ListPeerChannels(responses::ListpeerchannelsResponse), ListClosedChannels(responses::ListclosedchannelsResponse), - DecodePay(responses::DecodepayResponse), Decode(responses::DecodeResponse), DelPay(responses::DelpayResponse), DelForward(responses::DelforwardResponse), @@ -378,6 +378,8 @@ pub enum Response { ListChainMoves(responses::ListchainmovesResponse), ListNetworkEvents(responses::ListnetworkeventsResponse), DelNetworkEvent(responses::DelnetworkeventResponse), + #[serde(rename = "clnrest-register-path")] + ClnrestRegisterPath(responses::ClnrestregisterpathResponse), } @@ -400,6 +402,7 @@ pub mod requests { #[allow(unused_imports)] use serde::{{Deserialize, Serialize}}; use core::fmt::Debug; + use std::collections::HashMap; use super::{IntoRequest, Request, TypedRequest}; #[derive(Clone, Debug, Deserialize, Serialize)] pub struct GetinfoRequest { @@ -2006,6 +2009,8 @@ pub mod requests { } #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ListpeerchannelsRequest { + #[serde(skip_serializing_if = "Option::is_none")] + pub channel_id: Option, #[serde(skip_serializing_if = "Option::is_none")] pub id: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -2053,30 +2058,6 @@ pub mod requests { } } #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct DecodepayRequest { - #[serde(skip_serializing_if = "Option::is_none")] - pub description: Option, - pub bolt11: String, - } - - impl From for Request { - fn from(r: DecodepayRequest) -> Self { - Request::DecodePay(r) - } - } - - impl IntoRequest for DecodepayRequest { - type Response = super::responses::DecodepayResponse; - } - - impl TypedRequest for DecodepayRequest { - type Response = super::responses::DecodepayResponse; - - fn method(&self) -> &str { - "decodepay" - } - } - #[derive(Clone, Debug, Deserialize, Serialize)] pub struct DecodeRequest { pub string: String, } @@ -3162,6 +3143,8 @@ pub mod requests { pub recurrence_paywindow: Option, #[serde(skip_serializing_if = "Option::is_none")] pub single_use: Option, + #[serde(skip_serializing_if = "crate::is_none_or_empty")] + pub fronting_nodes: Option>, pub amount: String, } @@ -5069,6 +5052,45 @@ pub mod requests { "delnetworkevent" } } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct ClnrestregisterpathRuneRestrictions { + #[serde(skip_serializing_if = "Option::is_none")] + pub method: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub nodeid: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub params: Option>, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct ClnrestregisterpathRequest { + #[serde(skip_serializing_if = "Option::is_none")] + pub http_method: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub rune_required: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub rune_restrictions: Option, + pub path: String, + pub rpc_method: String, + } + + impl From for Request { + fn from(r: ClnrestregisterpathRequest) -> Self { + Request::ClnrestRegisterPath(r) + } + } + + impl IntoRequest for ClnrestregisterpathRequest { + type Response = super::responses::ClnrestregisterpathResponse; + } + + impl TypedRequest for ClnrestregisterpathRequest { + type Response = super::responses::ClnrestregisterpathResponse; + + fn method(&self) -> &str { + "clnrest-register-path" + } + } } @@ -5796,12 +5818,6 @@ pub mod responses { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct CloseResponse { - #[deprecated] - #[serde(skip_serializing_if = "Option::is_none")] - pub tx: Option, - #[deprecated] - #[serde(skip_serializing_if = "Option::is_none")] - pub txid: Option, #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub txids: Option>, #[serde(skip_serializing_if = "crate::is_none_or_empty")] @@ -7719,104 +7735,6 @@ pub mod responses { } } - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct DecodepayExtra { - pub data: String, - pub tag: String, - } - - /// ['The address type (if known).'] - #[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] - #[allow(non_camel_case_types)] - pub enum DecodepayFallbacksType { - #[serde(rename = "P2PKH")] - P2PKH = 0, - #[serde(rename = "P2SH")] - P2SH = 1, - #[serde(rename = "P2WPKH")] - P2WPKH = 2, - #[serde(rename = "P2WSH")] - P2WSH = 3, - #[serde(rename = "P2TR")] - P2TR = 4, - } - - impl TryFrom for DecodepayFallbacksType { - type Error = anyhow::Error; - fn try_from(c: i32) -> Result { - match c { - 0 => Ok(DecodepayFallbacksType::P2PKH), - 1 => Ok(DecodepayFallbacksType::P2SH), - 2 => Ok(DecodepayFallbacksType::P2WPKH), - 3 => Ok(DecodepayFallbacksType::P2WSH), - 4 => Ok(DecodepayFallbacksType::P2TR), - o => Err(anyhow::anyhow!("Unknown variant {} for enum DecodepayFallbacksType", o)), - } - } - } - - impl ToString for DecodepayFallbacksType { - fn to_string(&self) -> String { - match self { - DecodepayFallbacksType::P2PKH => "P2PKH", - DecodepayFallbacksType::P2SH => "P2SH", - DecodepayFallbacksType::P2WPKH => "P2WPKH", - DecodepayFallbacksType::P2WSH => "P2WSH", - DecodepayFallbacksType::P2TR => "P2TR", - }.to_string() - } - } - - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct DecodepayFallbacks { - #[serde(skip_serializing_if = "Option::is_none")] - pub addr: Option, - // Path `DecodePay.fallbacks[].type` - #[serde(rename = "type")] - pub item_type: DecodepayFallbacksType, - pub hex: String, - } - - #[derive(Clone, Debug, Deserialize, Serialize)] - pub struct DecodepayResponse { - #[serde(skip_serializing_if = "Option::is_none")] - pub amount_msat: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub description: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub description_hash: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub features: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub payment_metadata: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub payment_secret: Option, - #[serde(skip_serializing_if = "Option::is_none")] - pub routes: Option, - #[serde(skip_serializing_if = "crate::is_none_or_empty")] - pub extra: Option>, - #[serde(skip_serializing_if = "crate::is_none_or_empty")] - pub fallbacks: Option>, - pub created_at: u64, - pub currency: String, - pub expiry: u64, - pub min_final_cltv_expiry: u32, - pub payee: PublicKey, - pub payment_hash: Sha256, - pub signature: String, - } - - impl TryFrom for DecodepayResponse { - type Error = super::TryFromResponseError; - - fn try_from(response: Response) -> Result { - match response { - Response::DecodePay(response) => Ok(response), - _ => Err(TryFromResponseError) - } - } - } - #[derive(Clone, Debug, Deserialize, Serialize)] pub struct DecodeInvreqBip353Name { #[serde(skip_serializing_if = "Option::is_none")] @@ -10521,6 +10439,22 @@ pub mod responses { pub value_int: u32, } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct ListconfigsConfigsCurrencyrateaddsource { + #[serde(skip_serializing_if = "Option::is_none")] + pub plugin: Option, + pub sources: Vec, + pub values_str: Vec, + } + + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct ListconfigsConfigsCurrencyratedisablesource { + #[serde(skip_serializing_if = "Option::is_none")] + pub plugin: Option, + pub sources: Vec, + pub values_str: Vec, + } + #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ListconfigsConfigsDatabaseupgrade { pub source: String, @@ -10928,6 +10862,12 @@ pub mod responses { #[serde(rename = "commit-time")] #[serde(skip_serializing_if = "Option::is_none")] pub commit_time: Option, + #[serde(rename = "currencyrate-add-source")] + #[serde(skip_serializing_if = "Option::is_none")] + pub currencyrate_add_source: Option, + #[serde(rename = "currencyrate-disable-source")] + #[serde(skip_serializing_if = "Option::is_none")] + pub currencyrate_disable_source: Option, #[serde(rename = "database-upgrade")] #[serde(skip_serializing_if = "Option::is_none")] pub database_upgrade: Option, @@ -12538,5 +12478,20 @@ pub mod responses { } } + #[derive(Clone, Debug, Deserialize, Serialize)] + pub struct ClnrestregisterpathResponse { + } + + impl TryFrom for ClnrestregisterpathResponse { + type Error = super::TryFromResponseError; + + fn try_from(response: Response) -> Result { + match response { + Response::ClnrestRegisterPath(response) => Ok(response), + _ => Err(TryFromResponseError) + } + } + } + } diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 000000000000..f156abd38cc5 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,56 @@ +module.exports = { + + plugins: [ + { + rules: { + 'core-lightning': ({ type }) => { + // Allow standard Core Lightning types + const standardTypes = [ + // Daemons + 'channeld', 'closingd', 'connectd', 'gossipd', 'hsmd', 'lightningd', 'onchaind', + 'openingd', + // Related + 'bitcoin', 'cli', 'cln-grpc', 'cln-rpc', 'db', 'wallet', 'wire', + // Others + 'ci', 'common', 'contrib', 'devtools', 'docs', 'docker', 'github', 'global', + 'meta', 'nit', 'nix', 'release', 'script', 'tests', + ]; + + // Extensions + const extensions = ['plugin-', 'pyln-', 'tool-'] + if (type) { + for (const prefix of extensions) { + if (type.startsWith(prefix)) { + return [true]; + } + } + } + + // Otherwise, must be a standard type + if (standardTypes.includes(type)) { + return [true]; + } + + return [ + false, + `Type must be one of [${standardTypes.join(', ')}] or match patterns [${extensions.join(', ')}]` + ]; + }, + }, + }, + ], + + rules: { + // Disable the default type-enum rule since we're using custom validation + 'type-enum': [0], + + // Enable our custom rule + 'core-lightning': [2, 'always'], + + // Keep other standard rules + 'type-case': [2, 'always', 'lower-case'], + 'type-empty': [2, 'never'], + 'subject-empty': [2, 'never'], + 'subject-case': [2, 'never', ['upper-case']], + }, +}; diff --git a/common/Makefile b/common/Makefile index 333e3321cb6a..62ceb252a8ba 100644 --- a/common/Makefile +++ b/common/Makefile @@ -111,7 +111,7 @@ COMMON_SRC_NOGEN := \ common/wire_error.c -COMMON_SRC_GEN := common/status_wiregen.c common/peer_status_wiregen.c common/scb_wiregen.c +COMMON_SRC_GEN := common/status_wiregen.c common/peer_status_wiregen.c common/scb_wiregen.c common/gossip_store_wiregen.c COMMON_HEADERS_NOGEN := $(COMMON_SRC_NOGEN:.c=.h) \ common/closing_fee.h \ @@ -124,7 +124,7 @@ COMMON_HEADERS_NOGEN := $(COMMON_SRC_NOGEN:.c=.h) \ common/jsonrpc_errors.h \ common/overflows.h -COMMON_HEADERS_GEN := common/htlc_state_names_gen.h common/status_wiregen.h common/peer_status_wiregen.h common/scb_wiregen.h +COMMON_HEADERS_GEN := common/htlc_state_names_gen.h common/status_wiregen.h common/peer_status_wiregen.h common/scb_wiregen.h common/gossip_store_wiregen.h COMMON_HEADERS := $(COMMON_HEADERS_GEN) $(COMMON_HEADERS_NOGEN) COMMON_SRC := $(COMMON_SRC_NOGEN) $(COMMON_SRC_GEN) @@ -157,10 +157,8 @@ ALL_C_SOURCES += $(COMMON_SRC) common/htlc_state_names_gen.h: common/htlc_state.h ccan/ccan/cdump/tools/cdump-enumstr ccan/ccan/cdump/tools/cdump-enumstr common/htlc_state.h > $@ -common/gossip_store.o: gossipd/gossip_store_wiregen.h - -check-source-bolt: $(COMMON_SRC_NOGEN:%=bolt-check/%) $(COMMON_HEADERS:%=bolt-check/%) -check-whitespace: $(COMMON_SRC_NOGEN:%=check-whitespace/%) $(COMMON_HEADERS:%=check-whitespace/%) +check-source-bolt: $(COMMON_SRC_NOGEN:%=bolt-check/%) $(COMMON_HEADERS_NOGEN:%=bolt-check/%) +check-whitespace: $(COMMON_SRC_NOGEN:%=check-whitespace/%) $(COMMON_HEADERS_NOGEN:%=check-whitespace/%) clean: common-clean diff --git a/common/bolt12.c b/common/bolt12.c index 1435b35d854a..4621e62f6960 100644 --- a/common/bolt12.c +++ b/common/bolt12.c @@ -171,6 +171,7 @@ struct tlv_offer *offer_decode(const tal_t *ctx, const u8 *data; size_t dlen; const struct tlv_field *badf; + const struct recurrence *recurr; data = string_to_data(tmpctx, b12, b12len, "lno", &dlen, fail); if (!data) @@ -221,6 +222,16 @@ struct tlv_offer *offer_decode(const tal_t *ctx, return tal_free(offer); } + /* BOLT #12: + * + * - if `offer_currency` is set and `offer_amount` is not set: + * - MUST NOT respond to the offer. + */ + if (offer->offer_currency && !offer->offer_amount) { + *fail = tal_strdup(ctx, "Offer contains a currency with no amount"); + return tal_free(offer); + } + /* BOLT #12: * * - if neither `offer_issuer_id` nor `offer_paths` are set: @@ -242,6 +253,46 @@ struct tlv_offer *offer_decode(const tal_t *ctx, } } + /* BOLT-recurrence #12 + * - if `offer_recurrence_optional` or `offer_recurrence_compulsory` are set: + * - if `time_unit` is not one of 0, 1, or 2: + * - MUST NOT respond to the offer. + * - if `period` is 0: + * - MUST NOT respond to the offer. + * - if `offer_recurrence_limit` is set and `max_period_index` is 0: + * - MUST NOT respond to the offer. + */ + recurr = offer_recurrence(offer); + if (recurr) { + if (recurr->time_unit != 0 + && recurr->time_unit != 1 + && recurr->time_unit != 2) { + *fail = tal_fmt(ctx, "Offer contains invalid recurrence time_unit %u", recurr->time_unit); + return tal_free(offer); + } + if (recurr->period == 0) { + *fail = tal_fmt(ctx, "Offer contains invalid recurrence period %u", recurr->period); + return tal_free(offer); + } + if (offer->offer_recurrence_limit && *offer->offer_recurrence_limit == 0) { + *fail = tal_fmt(ctx, "Offer contains invalid recurrence limit %u", + *offer->offer_recurrence_limit); + return tal_free(offer); + } + } else { + /* BOLT-recurrence #12 + * - otherwise: (no recurrence): + * - if it `offer_recurrence_paywindow`, `offer_recurrence_limit` or `offer_recurrence_base` are set: + * - MUST NOT respond to the offer. + */ + if (offer->offer_recurrence_paywindow + || offer->offer_recurrence_limit + || offer->offer_recurrence_base) { + *fail = tal_strdup(ctx, "Offer contains recurrence fields but no recurrence"); + return tal_free(offer); + } + } + return offer; } diff --git a/common/configvar.c b/common/configvar.c index 1148f984b24b..4a3dff39df39 100644 --- a/common/configvar.c +++ b/common/configvar.c @@ -4,6 +4,7 @@ #include #include #include +#include struct configvar *configvar_new(const tal_t *ctx, enum configvar_src src, diff --git a/common/gossip_store.c b/common/gossip_store.c index 3f10dd82b3ce..94a1e6a8eb7c 100644 --- a/common/gossip_store.c +++ b/common/gossip_store.c @@ -1,27 +1,19 @@ #include "config.h" #include -#include +#include #include -/* We cheat and read first two bytes of message too. */ -struct hdr_and_type { - struct gossip_hdr hdr; - be16 type; -}; -/* Beware padding! */ -#define HDR_AND_TYPE_SIZE (sizeof(struct gossip_hdr) + sizeof(u16)) - bool gossip_store_readhdr(int gossip_store_fd, size_t off, size_t *len, u32 *timestamp, u16 *flags, u16 *type) { - struct hdr_and_type buf; + struct gossip_hdr_and_type buf; int r; - r = pread(gossip_store_fd, &buf, HDR_AND_TYPE_SIZE, off); - if (r != HDR_AND_TYPE_SIZE) + r = pread(gossip_store_fd, &buf, GOSSIP_HDR_AND_TYPE_SIZE, off); + if (r != GOSSIP_HDR_AND_TYPE_SIZE) return false; if (!(buf.hdr.flags & CPU_TO_BE16(GOSSIP_STORE_COMPLETED_BIT))) return false; diff --git a/common/gossip_store.h b/common/gossip_store.h index 013f8003a2e1..de3d86aabbe7 100644 --- a/common/gossip_store.h +++ b/common/gossip_store.h @@ -15,7 +15,7 @@ struct gossip_rcvd_filter; /* First byte of file is the version. * * Top three bits mean incompatible change. - * As of this writing, major == 0, minor == 15. + * As of this writing, major == 0, minor == 16. */ #define GOSSIP_STORE_MAJOR_VERSION_MASK 0xE0 #define GOSSIP_STORE_MINOR_VERSION_MASK 0x1F @@ -50,6 +50,14 @@ struct gossip_hdr { beint32_t timestamp; /* timestamp of msg. */ }; +/* Useful to read gossip_hdr and type of msg. */ +struct gossip_hdr_and_type { + struct gossip_hdr hdr; + be16 type; +}; +/* Beware padding! */ +#define GOSSIP_HDR_AND_TYPE_SIZE (sizeof(struct gossip_hdr) + sizeof(u16)) + /** * Direct store accessor: read gossip msg hdr from store. * @gossip_store_fd: the readable file descriptor @@ -59,11 +67,8 @@ struct gossip_hdr { * @flags (out): if non-NULL, set to the flags. * @type (out): if non-NULL, set to the msg type. * - * Returns false if there are no more gossip msgs. If you - * want to read the message, use gossip_store_next, if you - * want to skip, simply add sizeof(gossip_hdr) + *len to *off. - * Note: it's possible that entire record isn't there yet, - * so gossip_store_next can fail. + * Returns false if there are no more gossip msgs, or message + * is incomplete. To iterate, simply add sizeof(gossip_hdr) + *len to off. */ bool gossip_store_readhdr(int gossip_store_fd, size_t off, size_t *len, diff --git a/gossipd/gossip_store_wire.csv b/common/gossip_store_wire.csv similarity index 91% rename from gossipd/gossip_store_wire.csv rename to common/gossip_store_wire.csv index b0f81c371293..d371f9e83087 100644 --- a/gossipd/gossip_store_wire.csv +++ b/common/gossip_store_wire.csv @@ -23,7 +23,11 @@ msgdata,gossip_store_delete_chan,scid,short_channel_id, msgtype,gossip_store_ended,4105 msgdata,gossip_store_ended,equivalent_offset,u64, +msgdata,gossip_store_ended,uuid,u8,32 msgtype,gossip_store_chan_dying,4106 msgdata,gossip_store_chan_dying,scid,short_channel_id, msgdata,gossip_store_chan_dying,blockheight,u32, + +msgtype,gossip_store_uuid,4107 +msgdata,gossip_store_uuid,uuid,u8,32 diff --git a/common/gossmap.c b/common/gossmap.c index 948ed0b9c4c1..78a885fcb231 100644 --- a/common/gossmap.c +++ b/common/gossmap.c @@ -6,12 +6,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -29,11 +29,7 @@ static bool chanidx_eq_id(const ptrint_t *pidx, struct short_channel_id pidxid = chanidx_id(pidx); return short_channel_id_eq(pidxid, scid); } -static size_t scid_hash(const struct short_channel_id scid) -{ - return siphash24(siphash_seed(), &scid, sizeof(scid)); -} -HTABLE_DEFINE_NODUPS_TYPE(ptrint_t, chanidx_id, scid_hash, chanidx_eq_id, +HTABLE_DEFINE_NODUPS_TYPE(ptrint_t, chanidx_id, hash_scid, chanidx_eq_id, chanidx_htable); static struct node_id nodeidx_id(const ptrint_t *pidx); @@ -42,9 +38,16 @@ static bool nodeidx_eq_id(const ptrint_t *pidx, const struct node_id id) struct node_id pidxid = nodeidx_id(pidx); return node_id_eq(&pidxid, &id); } +/* You need to spend sats to create a channel to advertize your nodeid, + * so creating clashes is not free: we can be lazy! */ static size_t nodeid_hash(const struct node_id id) { - return siphash24(siphash_seed(), &id, PUBKEY_CMPR_LEN); + size_t val; + size_t off = siphash_seed()->u.u8[0] % 16; + + BUILD_ASSERT(15 + sizeof(val) < sizeof(id.k)); + memcpy(&val, id.k + off, sizeof(val)); + return val; } HTABLE_DEFINE_NODUPS_TYPE(ptrint_t, nodeidx_id, nodeid_hash, nodeidx_eq_id, nodeidx_htable); @@ -86,6 +89,9 @@ struct gossmap { /* local channel_update messages, if any. */ u8 *local_updates; + /* How many live and dead records? */ + size_t num_live, num_dead; + /* Optional logging callback */ void (*logcb)(void *cbarg, enum log_level level, @@ -317,6 +323,13 @@ static void remove_node(struct gossmap *map, struct gossmap_node *node) u32 nodeidx = gossmap_node_idx(map, node); if (!nodeidx_htable_del(map->nodes, node2ptrint(node))) abort(); + + /* If we had a node_announcement, it's now dead. */ + if (gossmap_node_announced(node)) { + map->num_live--; + map->num_dead++; + } + node->nann_off = map->freed_nodes; free(node->chan_idxs); node->chan_idxs = NULL; @@ -411,6 +424,8 @@ void gossmap_remove_chan(struct gossmap *map, struct gossmap_chan *chan) chan->cann_off = map->freed_chans; chan->plus_scid_off = 0; map->freed_chans = chanidx; + map->num_live--; + map->num_dead++; } void gossmap_remove_node(struct gossmap *map, struct gossmap_node *node) @@ -503,16 +518,14 @@ static struct gossmap_chan *add_channel(struct gossmap *map, return chan; } -/* Does not set hc->nodeidx! */ -static void fill_from_update(struct gossmap *map, +/* Does not set hc->nodeidx! + * Returns false if it doesn't fit in our representation: this happens + * on the real network, as people set absurd fees + */ +static bool fill_from_update(struct gossmap *map, struct short_channel_id_dir *scidd, struct half_chan *hc, - u64 cupdate_off, - void (*logcb)(void *cbarg, - enum log_level level, - const char *fmt, - ...), - void *cbarg) + u64 cupdate_off) { /* Note that first two bytes are message type */ const u64 scid_off = cupdate_off + 2 + (64 + 32); @@ -543,18 +556,15 @@ static void fill_from_update(struct gossmap *map, hc->proportional_fee = proportional_fee; hc->delay = delay; - /* Check they fit: we turn off if not, log (at debug, it happens!). */ + /* Check they fit: we turn off if not. */ if (hc->base_fee != base_fee || hc->proportional_fee != proportional_fee || hc->delay != delay) { hc->htlc_max = 0; hc->enabled = false; - if (logcb) - logcb(cbarg, LOG_DBG, - "Bad cupdate for %s, ignoring (delta=%u, fee=%u/%u)", - fmt_short_channel_id_dir(tmpctx, scidd), - delay, base_fee, proportional_fee); + return false; } + return true; } /* BOLT #7: @@ -572,23 +582,31 @@ static void fill_from_update(struct gossmap *map, * * [`u32`:`fee_proportional_millionths`] * * [`u64`:`htlc_maximum_msat`] */ -static void update_channel(struct gossmap *map, u64 cupdate_off) +static bool update_channel(struct gossmap *map, u64 cupdate_off) { struct short_channel_id_dir scidd; struct gossmap_chan *chan; struct half_chan hc; + bool ret; - fill_from_update(map, &scidd, &hc, cupdate_off, - map->logcb, map->cbarg); + ret = fill_from_update(map, &scidd, &hc, cupdate_off); chan = gossmap_find_chan(map, &scidd.scid); /* This can happen if channel gets deleted! */ if (!chan) - return; + return ret; + + /* Are we replacing an existing one? Then old one is dead. */ + if (gossmap_chan_set(chan, scidd.dir)) + map->num_dead++; + else + map->num_live++; /* Preserve this */ hc.nodeidx = chan->half[scidd.dir].nodeidx; chan->half[scidd.dir] = hc; chan->cupdate_off[scidd.dir] = cupdate_off; + + return ret; } static void remove_channel_by_deletemsg(struct gossmap *map, u64 del_off) @@ -638,25 +656,144 @@ static void node_announcement(struct gossmap *map, u64 nann_off) feature_len = map_be16(map, nann_off + feature_len_off); map_nodeid(map, nann_off + feature_len_off + 2 + feature_len + 4, &id); - if ((n = gossmap_find_node(map, &id))) + if ((n = gossmap_find_node(map, &id))) { + /* Did this replace old announcement? If so, that's dead. */ + if (gossmap_node_announced(n)) { + map->num_live--; + map->num_dead++; + } n->nann_off = nann_off; + } + map->num_live++; +} + +static bool report_dying_cb(struct gossmap *map, + u64 dying_off, + u16 msglen, + void (*dyingcb)(struct short_channel_id scid, + u32 blockheight, + u64 offset, + void *cb_arg), + void *cb_arg) +{ + struct short_channel_id scid; + u32 blockheight; + u8 *msg; + + msg = tal_arr(NULL, u8, msglen); + map_copy(map, dying_off, msg, msglen); + + if (!fromwire_gossip_store_chan_dying(msg, &scid, &blockheight)) { + map->logcb(map->cbarg, + LOG_BROKEN, + "Invalid chan_dying message @%"PRIu64 + "/%"PRIu64": %s", + dying_off, map->map_size, msglen, + tal_hex(tmpctx, msg)); + tal_free(msg); + return false; + } + tal_free(msg); + + dyingcb(scid, blockheight, dying_off, cb_arg); + return true; +} + +/* Mutual recursion */ +static bool map_catchup(struct gossmap *map, + void (*dyingcb)(struct short_channel_id scid, + u32 blockheight, + u64 offset, + void *cb_arg), + void *cb_arg, + bool must_be_clean, + bool *changed); + +static void init_map_structs(struct gossmap *map) +{ + /* Since channel_announcement is ~430 bytes, and channel_update is 136, + * node_announcement is 144, and current topology has 35000 channels + * and 10000 nodes, let's assume each channel gets about 750 bytes. + * + * We halve this, since often some records are deleted. */ + map->channels = tal(map, struct chanidx_htable); + chanidx_htable_init_sized(map->channels, map->map_size / 750 / 2); + map->nodes = tal(map, struct nodeidx_htable); + nodeidx_htable_init_sized(map->nodes, map->map_size / 2500 / 2); + + map->num_chan_arr = map->map_size / 750 / 2 + 1; + map->chan_arr = tal_arr(map, struct gossmap_chan, map->num_chan_arr); + map->freed_chans = init_chan_arr(map->chan_arr, 0); + map->num_node_arr = map->map_size / 2500 / 2 + 1; + map->node_arr = tal_arr(map, struct gossmap_node, map->num_node_arr); + map->freed_nodes = init_node_arr(map->node_arr, 0); } static bool reopen_store(struct gossmap *map, u64 ended_off) { - int fd; + u64 equivalent_off; + u8 verbyte; + u8 expected_uuid[32], uuid[32]; + struct gossip_hdr ghdr; + bool changed; + + /* This tells us the equivalent offset in new map */ + equivalent_off = map_be64(map, ended_off + 2); + map_copy(map, ended_off + 2 + 8, expected_uuid, sizeof(expected_uuid)); + close(map->fd); - fd = open(map->fname, O_RDONLY); - if (fd < 0) + map->fd = open(map->fname, O_RDONLY); + if (map->fd < 0) err(1, "Failed to reopen %s", map->fname); - /* This tells us the equivalent offset in new map */ - map->map_end = map_be64(map, ended_off + 2); + /* If mmap isn't disabled, we try to mmap if we can. */ + map->map_size = lseek(map->fd, 0, SEEK_END); + if (map->mmap) { + map->mmap = mmap(NULL, map->map_size, PROT_READ, MAP_SHARED, map->fd, 0); + if (map->mmap == MAP_FAILED) + map->mmap = NULL; + } - close(map->fd); - map->fd = fd; + if (map->map_size < 1 + sizeof(ghdr) + 2 + sizeof(uuid)) + errx(1, "Truncated gossip_store len %"PRIu64, map->map_size); + + /* version then ghdr then uuid. */ + verbyte = map_u8(map, 0); + if (GOSSIP_STORE_MAJOR_VERSION(verbyte) != 0 || GOSSIP_STORE_MINOR_VERSION(verbyte) < 16) + errx(1, "Bad gossip_store version %u", verbyte); + + if (map_be16(map, 1 + sizeof(struct gossip_hdr)) != WIRE_GOSSIP_STORE_UUID) + errx(1, "First gossip_store record is not uuid?"); + map_copy(map, 1 + sizeof(struct gossip_hdr) + 2, uuid, sizeof(uuid)); + + /* FIXME: we can skip if uuid is as expected, but we'd have to re-calc all + * our offsets anyway. It's not worth it, given how fast we are. */ + if (memcmp(uuid, expected_uuid, sizeof(uuid)) == 0) { + map->logcb(map->cbarg, LOG_DBG, + "Reopened gossip_store, reduced to offset %"PRIu64, + equivalent_off); + } else { + /* Start from scratch */ + map->logcb(map->cbarg, LOG_INFORM, + "Reopened gossip_store, but we missed some (%s vs %s)", + tal_hexstr(tmpctx, uuid, sizeof(uuid)), + tal_hexstr(tmpctx, expected_uuid, sizeof(expected_uuid))); + } + + tal_free(map->channels); + tal_free(map->nodes); + tal_free(map->chan_arr); + tal_free(map->node_arr); + init_map_structs(map); + map->map_end = 1; map->generation++; - return gossmap_refresh(map); + + /* This isn't quite true, as there may be deleted ones, but not many. */ + map->num_dead = 0; + + /* Now do reload. */ + map_catchup(map, NULL, NULL, false, &changed); + return changed; } /* Extra sanity check (if it's cheap): does crc match? */ @@ -675,9 +812,16 @@ static bool csum_matches(const struct gossmap *map, } /* Returns false only if must_be_clean is true. */ -static bool map_catchup(struct gossmap *map, bool must_be_clean, bool *changed) +static bool map_catchup(struct gossmap *map, + void (*dyingcb)(struct short_channel_id scid, + u32 blockheight, + u64 offset, + void *cb_arg), + void *cb_arg, + bool must_be_clean, + bool *changed) { - size_t reclen; + size_t reclen, num_bad_cupdates = 0; *changed = false; @@ -697,8 +841,10 @@ static bool map_catchup(struct gossmap *map, bool must_be_clean, bool *changed) if (!(flags & GOSSIP_STORE_COMPLETED_BIT)) break; - if (flags & GOSSIP_STORE_DELETED_BIT) + if (flags & GOSSIP_STORE_DELETED_BIT) { + map->num_dead++; continue; + } /* Partial write, should not happen with completed records. */ if (map->map_end + reclen > map->map_size) @@ -748,8 +894,9 @@ static bool map_catchup(struct gossmap *map, bool must_be_clean, bool *changed) break; if (redundant && must_be_clean) return false; + map->num_live++; } else if (type == WIRE_CHANNEL_UPDATE) - update_channel(map, off); + num_bad_cupdates += !update_channel(map, off); else if (type == WIRE_GOSSIP_STORE_DELETE_CHAN) remove_channel_by_deletemsg(map, off); else if (type == WIRE_NODE_ANNOUNCEMENT) @@ -761,8 +908,13 @@ static bool map_catchup(struct gossmap *map, bool must_be_clean, bool *changed) /* We absorbed this in add_channel; ignore */ continue; } else if (type == WIRE_GOSSIP_STORE_CHAN_DYING) { + if (dyingcb && !report_dying_cb(map, off, msglen, dyingcb, cb_arg)) + return false; /* We don't really care until it's deleted */ continue; + } else if (type == WIRE_GOSSIP_STORE_UUID) { + /* We handled this reopen, otherwise we don't care. */ + continue; } else { map->logcb(map->cbarg, LOG_BROKEN, "Unknown record %u@%u (size %zu) in gossmap: ignoring", @@ -775,10 +927,22 @@ static bool map_catchup(struct gossmap *map, bool must_be_clean, bool *changed) *changed = true; } + if (num_bad_cupdates != 0) + map->logcb(map->cbarg, + LOG_DBG, + "Got %zu bad cupdates, ignoring them (expected on mainnet)", + num_bad_cupdates); + return true; } -static bool load_gossip_store(struct gossmap *map, bool must_be_clean) +static bool load_gossip_store(struct gossmap *map, + void (*dyingcb)(struct short_channel_id scid, + u32 blockheight, + u64 offset, + void *cb_arg), + void *cb_arg, + bool must_be_clean) { bool updated; @@ -799,25 +963,10 @@ static bool load_gossip_store(struct gossmap *map, bool must_be_clean) return false; } - /* Since channel_announcement is ~430 bytes, and channel_update is 136, - * node_announcement is 144, and current topology has 35000 channels - * and 10000 nodes, let's assume each channel gets about 750 bytes. - * - * We halve this, since often some records are deleted. */ - map->channels = tal(map, struct chanidx_htable); - chanidx_htable_init_sized(map->channels, map->map_size / 750 / 2); - map->nodes = tal(map, struct nodeidx_htable); - nodeidx_htable_init_sized(map->nodes, map->map_size / 2500 / 2); - - map->num_chan_arr = map->map_size / 750 / 2 + 1; - map->chan_arr = tal_arr(map, struct gossmap_chan, map->num_chan_arr); - map->freed_chans = init_chan_arr(map->chan_arr, 0); - map->num_node_arr = map->map_size / 2500 / 2 + 1; - map->node_arr = tal_arr(map, struct gossmap_node, map->num_node_arr); - map->freed_nodes = init_node_arr(map->node_arr, 0); + init_map_structs(map); map->map_end = 1; - return map_catchup(map, must_be_clean, &updated); + return map_catchup(map, dyingcb, cb_arg, must_be_clean, &updated); } static void destroy_map(struct gossmap *map) @@ -1168,7 +1317,7 @@ void gossmap_apply_localmods(struct gossmap *map, off = insert_local_space(&map->local_updates, tal_bytelen(cupdatemsg)); memcpy(map->local_updates + off, cupdatemsg, tal_bytelen(cupdatemsg)); chan->cupdate_off[h] = map->map_size + tal_bytelen(map->local_announces) + off; - fill_from_update(map, &scidd, &chan->half[h], chan->cupdate_off[h], NULL, NULL); + fill_from_update(map, &scidd, &chan->half[h], chan->cupdate_off[h]); /* We wrote the right update, correct? */ assert(short_channel_id_eq(scidd.scid, mod->scid)); @@ -1229,7 +1378,7 @@ bool gossmap_refresh(struct gossmap *map) } } - map_catchup(map, false, &changed); + map_catchup(map, NULL, NULL, false, &changed); return changed; } @@ -1256,27 +1405,32 @@ struct gossmap *gossmap_load_(const tal_t *ctx, enum log_level level, const char *fmt, ...), - void *cbarg) + void (*dyingcb)(struct short_channel_id scid, + u32 blockheight, + u64 offset, + void *cb_arg), + void *cb_arg) { map = tal(ctx, struct gossmap); map->generation = 0; map->fname = tal_strdup(map, filename); map->fd = open(map->fname, O_RDONLY); + map->num_live = map->num_dead = 0; if (map->fd < 0) return tal_free(map); if (logcb) map->logcb = logcb; else map->logcb = log_stderr; - map->cbarg = cbarg; + map->cbarg = cb_arg; tal_add_destructor(map, destroy_map); - if (!load_gossip_store(map, expected_len != 0)) + if (!load_gossip_store(map, dyingcb, cb_arg, expected_len != 0)) return tal_free(map); if (expected_len != 0 && (map->map_size != map->map_end || map->map_size != expected_len)) { - logcb(cbarg, LOG_BROKEN, + logcb(cb_arg, LOG_BROKEN, "gossip_store only processed %"PRIu64 " bytes of %"PRIu64" (expected %"PRIu64")", map->map_end, map->map_size, expected_len); @@ -1871,3 +2025,9 @@ void gossmap_disable_mmap(struct gossmap *map) munmap(map->mmap, map->map_size); map->mmap = NULL; } + +void gossmap_stats(const struct gossmap *map, u64 *num_live, u64 *num_dead) +{ + *num_live = map->num_live; + *num_dead = map->num_dead; +} diff --git a/common/gossmap.h b/common/gossmap.h index 1b60a1fdcc00..c8bfbf19fb42 100644 --- a/common/gossmap.h +++ b/common/gossmap.h @@ -46,17 +46,21 @@ struct gossmap_chan { enum log_level, \ const char *fmt, \ ...), \ - (cbarg)) + NULL, (cbarg)) /* If we're the author of the gossmap, it should have no redundant records, corruption, etc. * So this fails if that's not the case. */ -#define gossmap_load_initial(ctx, filename, expected_len, logcb, cbarg) \ +#define gossmap_load_initial(ctx, filename, expected_len, logcb, dyingcb, cb_arg) \ gossmap_load_((ctx), (filename), (expected_len), \ - typesafe_cb_postargs(void, void *, (logcb), (cbarg), \ + typesafe_cb_postargs(void, void *, (logcb), (cb_arg), \ enum log_level, \ const char *fmt, \ ...), \ - (cbarg)) + typesafe_cb_preargs(void, void *, (dyingcb), (cb_arg), \ + struct short_channel_id, \ + u32, \ + u64), \ + (cb_arg)) struct gossmap *gossmap_load_(const tal_t *ctx, const char *filename, @@ -65,6 +69,10 @@ struct gossmap *gossmap_load_(const tal_t *ctx, enum log_level level, const char *fmt, ...), + void (*dyingcb)(struct short_channel_id scid, + u32 blockheight, + u64 offset, + void *cb_arg), void *cb_arg); /* Disable mmap. Noop if already disabled. */ @@ -300,9 +308,13 @@ void gossmap_iter_fast_forward(const struct gossmap *map, /* Moves iterator to the end. */ void gossmap_iter_end(const struct gossmap *map, struct gossmap_iter *iter); +/* How dense is this? */ +void gossmap_stats(const struct gossmap *map, u64 *num_live, u64 *num_dead); + /* For debugging: returns length read, and total known length of file */ u64 gossmap_lengths(const struct gossmap *map, u64 *total); /* Debugging: connectd wants to enumerate fds */ int gossmap_fd(const struct gossmap *map); + #endif /* LIGHTNING_COMMON_GOSSMAP_H */ diff --git a/common/hsm_secret.c b/common/hsm_secret.c index 62348627f3d3..253553973cc8 100644 --- a/common/hsm_secret.c +++ b/common/hsm_secret.c @@ -29,7 +29,7 @@ #define HSM_SECRET_PLAIN_SIZE 32 /* Helper function to validate a mnemonic string */ -static bool validate_mnemonic(const char *mnemonic, enum hsm_secret_error *err) +enum hsm_secret_error validate_mnemonic(const char *mnemonic) { struct words *words; bool ok; @@ -44,12 +44,10 @@ static bool validate_mnemonic(const char *mnemonic, enum hsm_secret_error *err) /* Wordlists can persist, so provide a common context! */ tal_wally_end(notleak_with_children(tal(NULL, char))); - if (!ok) { - *err = HSM_SECRET_ERR_INVALID_MNEMONIC; - return false; - } + if (!ok) + return HSM_SECRET_ERR_INVALID_MNEMONIC; - return true; + return HSM_SECRET_OK; } struct secret *get_encryption_key(const tal_t *ctx, const char *passphrase) @@ -314,7 +312,8 @@ static struct hsm_secret *extract_mnemonic_secret(const tal_t *ctx, } /* Validate mnemonic */ - if (!validate_mnemonic(hsms->mnemonic, err)) { + *err = validate_mnemonic(hsms->mnemonic); + if (*err != HSM_SECRET_OK) { return tal_free(hsms); } @@ -464,8 +463,9 @@ const char *read_stdin_mnemonic(const tal_t *ctx, enum hsm_secret_error *err) } /* Validate mnemonic */ - if (!validate_mnemonic(line, err)) { - return NULL; + *err = validate_mnemonic(line); + if (*err != HSM_SECRET_OK) { + return tal_free(line); } *err = HSM_SECRET_OK; diff --git a/common/hsm_secret.h b/common/hsm_secret.h index 740f2ebc058e..1f6314e63248 100644 --- a/common/hsm_secret.h +++ b/common/hsm_secret.h @@ -129,6 +129,14 @@ const char *hsm_secret_error_str(enum hsm_secret_error err); */ enum hsm_secret_type detect_hsm_secret_type(const u8 *hsm_secret, size_t len); +/** + * Check a BIP39 mnemonic is valid. + * @mnemonic - 12 words, single-space separated, nul terminate. + * + * Returns HSM_SECRET_ERR_INVALID_MNEMONIC or HSM_SECRET_OK. + */ +enum hsm_secret_error validate_mnemonic(const char *mnemonic); + /** * Reads a BIP39 mnemonic from stdin with validation. * Returns a newly allocated string on success, NULL on error. diff --git a/common/hsm_version.h b/common/hsm_version.h index 8b6c54bdfa51..e894974ce2f1 100644 --- a/common/hsm_version.h +++ b/common/hsm_version.h @@ -33,6 +33,7 @@ * v6 with hsm_secret struct cleanup: 06c56396fe42f4f47911d7f865dd0004d264fc1348f89547743755b6b33fec90 * v6 with hsm_secret_type TLV: 7bb5deb2367482feb084d304ee14b2373d42910ad56484fbf47614dbb3d4cb74 * v6 with bip86_base in TLV: 6bb6e6ee256f22a6fb41856c90feebde3065a9074e79a46731e453a932be83f0 + * v6 with hsmd_sign_local_htlc_tx removed: 0e28ca3699196cf9d26d38f8f621d1bf68c76cf5e2cdc1f4157a6937b02dc2f6 */ #define HSM_MIN_VERSION 5 #define HSM_MAX_VERSION 6 diff --git a/common/htlc_state.c b/common/htlc_state.c index 75b841d3837e..52d0edc004d8 100644 --- a/common/htlc_state.c +++ b/common/htlc_state.c @@ -138,4 +138,3 @@ int htlc_state_flags(enum htlc_state state) assert(per_state_bits[state]); return per_state_bits[state]; } - diff --git a/common/jsonrpc_errors.h b/common/jsonrpc_errors.h index d3fe80d53997..a2ea1bf1b2e1 100644 --- a/common/jsonrpc_errors.h +++ b/common/jsonrpc_errors.h @@ -116,6 +116,7 @@ enum jsonrpc_errcode { OFFER_BAD_INVREQ_REPLY = 1004, OFFER_TIMEOUT = 1005, OFFER_ALREADY_ENABLED = 1006, + OFFER_USED_SINGLE_USE = 1007, /* Errors from datastore command */ DATASTORE_DEL_DOES_NOT_EXIST = 1200, diff --git a/common/onion_encode.h b/common/onion_encode.h index a570b0d098d7..ac1acadce0a7 100644 --- a/common/onion_encode.h +++ b/common/onion_encode.h @@ -7,13 +7,7 @@ struct route_step; struct tlv_encrypted_data_tlv_payment_relay; -enum onion_payload_type { - ONION_V0_PAYLOAD = 0, - ONION_TLV_PAYLOAD = 1, -}; - struct onion_payload { - enum onion_payload_type type; /* Is this the final hop? */ bool final; diff --git a/common/sphinx.c b/common/sphinx.c index 6ac128d9a7a1..5cecf68777b5 100644 --- a/common/sphinx.c +++ b/common/sphinx.c @@ -677,54 +677,13 @@ struct route_step *process_onionpacket( /* Any of these could fail, falling thru with cursor == NULL */ payload_size = fromwire_bigsize(&cursor, &max); - /* Legacy! 0 length payload means fixed 32 byte structure */ - if (payload_size == 0 && max >= 32) { - struct tlv_payload *legacy = tlv_payload_new(tmpctx); - const u8 *legacy_cursor = cursor; - size_t legacy_max = 32; - u8 *onwire_tlv; - - legacy->amt_to_forward = tal(legacy, u64); - legacy->outgoing_cltv_value = tal(legacy, u32); - legacy->short_channel_id = tal(legacy, struct short_channel_id); - - /* BOLT-obsolete #4: - * ## Legacy `hop_data` payload format - * - * The `hop_data` format is identified by a single `0x00`-byte - * length, for backward compatibility. Its payload is defined - * as: - * - * 1. type: `hop_data` (for `realm` 0) - * 2. data: - * * [`short_channel_id`:`short_channel_id`] - * * [`u64`:`amt_to_forward`] - * * [`u32`:`outgoing_cltv_value`] - * * [`12*byte`:`padding`] - */ - *legacy->short_channel_id = fromwire_short_channel_id(&legacy_cursor, &legacy_max); - *legacy->amt_to_forward = fromwire_u64(&legacy_cursor, &legacy_max); - *legacy->outgoing_cltv_value = fromwire_u32(&legacy_cursor, &legacy_max); - - /* Re-linearize it as a modern TLV! */ - onwire_tlv = tal_arr(tmpctx, u8, 0); - towire_tlv_payload(&onwire_tlv, legacy); - - /* Length, then tlv */ - step->raw_payload = tal_arr(step, u8, 0); - towire_bigsize(&step->raw_payload, tal_bytelen(onwire_tlv)); - towire_u8_array(&step->raw_payload, onwire_tlv, tal_bytelen(onwire_tlv)); + /* FIXME: raw_payload *includes* the length, which is redundant and + * means we can't just ust fromwire_tal_arrn. */ + fromwire_pad(&cursor, &max, payload_size); + if (cursor != NULL) + step->raw_payload = tal_dup_arr(step, u8, paddedheader, + cursor - paddedheader, 0); - payload_size = 32; - fromwire_pad(&cursor, &max, payload_size); - } else { - /* FIXME: raw_payload *includes* the length, which is redundant and - * means we can't just ust fromwire_tal_arrn. */ - fromwire_pad(&cursor, &max, payload_size); - if (cursor != NULL) - step->raw_payload = tal_dup_arr(step, u8, paddedheader, - cursor - paddedheader, 0); - } fromwire_hmac(&cursor, &max, &step->next->hmac); /* BOLT #4: diff --git a/common/test/Makefile b/common/test/Makefile index ab192ce61dc5..988ef151cb85 100644 --- a/common/test/Makefile +++ b/common/test/Makefile @@ -47,7 +47,7 @@ common/test/run-route common/test/run-route-specific common/test/run-route-inflo common/node_id.o \ common/pseudorand.o \ common/route.o \ - gossipd/gossip_store_wiregen.o \ + common/gossip_store_wiregen.o \ wire/fromwire.o \ wire/peer_wiregen.o \ wire/towire.o diff --git a/common/test/run-gossmap_canned.c b/common/test/run-gossmap_canned.c index fd5af5e00163..8ae7210dc5f3 100644 --- a/common/test/run-gossmap_canned.c +++ b/common/test/run-gossmap_canned.c @@ -19,6 +19,9 @@ bigsize_t fromwire_bigsize(const u8 **cursor UNNEEDED, size_t *max UNNEEDED) bool fromwire_channel_id(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, struct channel_id *channel_id UNNEEDED) { fprintf(stderr, "fromwire_channel_id called!\n"); abort(); } +/* Generated stub for fromwire_gossip_store_chan_dying */ +bool fromwire_gossip_store_chan_dying(const void *p UNNEEDED, struct short_channel_id *scid UNNEEDED, u32 *blockheight UNNEEDED) +{ fprintf(stderr, "fromwire_gossip_store_chan_dying called!\n"); abort(); } /* Generated stub for sciddir_or_pubkey_from_node_id */ bool sciddir_or_pubkey_from_node_id(struct sciddir_or_pubkey *sciddpk UNNEEDED, const struct node_id *node_id UNNEEDED) diff --git a/common/test/run-gossmap_local.c b/common/test/run-gossmap_local.c index b425710ac9b8..0575bcae1131 100644 --- a/common/test/run-gossmap_local.c +++ b/common/test/run-gossmap_local.c @@ -19,6 +19,9 @@ bigsize_t fromwire_bigsize(const u8 **cursor UNNEEDED, size_t *max UNNEEDED) bool fromwire_channel_id(const u8 **cursor UNNEEDED, size_t *max UNNEEDED, struct channel_id *channel_id UNNEEDED) { fprintf(stderr, "fromwire_channel_id called!\n"); abort(); } +/* Generated stub for fromwire_gossip_store_chan_dying */ +bool fromwire_gossip_store_chan_dying(const void *p UNNEEDED, struct short_channel_id *scid UNNEEDED, u32 *blockheight UNNEEDED) +{ fprintf(stderr, "fromwire_gossip_store_chan_dying called!\n"); abort(); } /* Generated stub for sciddir_or_pubkey_from_node_id */ bool sciddir_or_pubkey_from_node_id(struct sciddir_or_pubkey *sciddpk UNNEEDED, const struct node_id *node_id UNNEEDED) diff --git a/common/test/run-route-specific.c b/common/test/run-route-specific.c index 6e73f459d0ee..74653e206822 100644 --- a/common/test/run-route-specific.c +++ b/common/test/run-route-specific.c @@ -7,22 +7,22 @@ */ #include "config.h" #include +#include #include #include #include -#include #include +#include +#include #include #include #include #include #include #include -#include -#include #include -#include #include +#include /* AUTOGENERATED MOCKS START */ /* Generated stub for fromwire_bigsize */ diff --git a/common/test/run-route.c b/common/test/run-route.c index 53c7359181de..50f3f3b9b07d 100644 --- a/common/test/run-route.c +++ b/common/test/run-route.c @@ -1,21 +1,21 @@ #include "config.h" #include +#include #include #include #include -#include #include +#include +#include #include #include #include #include #include #include -#include -#include #include -#include #include +#include /* AUTOGENERATED MOCKS START */ /* Generated stub for fromwire_bigsize */ diff --git a/common/test/run-sphinx-xor_cipher_stream.c b/common/test/run-sphinx-xor_cipher_stream.c index b5a30ef72699..0e33ace54de4 100644 --- a/common/test/run-sphinx-xor_cipher_stream.c +++ b/common/test/run-sphinx-xor_cipher_stream.c @@ -108,9 +108,6 @@ void subkey_from_hmac(const char *prefix UNNEEDED, const struct secret *base UNNEEDED, struct secret *key UNNEEDED) { fprintf(stderr, "subkey_from_hmac called!\n"); abort(); } -/* Generated stub for tlv_payload_new */ -struct tlv_payload *tlv_payload_new(const tal_t *ctx UNNEEDED) -{ fprintf(stderr, "tlv_payload_new called!\n"); abort(); } /* Generated stub for towire */ void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED) { fprintf(stderr, "towire called!\n"); abort(); } @@ -136,9 +133,6 @@ void towire_secp256k1_ecdsa_signature(u8 **pptr UNNEEDED, /* Generated stub for towire_sha256 */ void towire_sha256(u8 **pptr UNNEEDED, const struct sha256 *sha256 UNNEEDED) { fprintf(stderr, "towire_sha256 called!\n"); abort(); } -/* Generated stub for towire_tlv_payload */ -void towire_tlv_payload(u8 **pptr UNNEEDED, const struct tlv_payload *record UNNEEDED) -{ fprintf(stderr, "towire_tlv_payload called!\n"); abort(); } /* Generated stub for towire_u16 */ void towire_u16(u8 **pptr UNNEEDED, u16 v UNNEEDED) { fprintf(stderr, "towire_u16 called!\n"); abort(); } diff --git a/common/test/run-trace.c b/common/test/run-trace.c index 7811f68c91dd..e257d445a6d5 100644 --- a/common/test/run-trace.c +++ b/common/test/run-trace.c @@ -8,7 +8,7 @@ int main(int argx, char *argv[]) { /* Just some context objects to hang spans off of. */ - int a, b, c, d; + int a = 0, b = 0, c = 0, d = 0; common_setup(argv[0]); diff --git a/common/utils.c b/common/utils.c index aba4745218d0..83c8b59416a9 100644 --- a/common/utils.c +++ b/common/utils.c @@ -215,6 +215,15 @@ char *str_lowering(const void *ctx, const char *string TAKES) return ret; } +char *str_uppering(const void *ctx, const char *string TAKES) +{ + char *ret; + + ret = tal_strdup(ctx, string); + for (char *p = ret; *p; p++) *p = toupper(*p); + return ret; +} + /* Realloc helper for tal membufs */ void *membuf_tal_resize(struct membuf *mb, void *rawelems, size_t newsize) { diff --git a/common/utils.h b/common/utils.h index d9b441e4bc2c..a95da849f7ea 100644 --- a/common/utils.h +++ b/common/utils.h @@ -188,6 +188,15 @@ void *membuf_tal_resize(struct membuf *mb, void *rawelems, size_t newsize); */ char *str_lowering(const void *ctx, const char *string TAKES); +/** + * tal_struppering - return the same string by in upper case. + * @ctx: the context to tal from (often NULL) + * @string: the string that is going to be UPPERED (can be take()) + * + * FIXME: move this in ccan + */ +char *str_uppering(const void *ctx, const char *string TAKES); + /** * Assign two different structs which are the same size. * We use this for assigning secrets <-> sha256 for example. diff --git a/configure b/configure index f0cc855b941d..bee8ab193574 100755 --- a/configure +++ b/configure @@ -202,7 +202,6 @@ set_defaults() FUZZFLAGS="-fsanitize=fuzzer-no-link -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" CSANFLAGS="$CSANFLAGS $FUZZFLAGS" fi - echo CSANFLAGS = $CSANFLAGS PYTHON=${PYTHON-$(default_python)} SED=${SED-$(default_sed)} PYTEST=${PYTEST-$(default_pytest $PYTHON)} @@ -213,6 +212,17 @@ set_defaults() RUST=${RUST:-$(default_rust_setting)} } +# Given CC and FLAGS do we support -ffunction-sections and --gc-sections? +have_function_sections() +{ + # This gets removed automatically on exit! + TMPCFILE=$CONFIG_VAR_FILE.$$.c + TMPOBJFILE=$CONFIG_VAR_FILE.$$.o + + echo "int foo(void); int foo(void) { return 0; }" > $TMPCFILE + $1 $2 -ffunction-sections -Wl,--gc-sections -c $TMPCFILE -o $TMPOBJFILE +} + usage() { echo "Usage: ./configure [--reconfigure] [setting=value] [options]" @@ -355,10 +365,19 @@ EOF done fi +# We call this first, so we can make sure configurator runs with it as a sanity check! +if have_function_sections $CC "${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS"; then + HAVE_FUNCTION_SECTIONS=1 + LDFLAGS="-Wl,--gc-sections" + COPTFLAGS="$COPTFLAGS -ffunction-sections" +else + HAVE_FUNCTION_SECTIONS=0 + LDFLAGS= +fi # We assume warning flags don't affect congfigurator that much! echo -n "Compiling $CONFIGURATOR..." -$CC ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS -o $CONFIGURATOR $CONFIGURATOR.c +$CC ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS $LDFLAGS -o $CONFIGURATOR $CONFIGURATOR.c echo "done" if [ "$CLANG_COVERAGE" = "1" ]; then @@ -406,7 +425,7 @@ if command -v "${PG_CONFIG}" >/dev/null; then fi # Clean up on exit. -trap "rm -f $CONFIG_VAR_FILE.$$" 0 +trap "rm -f $CONFIG_VAR_FILE.$$*" 0 $CONFIGURATOR --extra-tests --autotools-style --var-file=$CONFIG_VAR_FILE.$$ --header-file=$CONFIG_HEADER.$$ --configurator-cc="$CONFIGURATOR_CC" --wrapper="$CONFIGURATOR_WRAPPER" "$CC" ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS $CSANFLAGS -I$CPATH -L$LIBRARY_PATH $SQLITE3_CFLAGS $SODIUM_CFLAGS $POSTGRES_INCLUDE < #include #include +#include #include #include #include @@ -127,8 +128,13 @@ static struct peer *new_peer(struct daemon *daemon, peer->cs = *cs; peer->subds = tal_arr(peer, struct subd *, 0); peer->peer_in = NULL; - peer->sent_to_peer = NULL; - peer->urgent = false; + membuf_init(&peer->encrypted_peer_out, + tal_arr(peer, u8, 0), 0, + membuf_tal_resize); + peer->encrypted_peer_out_sent = 0; + peer->nonurgent_flush_timer = NULL; + peer->peer_out_urgent = 0; + peer->flushing_nonurgent = false; peer->draining_state = NOT_DRAINING; peer->peer_in_lastmsg = -1; peer->peer_outq = msg_queue_new(peer, false); @@ -505,6 +511,23 @@ static bool get_remote_address(struct io_conn *conn, return true; } +/* Nagle had a good idea of making networking more efficient by + * inserting a delay, creating a trap for every author of network code + * everywhere. + */ +static void set_tcp_no_delay(const struct daemon *daemon, int fd) +{ + int val = 1; + + if (daemon->dev_keep_nagle) + return; + + if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) != 0) { + status_broken("setsockopt TCP_NODELAY=1 fd=%u: %s", + fd, strerror(errno)); + } +} + /*~ As so common in C, we need to bundle two args into a callback, so we * allocate a temporary structure to hold them: */ struct conn_in { @@ -637,6 +660,10 @@ static struct io_plan *connection_in(struct io_conn *conn, if (!get_remote_address(conn, &conn_in_arg.addr)) return io_close(conn); + /* Don't try to set TCP options on UNIX socket! */ + if (conn_in_arg.addr.itype == ADDR_INTERNAL_WIREADDR) + set_tcp_no_delay(daemon, io_conn_fd(conn)); + conn_in_arg.daemon = daemon; conn_in_arg.is_websocket = false; return conn_in(conn, &conn_in_arg); @@ -1173,6 +1200,9 @@ static void try_connect_one_addr(struct connecting *connect) goto next; } + /* Don't try to set TCP options on UNIX socket! */ + if (addr->itype == ADDR_INTERNAL_WIREADDR) + set_tcp_no_delay(connect->daemon, fd); connect->connect_attempted = true; /* This creates the new connection using our fd, with the initialization @@ -1652,7 +1682,6 @@ static void connect_init(struct daemon *daemon, const u8 *msg) &tor_password, &daemon->timeout_secs, &daemon->websocket_helper, - &daemon->announce_websocket, &daemon->dev_fast_gossip, &dev_disconnect, &daemon->dev_no_ping_timer, @@ -1660,7 +1689,8 @@ static void connect_init(struct daemon *daemon, const u8 *msg) &dev_throttle_gossip, &daemon->dev_no_reconnect, &daemon->dev_fast_reconnect, - &dev_limit_connections_inflight)) { + &dev_limit_connections_inflight, + &daemon->dev_keep_nagle)) { /* This is a helper which prints the type expected and the actual * message, then exits (it should never be called!). */ master_badmsg(WIRE_CONNECTD_INIT, msg); @@ -2225,6 +2255,10 @@ static void dev_report_fds(struct daemon *daemon, const u8 *msg) status_info("dev_report_fds: %i -> gossip_store", fd); continue; } + if (fd == tor_service_fd) { + status_info("dev_report_fds: %i -> tor service fd", fd); + continue; + } c = io_have_fd(fd, &listener); if (!c) { /* We consider a single CHR as expected */ @@ -2402,6 +2436,10 @@ static struct io_plan *recv_req(struct io_conn *conn, add_scid_map(daemon, msg); goto out; + case WIRE_CONNECTD_CUSTOMMSG_IN_COMPLETE: + custommsg_completed(daemon, msg); + goto out; + case WIRE_CONNECTD_DEV_MEMLEAK: if (daemon->developer) { dev_connect_memleak(daemon, msg); @@ -2526,6 +2564,7 @@ int main(int argc, char *argv[]) daemon->custom_msgs = NULL; daemon->dev_exhausted_fds = false; daemon->dev_lightningd_is_slow = false; + daemon->dev_keep_nagle = false; /* We generally allow 1MB per second per peer, except for dev testing */ daemon->gossip_stream_limit = 1000000; daemon->scid_htable = new_htable(daemon, scid_htable); diff --git a/connectd/connectd.h b/connectd/connectd.h index 1e78834ba650..ea012f6a2824 100644 --- a/connectd/connectd.h +++ b/connectd/connectd.h @@ -3,6 +3,7 @@ #include "config.h" #include #include +#include #include #include #include @@ -79,17 +80,18 @@ struct peer { /* Connections to the subdaemons */ struct subd **subds; - /* When socket has Nagle overridden */ - bool urgent; - /* Input buffer. */ u8 *peer_in; /* Output buffer. */ struct msg_queue *peer_outq; - /* Peer sent buffer (for freeing after sending) */ - const u8 *sent_to_peer; + /* Encrypted peer sending buffer */ + MEMBUF(u8) encrypted_peer_out; + size_t encrypted_peer_out_sent; + size_t peer_out_urgent; + bool flushing_nonurgent; + struct oneshot *nonurgent_flush_timer; /* We stream from the gossip_store for them, when idle */ struct gossip_state gs; @@ -260,7 +262,7 @@ static bool scid_to_node_id_eq_scid(const struct scid_to_node_id *scid_to_node_i * we use this to forward onion messages which specify the next hop by scid/dir. */ HTABLE_DEFINE_NODUPS_TYPE(struct scid_to_node_id, scid_to_node_id_keyof, - short_channel_id_hash, + hash_scid, scid_to_node_id_eq_scid, scid_htable); @@ -338,9 +340,6 @@ struct daemon { u32 gossip_recent_time; struct gossmap_iter *gossmap_iter_recent; - /* We only announce websocket addresses if !deprecated_apis */ - bool announce_websocket; - /* Shutting down, don't send new stuff */ bool shutting_down; @@ -372,6 +371,8 @@ struct daemon { bool dev_fast_reconnect; /* Don't complain about lightningd being unresponsive. */ bool dev_lightningd_is_slow; + /* Don't set TCP_NODELAY */ + bool dev_keep_nagle; }; /* Called by io_tor_connect once it has a connection out. */ diff --git a/connectd/connectd_wire.csv b/connectd/connectd_wire.csv index d3af2709d545..d5f6aee33b01 100644 --- a/connectd/connectd_wire.csv +++ b/connectd/connectd_wire.csv @@ -18,7 +18,6 @@ msgdata,connectd_init,use_dns,bool, msgdata,connectd_init,tor_password,wirestring, msgdata,connectd_init,timeout_secs,u32, msgdata,connectd_init,websocket_helper,wirestring, -msgdata,connectd_init,announce_websocket,bool, msgdata,connectd_init,dev_fast_gossip,bool, # If this is set, then fd 5 is dev_disconnect_fd. msgdata,connectd_init,dev_disconnect,bool, @@ -29,6 +28,7 @@ msgdata,connectd_init,dev_throttle_gossip,bool, msgdata,connectd_init,dev_no_reconnect,bool, msgdata,connectd_init,dev_fast_reconnect,bool, msgdata,connectd_init,dev_limit_connections_inflight,bool, +msgdata,connectd_init,dev_keep_nagle,bool, # Connectd->master, here are the addresses I bound, can announce. msgtype,connectd_init_reply,2100 @@ -195,6 +195,10 @@ msgdata,connectd_custommsg_in,id,node_id, msgdata,connectd_custommsg_in,msg_len,u16, msgdata,connectd_custommsg_in,msg,u8,msg_len +# We got that custommsg, thankyou, it was delightful. +msgtype,connectd_custommsg_in_complete,2111 +msgdata,connectd_custommsg_in_complete,id,node_id, + # A custom message that the lightningd tells us to send to the peer. msgtype,connectd_custommsg_out,2011 msgdata,connectd_custommsg_out,id,node_id, diff --git a/connectd/gossip_store.c b/connectd/gossip_store.c index 60da90f30be6..3c1808f63d9a 100644 --- a/connectd/gossip_store.c +++ b/connectd/gossip_store.c @@ -1,11 +1,11 @@ #include "config.h" #include +#include #include #include #include #include #include -#include #include #include #include @@ -28,8 +28,9 @@ static size_t reopen_gossip_store(int *gossip_store_fd, const u8 *msg) { u64 equivalent_offset; int newfd; + u8 uuid[32]; - if (!fromwire_gossip_store_ended(msg, &equivalent_offset)) + if (!fromwire_gossip_store_ended(msg, &equivalent_offset, uuid)) status_failed(STATUS_FAIL_GOSSIP_IO, "Bad gossipd GOSSIP_STORE_ENDED msg: %s", tal_hex(tmpctx, msg)); diff --git a/connectd/multiplex.c b/connectd/multiplex.c index 1cbc98f1e90e..0c5b0e4f0222 100644 --- a/connectd/multiplex.c +++ b/connectd/multiplex.c @@ -22,10 +22,12 @@ #include #include #include -#include #include #include +/* Size of write(), to create uniform size packets. */ +#define UNIFORM_MESSAGE_SIZE 1460 + struct subd { /* Owner: we are in peer->subds[] */ struct peer *peer; @@ -53,6 +55,7 @@ struct subd { }; /* FIXME: reorder! */ +static bool is_urgent(enum peer_wire type); static void destroy_connected_subd(struct subd *subd); static struct io_plan *write_to_peer(struct io_conn *peer_conn, struct peer *peer); @@ -96,10 +99,18 @@ static void close_subd_timeout(struct subd *subd) io_close(subd->conn); } +static void msg_to_peer_outq(struct peer *peer, const u8 *msg TAKES) +{ + if (is_urgent(fromwire_peektype(msg))) + peer->peer_out_urgent++; + + msg_enqueue(peer->peer_outq, msg); +} + void inject_peer_msg(struct peer *peer, const u8 *msg TAKES) { status_peer_io(LOG_IO_OUT, &peer->id, msg); - msg_enqueue(peer->peer_outq, msg); + msg_to_peer_outq(peer, msg); } static void drain_peer(struct peer *peer) @@ -291,44 +302,24 @@ void setup_peer_gossip_store(struct peer *peer, return; } -/* We're happy for the kernel to batch update and gossip messages, but a - * commitment message, for example, should be instantly sent. There's no - * great way of doing this, unfortunately. - * - * Setting TCP_NODELAY on Linux flushes the socket, which really means - * we'd want to toggle on then off it *after* sending. But Linux has - * TCP_CORK. On FreeBSD, it seems (looking at source) not to, so - * there we'd want to set it before the send, and reenable it - * afterwards. Even if this is wrong on other non-Linux platforms, it - * only means one extra packet. - */ -static void set_urgent_flag(struct peer *peer, bool urgent) -{ - int val; - - if (urgent == peer->urgent) - return; - - /* FIXME: We can't do this on websockets, but we could signal our - * websocket proxy via some magic message to do so! */ - if (peer->is_websocket != NORMAL_SOCKET) - return; - - val = urgent; - if (setsockopt(io_conn_fd(peer->to_peer), - IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val)) != 0 - /* This actually happens in testing, where we blackhole the fd */ - && peer->daemon->dev_disconnect_fd == -1) { - status_broken("setsockopt TCP_NODELAY=1 fd=%u: %s", - io_conn_fd(peer->to_peer), - strerror(errno)); - } - peer->urgent = urgent; -} - static bool is_urgent(enum peer_wire type) { switch (type) { + /* We are happy to batch UPDATE_ADD messages: it's the + * commitment signed which matters. */ + case WIRE_UPDATE_ADD_HTLC: + case WIRE_UPDATE_FULFILL_HTLC: + case WIRE_UPDATE_FAIL_HTLC: + case WIRE_UPDATE_FAIL_MALFORMED_HTLC: + case WIRE_UPDATE_FEE: + /* Gossip messages are also non-urgent */ + case WIRE_CHANNEL_ANNOUNCEMENT: + case WIRE_NODE_ANNOUNCEMENT: + case WIRE_CHANNEL_UPDATE: + return false; + + /* We don't delay for anything else, but we use a switch + * statement to make you think about new cases! */ case WIRE_INIT: case WIRE_ERROR: case WIRE_WARNING: @@ -352,17 +343,9 @@ static bool is_urgent(enum peer_wire type) case WIRE_CLOSING_SIGNED: case WIRE_CLOSING_COMPLETE: case WIRE_CLOSING_SIG: - case WIRE_UPDATE_ADD_HTLC: - case WIRE_UPDATE_FULFILL_HTLC: - case WIRE_UPDATE_FAIL_HTLC: - case WIRE_UPDATE_FAIL_MALFORMED_HTLC: - case WIRE_UPDATE_FEE: case WIRE_UPDATE_BLOCKHEIGHT: case WIRE_CHANNEL_REESTABLISH: case WIRE_ANNOUNCEMENT_SIGNATURES: - case WIRE_CHANNEL_ANNOUNCEMENT: - case WIRE_NODE_ANNOUNCEMENT: - case WIRE_CHANNEL_UPDATE: case WIRE_QUERY_SHORT_CHANNEL_IDS: case WIRE_REPLY_SHORT_CHANNEL_IDS_END: case WIRE_QUERY_CHANNEL_RANGE: @@ -375,9 +358,6 @@ static bool is_urgent(enum peer_wire type) case WIRE_SPLICE: case WIRE_SPLICE_ACK: case WIRE_SPLICE_LOCKED: - return false; - - /* These are time-sensitive, and so send without delay. */ case WIRE_PING: case WIRE_PONG: case WIRE_PROTOCOL_BATCH_ELEMENT: @@ -387,15 +367,15 @@ static bool is_urgent(enum peer_wire type) return true; }; - /* plugins can inject other messages; assume not urgent. */ - return false; + /* plugins can inject other messages. */ + return true; } /* Process and eat protocol_batch_element messages, encrypt each element message * and return the encrypted messages as one long byte array. */ -static u8 *process_batch_elements(struct peer *peer, const u8 *msg TAKES) +static u8 *process_batch_elements(const tal_t *ctx, struct peer *peer, const u8 *msg TAKES) { - u8 *ret = tal_arr(peer, u8, 0); + u8 *ret = tal_arr(ctx, u8, 0); size_t ret_size = 0; const u8 *cursor = msg; size_t plen = tal_count(msg); @@ -454,33 +434,30 @@ static u8 *process_batch_elements(struct peer *peer, const u8 *msg TAKES) return ret; } -static struct io_plan *encrypt_and_send(struct peer *peer, const u8 *msg TAKES) +/* --dev-disconnect can do magic things: if this returns non-NULL, + free msg and do that */ +static struct io_plan *msg_out_dev_disconnect(struct peer *peer, const u8 *msg) { int type = fromwire_peektype(msg); switch (dev_disconnect_out(&peer->id, type)) { case DEV_DISCONNECT_OUT_BEFORE: - if (taken(msg)) - tal_free(msg); return io_close(peer->to_peer); case DEV_DISCONNECT_OUT_AFTER: /* Disallow reads from now on */ peer->dev_read_enabled = false; free_all_subds(peer); drain_peer(peer); - break; + return NULL; case DEV_DISCONNECT_OUT_BLACKHOLE: /* Disable both reads and writes from now on */ peer->dev_read_enabled = false; peer->dev_writes_enabled = talz(peer, u32); - break; + return NULL; case DEV_DISCONNECT_OUT_NORMAL: - break; + return NULL; case DEV_DISCONNECT_OUT_DROP: - /* Drop this message and continue */ - if (taken(msg)) - tal_free(msg); - /* Tell them to read again, */ + /* Tell them to read again. */ io_wake(&peer->subds); return msg_queue_wait(peer->to_peer, peer->peer_outq, write_to_peer, peer); @@ -488,26 +465,113 @@ static struct io_plan *encrypt_and_send(struct peer *peer, const u8 *msg TAKES) peer->dev_read_enabled = false; peer->dev_writes_enabled = tal(peer, u32); *peer->dev_writes_enabled = 1; - break; + return NULL; } + abort(); +} + +/* Do we have enough bytes without padding? */ +static bool have_full_encrypted_queue(const struct peer *peer) +{ + return membuf_num_elems(&peer->encrypted_peer_out) >= UNIFORM_MESSAGE_SIZE; +} + +/* Do we have nothing in queue? */ +static bool have_empty_encrypted_queue(const struct peer *peer) +{ + return membuf_num_elems(&peer->encrypted_peer_out) == 0; +} + +/* (Continue) writing the encrypted_peer_out array */ +static struct io_plan *write_encrypted_to_peer(struct peer *peer) +{ + assert(membuf_num_elems(&peer->encrypted_peer_out) >= UNIFORM_MESSAGE_SIZE); + return io_write_partial(peer->to_peer, + membuf_elems(&peer->encrypted_peer_out), + UNIFORM_MESSAGE_SIZE, + &peer->encrypted_peer_out_sent, + write_to_peer, peer); +} - set_urgent_flag(peer, is_urgent(type)); +/* Close the connection if this fails */ +static bool encrypt_append(struct peer *peer, const u8 *msg TAKES) +{ + int type = fromwire_peektype(msg); + const u8 *enc; + size_t enclen; /* Special message type directing us to process batch items. */ if (type == WIRE_PROTOCOL_BATCH_ELEMENT) { - peer->sent_to_peer = process_batch_elements(peer, msg); - if (!peer->sent_to_peer) - return io_close(peer->to_peer); - } - else { - peer->sent_to_peer = cryptomsg_encrypt_msg(peer, &peer->cs, msg); + enc = process_batch_elements(tmpctx, peer, msg); + if (!enc) + return false; + } else { + enc = cryptomsg_encrypt_msg(tmpctx, &peer->cs, msg); } - /* We free this and the encrypted version in next write_to_peer */ + enclen = tal_bytelen(enc); + memcpy(membuf_add(&peer->encrypted_peer_out, enclen), + enc, + enclen); + return true; +} - return io_write(peer->to_peer, - peer->sent_to_peer, - tal_bytelen(peer->sent_to_peer), - write_to_peer, peer); +static void pad_encrypted_queue(struct peer *peer) +{ + size_t needed, pingpad; + u8 *ping; + + /* BOLT #8: + * + * ``` + * +------------------------------- + * |2-byte encrypted message length| + * +------------------------------- + * | 16-byte MAC of the encrypted | + * | message length | + * +------------------------------- + * | | + * | | + * | encrypted Lightning | + * | message | + * | | + * +------------------------------- + * | 16-byte MAC of the | + * | Lightning message | + * +------------------------------- + * ``` + * + * The prefixed message length is encoded as a 2-byte big-endian integer, + * for a total maximum packet length of `2 + 16 + 65535 + 16` = `65569` bytes. + */ + assert(membuf_num_elems(&peer->encrypted_peer_out) < UNIFORM_MESSAGE_SIZE); + needed = UNIFORM_MESSAGE_SIZE - membuf_num_elems(&peer->encrypted_peer_out); + + /* BOLT #1: + * 1. type: 18 (`ping`) + * 2. data: + * * [`u16`:`num_pong_bytes`] + * * [`u16`:`byteslen`] + * * [`byteslen*byte`:`ignored`] + */ + /* So smallest possible ping is 6 bytes (2 byte type field) */ + if (needed < 2 + 16 + 16 + 6) + needed += UNIFORM_MESSAGE_SIZE; + + pingpad = needed - (2 + 16 + 16 + 6); + /* Note: we don't bother --dev-disconnect here */ + /* BOLT #1: + * A node receiving a `ping` message: + * - if `num_pong_bytes` is less than 65532: + * - MUST respond by sending a `pong` message, with `byteslen` equal to `num_pong_bytes`. + * - otherwise (`num_pong_bytes` is **not** less than 65532): + * - MUST ignore the `ping`. + */ + ping = make_ping(NULL, 65535, pingpad); + if (!encrypt_append(peer, take(ping))) + abort(); + + assert(have_full_encrypted_queue(peer)); + assert(membuf_num_elems(&peer->encrypted_peer_out) % UNIFORM_MESSAGE_SIZE == 0); } /* Kicks off write_to_peer() to look for more gossip to send from store */ @@ -574,7 +638,7 @@ static const u8 *maybe_gossip_msg(const tal_t *ctx, struct peer *peer) peer->gs.bytes_this_second += tal_bytelen(msgs[i]); status_peer_io(LOG_IO_OUT, &peer->id, msgs[i]); if (i > 0) - msg_enqueue(peer->peer_outq, take(msgs[i])); + msg_to_peer_outq(peer, take(msgs[i])); } return msgs[0]; } @@ -732,6 +796,14 @@ static void handle_pong_in(struct peer *peer, const u8 *msg) abort(); } +/* Various cases where we don't send the msg to a gossipd, we want to + * do IO logging! */ +static void log_peer_io(const struct peer *peer, const u8 *msg) +{ + status_peer_io(LOG_IO_IN, &peer->id, msg); + io_wake(peer->peer_outq); +} + /* Forward to gossipd */ static void handle_gossip_in(struct peer *peer, const u8 *msg) { @@ -744,7 +816,7 @@ static void handle_gossip_in(struct peer *peer, const u8 *msg) gmsg = towire_gossipd_recv_gossip(NULL, &peer->id, msg); /* gossipd doesn't log IO, so we log it here. */ - status_peer_io(LOG_IO_IN, &peer->id, msg); + log_peer_io(peer, msg); daemon_conn_send(peer->daemon->gossipd, take(gmsg)); } @@ -848,6 +920,22 @@ static bool handle_custommsg(struct daemon *daemon, return true; } +void custommsg_completed(struct daemon *daemon, const u8 *msg) +{ + struct node_id id; + const struct peer *peer; + + if (!fromwire_connectd_custommsg_in_complete(msg, &id)) + master_badmsg(WIRE_CONNECTD_CUSTOMMSG_IN_COMPLETE, msg); + + /* If it's still around, log it. */ + peer = peer_htable_get(daemon->peers, &id); + if (peer) { + status_peer_debug(&peer->id, "custommsg processing finished"); + log_peer_io(peer, msg); + } +} + /* We handle pings and gossip messages. */ static bool handle_message_locally(struct peer *peer, const u8 *msg) { @@ -857,19 +945,19 @@ static bool handle_message_locally(struct peer *peer, const u8 *msg) gossip_rcvd_filter_add(peer->gs.grf, msg); if (type == WIRE_GOSSIP_TIMESTAMP_FILTER) { - status_peer_io(LOG_IO_IN, &peer->id, msg); + log_peer_io(peer, msg); handle_gossip_timestamp_filter_in(peer, msg); return true; } else if (type == WIRE_PING) { - status_peer_io(LOG_IO_IN, &peer->id, msg); + log_peer_io(peer, msg); handle_ping_in(peer, msg); return true; } else if (type == WIRE_PONG) { - status_peer_io(LOG_IO_IN, &peer->id, msg); + log_peer_io(peer, msg); handle_pong_in(peer, msg); return true; } else if (type == WIRE_ONION_MESSAGE) { - status_peer_io(LOG_IO_IN, &peer->id, msg); + log_peer_io(peer, msg); handle_onion_message(peer->daemon, peer, msg); return true; } else if (type == WIRE_QUERY_CHANNEL_RANGE) { @@ -1061,55 +1149,122 @@ static void maybe_update_channelid(struct subd *subd, const u8 *msg) } } -static struct io_plan *write_to_peer(struct io_conn *peer_conn, - struct peer *peer) +static const u8 *next_msg_for_peer(struct peer *peer) { const u8 *msg; - assert(peer->to_peer == peer_conn); - - /* Free last sent one (if any) */ - peer->sent_to_peer = tal_free(peer->sent_to_peer); - /* Pop tail of send queue */ msg = msg_dequeue(peer->peer_outq); - - /* Still nothing to send? */ - if (!msg) { - /* Draining? Shutdown socket (to avoid losing msgs) */ - if (peer->draining_state == WRITING_TO_PEER) { - status_peer_debug(&peer->id, "draining done, shutting down"); - io_wake(&peer->peer_in); - return io_sock_shutdown(peer_conn); + if (msg) { + if (is_urgent(fromwire_peektype(msg))) { + peer->peer_out_urgent--; } + } else { + /* Nothing in queue means nothing urgent in queue, surely! */ + assert(peer->peer_out_urgent == 0); + + /* Draining? Don't send gossip. */ + if (peer->draining_state == WRITING_TO_PEER) + return NULL; /* If they want us to send gossip, do so now. */ msg = maybe_gossip_msg(NULL, peer); - if (!msg) { - /* Tell them to read again, */ - io_wake(&peer->subds); - io_wake(&peer->peer_in); - - /* Wait for them to wake us */ - return msg_queue_wait(peer_conn, peer->peer_outq, - write_to_peer, peer); - } + if (!msg) + return NULL; } - if (peer->draining_state == WRITING_TO_PEER) - status_peer_debug(&peer->id, "draining, but sending %s.", - peer_wire_name(fromwire_peektype(msg))); - - /* dev_disconnect can disable writes */ + /* dev_disconnect can disable writes (discard everything) */ if (peer->dev_writes_enabled) { if (*peer->dev_writes_enabled == 0) { - tal_free(msg); - /* Continue, to drain queue */ - return write_to_peer(peer_conn, peer); + return tal_free(msg); } (*peer->dev_writes_enabled)--; } - return encrypt_and_send(peer, take(msg)); + return msg; +} + +static void nonurgent_flush(struct peer *peer) +{ + peer->nonurgent_flush_timer = NULL; + peer->flushing_nonurgent = true; + io_wake(peer->peer_outq); +} + +static struct io_plan *write_to_peer(struct io_conn *peer_conn, + struct peer *peer) +{ + bool do_flush; + assert(peer->to_peer == peer_conn); + + /* We always pad and send if we have an urgent msg or our + * non-urgent has gone off, or we're trying to close. */ + do_flush = (peer->peer_out_urgent != 0 + || peer->flushing_nonurgent + || peer->draining_state == WRITING_TO_PEER); + + peer->flushing_nonurgent = false; + + /* We wrote out some bytes from membuf. */ + membuf_consume(&peer->encrypted_peer_out, peer->encrypted_peer_out_sent); + peer->encrypted_peer_out_sent = 0; + + while (!have_full_encrypted_queue(peer)) { + const u8 *msg; + struct io_plan *dev_override; + + /* Pop tail of send queue (or gossip) */ + msg = next_msg_for_peer(peer); + if (!msg) { + /* Draining? Shutdown socket (to avoid losing msgs) */ + if (have_empty_encrypted_queue(peer) + && peer->draining_state == WRITING_TO_PEER) { + status_peer_debug(&peer->id, "draining done, shutting down"); + io_wake(&peer->peer_in); + return io_sock_shutdown(peer_conn); + } + + /* If no urgent message, and not draining, we wait. */ + if (!do_flush) { + /* Tell them to read again, */ + io_wake(&peer->subds); + io_wake(&peer->peer_in); + + /* Set up a timer if not already set */ + if (!have_empty_encrypted_queue(peer) + && !peer->nonurgent_flush_timer) { + /* Bias towards larger values, but don't be too predictable */ + u32 max = pseudorand(1000); + u32 msec = 1000 - pseudorand(1 + max); + peer->nonurgent_flush_timer + = new_reltimer(&peer->daemon->timers, + peer, + time_from_msec(msec), + nonurgent_flush, peer); + } + + /* Wait for them to wake us */ + return msg_queue_wait(peer_conn, peer->peer_outq, write_to_peer, peer); + } + /* OK, add padding. */ + pad_encrypted_queue(peer); + } else { + if (peer->draining_state == WRITING_TO_PEER) + status_peer_debug(&peer->id, "draining, but sending %s.", + peer_wire_name(fromwire_peektype(msg))); + + dev_override = msg_out_dev_disconnect(peer, msg); + if (dev_override) { + tal_free(msg); + return dev_override; + } + + if (!encrypt_append(peer, take(msg))) + return io_close(peer->to_peer); + } + } + + peer->nonurgent_flush_timer = tal_free(peer->nonurgent_flush_timer); + return write_encrypted_to_peer(peer); } static struct io_plan *read_from_subd(struct io_conn *subd_conn, @@ -1120,7 +1275,7 @@ static struct io_plan *read_from_subd_done(struct io_conn *subd_conn, maybe_update_channelid(subd, subd->in); /* Tell them to encrypt & write. */ - msg_enqueue(subd->peer->peer_outq, take(subd->in)); + msg_to_peer_outq(subd->peer, take(subd->in)); subd->in = NULL; /* Wait for them to wake us */ @@ -1267,7 +1422,6 @@ static struct io_plan *read_body_from_peer_done(struct io_conn *peer_conn, /* If we swallow this, just try again. */ if (handle_message_locally(peer, decrypted)) { /* Make sure to update peer->peer_in_lastmsg so we blame correct msg! */ - io_wake(peer->peer_outq); goto out; } diff --git a/connectd/multiplex.h b/connectd/multiplex.h index 1a20143a6764..f42f7cb76ea2 100644 --- a/connectd/multiplex.h +++ b/connectd/multiplex.h @@ -28,6 +28,9 @@ void send_manual_ping(struct daemon *daemon, const u8 *msg); /* When lightningd says to send a custom message (from a plugin) */ void send_custommsg(struct daemon *daemon, const u8 *msg); +/* lightningd has finished with the custommsg */ +void custommsg_completed(struct daemon *daemon, const u8 *msg); + /* When lightningd says what custom messages we can recv */ void set_custommsgs(struct daemon *daemon, const u8 *msg); diff --git a/connectd/test/run-crc32_of_update.c b/connectd/test/run-crc32_of_update.c index 85521395ff6d..0f48c7060736 100644 --- a/connectd/test/run-crc32_of_update.c +++ b/connectd/test/run-crc32_of_update.c @@ -10,6 +10,7 @@ int unused_main(int argc, char *argv[]); #include #include #include +#include #include /* AUTOGENERATED MOCKS START */ diff --git a/connectd/tor_autoservice.c b/connectd/tor_autoservice.c index fef93a80fad5..cc867995a22d 100644 --- a/connectd/tor_autoservice.c +++ b/connectd/tor_autoservice.c @@ -12,6 +12,7 @@ #include #include +int tor_service_fd = -1; static void *buf_resize(struct membuf *mb, void *buf, size_t len) { @@ -331,5 +332,6 @@ struct wireaddr *tor_fixed_service(const tal_t *ctx, * read_partial to keep it open until LN drops * DO NOT CLOSE FD TO KEEP ADDRESS ALIVE AS WE DO NOT DETACH WITH STATIC ADDRESS */ + tor_service_fd = fd; return onion; } diff --git a/connectd/tor_autoservice.h b/connectd/tor_autoservice.h index dce91a637e49..950c6a97d3f1 100644 --- a/connectd/tor_autoservice.h +++ b/connectd/tor_autoservice.h @@ -18,4 +18,7 @@ struct wireaddr *tor_fixed_service(const tal_t *ctx, const struct wireaddr *bind, const u8 index); +/* For dev_report_fds */ +extern int tor_service_fd; + #endif /* LIGHTNING_CONNECTD_TOR_AUTOSERVICE_H */ diff --git a/contrib/cl-repro.sh b/contrib/cl-repro.sh index 87e61412fd84..1911328dcc6d 100755 --- a/contrib/cl-repro.sh +++ b/contrib/cl-repro.sh @@ -23,5 +23,5 @@ for v in focal jammy noble; do sudo docker run ubuntu:$v cat /etc/lsb-release echo "Building CL repro $v:" # shellcheck disable=SC2024 - sudo docker build -t cl-repro-$v - < "$LIGHTNING_DIR"/contrib/reprobuild/Dockerfile.$v + sudo docker build --no-cache -t cl-repro-$v - < "$LIGHTNING_DIR"/contrib/reprobuild/Dockerfile.$v done diff --git a/contrib/docker/Dockerfile.builder.fedora b/contrib/docker/Dockerfile.builder.fedora index 7d4b903fd02f..f30e1a54b9bf 100644 --- a/contrib/docker/Dockerfile.builder.fedora +++ b/contrib/docker/Dockerfile.builder.fedora @@ -1,7 +1,9 @@ -FROM fedora:35 +FROM fedora:40 ENV UV_PYTHON=3.12 ENV BITCOIN_VERSION=27.1 +ENV SOURCE_DATE_EPOCH=1672531200 +ENV RUSTFLAGS="-C link-arg=-Wl,--build-id=none" WORKDIR /tmp @@ -20,9 +22,25 @@ RUN dnf update -y && \ jq \ xz \ zlib-devel \ - cargo \ - libsodium-devel && \ - wget https://github.com/kristapsdz/lowdown/archive/refs/tags/VERSION_1_0_2.tar.gz && \ + libsodium-devel \ + which \ + sed \ + gettext-devel \ + gmp-devel \ + python3-devel \ + python3-pip \ + python3-poetry \ + postgresql-devel \ + protobuf-compiler \ + protobuf-devel && \ + dnf clean all + +# Install Rust via rustup (for lockfile v4 support) +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.92.0 +ENV PATH="/root/.cargo/bin:${PATH}" + +# Install lowdown +RUN wget https://github.com/kristapsdz/lowdown/archive/refs/tags/VERSION_1_0_2.tar.gz && \ tar -xzf VERSION_1_0_2.tar.gz && \ cd lowdown-VERSION_1_0_2 && \ ./configure && \ @@ -30,9 +48,9 @@ RUN dnf update -y && \ make install && \ ldconfig && \ cd /tmp && \ - rm -rf VERSION_1_0_2.tar.gz lowdown-VERSION_1_0_2 && \ - dnf clean all + rm -rf VERSION_1_0_2.tar.gz lowdown-VERSION_1_0_2 +# Install Bitcoin Core RUN wget https://storage.googleapis.com/c-lightning-tests/bitcoind/bitcoin-${BITCOIN_VERSION}-x86_64-linux-gnu.tar.gz \ -O bitcoin.tar.gz && \ tar -xvzf bitcoin.tar.gz && \ @@ -42,6 +60,6 @@ RUN wget https://storage.googleapis.com/c-lightning-tests/bitcoind/bitcoin-${BIT mv bitcoin-$BITCOIN_VERSION/share/man/man1/* /usr/share/man/man1 && \ rm -rf bitcoin.tar.gz bitcoin-$BITCOIN_VERSION -# Ensure `uv` can be found -ENV PATH=${PATH}:/root/.local/bin +# Install uv +ENV PATH="${PATH}:/root/.local/bin" RUN wget -qO- https://astral.sh/uv/install.sh | sh diff --git a/contrib/msggen/msggen/gen/grpc/convert.py b/contrib/msggen/msggen/gen/grpc/convert.py index 72178b31ef36..3adc7978cd14 100644 --- a/contrib/msggen/msggen/gen/grpc/convert.py +++ b/contrib/msggen/msggen/gen/grpc/convert.py @@ -130,6 +130,8 @@ def generate_composite(self, prefix, field: CompositeField, override=None): "TlvStream?": f"c.{name}.map(|s| s.into())", "RoutehintList?": f"c.{name}.map(|rl| rl.into())", "DecodeRoutehintList?": f"c.{name}.map(|drl| drl.into())", + "string_map": f"Some(c.{name})", + "string_map?": f"c.{name}.unwrap_or(HashMap::new())", }.get( typ, f"c.{name}" # default to just assignment ) @@ -202,6 +204,7 @@ def generate(self, service: Service) -> None: use cln_rpc::notifications; use crate::pb; use std::str::FromStr; + use std::collections::HashMap; use bitcoin::hashes::sha256::Hash as Sha256; use bitcoin::hashes::Hash; use cln_rpc::primitives::PublicKey; diff --git a/contrib/msggen/msggen/gen/grpc/proto.py b/contrib/msggen/msggen/gen/grpc/proto.py index b0af147e168a..3f2b981ab644 100644 --- a/contrib/msggen/msggen/gen/grpc/proto.py +++ b/contrib/msggen/msggen/gen/grpc/proto.py @@ -201,7 +201,7 @@ def generate_message(self, message: CompositeField, typename_override=None): if f.omit(): continue - opt = "optional " if f.optional else "" + opt = "optional " if f.optional and not (isinstance(f, PrimitiveField) and f.typename == "string_map") else "" if isinstance(f, ArrayField): typename = f.override( diff --git a/contrib/msggen/msggen/gen/grpc/unconvert.py b/contrib/msggen/msggen/gen/grpc/unconvert.py index 974139b60e17..16a7591d10b6 100644 --- a/contrib/msggen/msggen/gen/grpc/unconvert.py +++ b/contrib/msggen/msggen/gen/grpc/unconvert.py @@ -131,6 +131,8 @@ def generate_composite(self, prefix, field: CompositeField, override=None) -> No "hash?": f"c.{name}.map(|v| Sha256::from_slice(&v).unwrap())", "txid": f"hex::encode(&c.{name})", "TlvStream?": f"c.{name}.map(|s| s.into())", + "string_map": f"c.{name}.unwrap()", + "string_map?": f"Some(c.{name})", }.get( typ, f"c.{name}" # default to just assignment ) diff --git a/contrib/msggen/msggen/gen/grpc/util.py b/contrib/msggen/msggen/gen/grpc/util.py index 2682d96b9060..267691d59be6 100644 --- a/contrib/msggen/msggen/gen/grpc/util.py +++ b/contrib/msggen/msggen/gen/grpc/util.py @@ -35,6 +35,7 @@ "secret": "bytes", "bip340sig": "string", "hash": "bytes", + "string_map": "map", } diff --git a/contrib/msggen/msggen/gen/rpc/rust.py b/contrib/msggen/msggen/gen/rpc/rust.py index 14beeae64ba1..b2fa76251666 100644 --- a/contrib/msggen/msggen/gen/rpc/rust.py +++ b/contrib/msggen/msggen/gen/rpc/rust.py @@ -46,6 +46,7 @@ "secret": "Secret", "bip340sig": "String", "integer": "i64", + "string_map": "HashMap", } header = f""" @@ -306,6 +307,7 @@ def generate_requests(self, service: Service): #[allow(unused_imports)] use serde::{{Deserialize, Serialize}}; use core::fmt::Debug; + use std::collections::HashMap; use super::{IntoRequest, Request, TypedRequest}; """ ) diff --git a/contrib/msggen/msggen/model.py b/contrib/msggen/msggen/model.py index 50317abea1ef..a48336a97145 100644 --- a/contrib/msggen/msggen/model.py +++ b/contrib/msggen/msggen/model.py @@ -432,6 +432,7 @@ class PrimitiveField(Field): "secret", "bip340sig", "hash", + "string_map", ] def __init__(self, typename, path, description, added, deprecated): @@ -519,6 +520,7 @@ def __str__(self): CreateRuneRestrictionsField = ArrayField(itemtype=PrimitiveField("string", None, None, added=None, deprecated=None), dims=1, path=None, description=None, added=None, deprecated=None) CheckRuneParamsField = ArrayField(itemtype=PrimitiveField("string", None, None, added=None, deprecated=None), dims=1, path=None, description=None, added=None, deprecated=None) ChainMovesExtraTagsField = ArrayField(itemtype=PrimitiveField("string", None, None, added=None, deprecated=None), dims=1, path=None, description=None, added=None, deprecated=None) +ClnrestRegisterPathParamsField = PrimitiveField("string_map", None, None, added=None, deprecated=None) # TlvStreams are special, they don't have preset dict-keys, rather # they can specify `u64` keys pointing to hex payloads. So the schema @@ -545,7 +547,6 @@ def __str__(self): 'KeySend.routehints': RoutehintListField, 'KeySend.extratlvs': TlvStreamField, 'Decode.routes': DecodeRoutehintListField, - 'DecodePay.routes': DecodeRoutehintListField, 'CreateInvoice.label': InvoiceLabelField, 'DatastoreUsage.key': DatastoreUsageKeyField, 'WaitInvoice.label': InvoiceLabelField, @@ -555,6 +556,7 @@ def __str__(self): 'CreateRune.restrictions': CreateRuneRestrictionsField, 'CheckRune.params': CheckRuneParamsField, "ListChainMoves.chainmoves[].extra_tags": ChainMovesExtraTagsField, + "Clnrest-Register-Path.rune_restrictions.params": ClnrestRegisterPathParamsField, } diff --git a/contrib/msggen/msggen/schema.json b/contrib/msggen/msggen/schema.json index d3b47fe5dd14..0215a35b841f 100644 --- a/contrib/msggen/msggen/schema.json +++ b/contrib/msggen/msggen/schema.json @@ -252,10 +252,10 @@ "lightning-askrene-listlayers(7)" ], "author": [ - "Rusty Russell <> is mainly responsible." + "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." ], "resources": [ - "Main web site: " + "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" ], "examples": [ { @@ -3772,9 +3772,9 @@ "type": "object", "additionalProperties": false, "rpc": "bkpr-editdescriptionbypaymentid", - "title": "Command to change the description for events with {payment_id} after they're made", + "title": "Command to change the description for events with `payment_id` after they're made", "description": [ - "The **bkpr-editdescriptionbypaymentid** RPC command updates all chain and channel events that match the {payment_id} with the provided {description}" + "The **bkpr-editdescriptionbypaymentid** RPC command updates all chain and channel events that match the `payment_id` with the provided `description`" ], "request": { "required": [ @@ -5678,6 +5678,123 @@ } ] }, + "clnrest-register-path.json": { + "$schema": "../rpc-schema-draft.json", + "type": "object", + "added": "v26.04", + "rpc": "clnrest-register-path", + "title": "Command to add a path to clnrest", + "description": [ + "`clnrest-register-path` is a low-level rpc command for plugin developers to register a custom REST API path with an associated RPC method and optional rune validation." + ], + "request": { + "required": [ + "path", + "rpc_method" + ], + "properties": { + "path": { + "type": "string", + "description": [ + "The REST API path to register (e.g., '/v1/custom/endpoint'). Captures which translate to an rpc parameter of 'key:value' are written like this: '/user/{key}'" + ] + }, + "rpc_method": { + "type": "string", + "description": [ + "The RPC method name to invoke when this ``path`` and ``http_method`` combination is accessed." + ] + }, + "http_method": { + "type": "string", + "description": [ + "HTTP method for this ``path``. Valid values are: ``GET``, ``POST``, ``PUT``, ``PATCH`` or ``DELETE``. Defaults to ``POST``." + ] + }, + "rune_required": { + "type": "boolean", + "description": [ + "Whether a rune is required to access this ``path``. Is only allowed to be ``false`` for ``GET`` requests. Defaults to true" + ] + }, + "rune_restrictions": { + "type": "object", + "description": [ + "Optional rune validation parameters to check before allowing access. These are passed to the checkrune RPC command. Omitting the rune_restrictions parameter means using your matched rpc method and the rpc params used. You can use this for example to not require the user to create a new rune for your rpc_method but rather require something like method=pay." + ], + "additionalProperties": false, + "properties": { + "nodeid": { + "type": "string", + "description": [ + "Node id of requesting node *(required until v23.11)*." + ] + }, + "method": { + "type": "string", + "description": [ + "Method for which rune needs to be validated *(required until v23.11)*. Omitting this means your rpc_method will be used." + ] + }, + "params": { + "type": "object", + "description": [ + "Parameters for method. Omitting this means the rpc params from the request will be used." + ] + } + } + } + } + }, + "response": { + "required": [], + "additionalProperties": false, + "properties": {} + }, + "examples": [ + { + "request": { + "id": "example:clnrest-register-path#1", + "method": "clnrest-register-path", + "params": { + "path": "/custom/endpoint/{user}", + "rpc_method": "custom-rpc-method", + "http_method": "GET", + "rune_required": false + } + }, + "response": {} + }, + { + "request": { + "id": "example:clnrest-register-path#2", + "method": "clnrest-register-path", + "params": { + "path": "/v1/superpay", + "rpc_method": "superpay", + "http_method": "POST", + "rune_required": true, + "rune_restrictions": { + "method": "pay" + } + } + }, + "response": {} + } + ], + "errors": [ + "The following errors may be reported:", + "", + "- 32700: Message either indicating conflicting paths or invalid/missing parameters." + ], + "author": [ + "daywalker90 is mainly responsible for this command." + ], + "see_also": [ + "lightning-createrune(7)", + "lightning-checkrune(7)" + ] + }, "close.json": { "$schema": "../rpc-schema-draft.json", "type": "object", @@ -5791,26 +5908,6 @@ ], "properties": { "type": {}, - "tx": { - "type": "hex", - "deprecated": [ - "v24.11", - "v25.12" - ], - "description": [ - "The raw bitcoin transaction used to close the channel (if it was open)." - ] - }, - "txid": { - "type": "txid", - "deprecated": [ - "v24.11", - "v25.12" - ], - "description": [ - "The transaction id of the *tx* field." - ] - }, "txs": { "added": "v24.11", "type": "array", @@ -6730,14 +6827,14 @@ "type": "array", "description": [ "Alternatives use a simple language to examine the command which is being run:", - " * time: the current UNIX time, e.g. \"time<1656759180\".", - " * id: the node_id of the peer, e.g. \"id=024b9a1fa8e006f1e3937f65f66c408e6da8e1ca728ea43222a7381df1cc449605\".", - " * method: the command being run, e.g. \"method=withdraw\".", - " * per: how often the rune can be used, with suffix \"sec\" (default), \"min\", \"hour\", \"day\" or \"msec\", \"usec\" or \"nsec\". e.g. \"per=5sec\".", - " * rate: the rate limit, per minute, e.g. \"rate=60\" is equivalent to \"per=1sec\".", - " * pnum: the number of parameters. e.g. \"pnum<2\".", - " * pnameX: the parameter named X e.g. \"pnamedestination=1RustyRX2oai4EYYDpQGWvEL62BBGqN9T\". NOTE: until v24.05, X had to remove underscores from the parameter name (e.g. `pnameamount_msat` had to be specified as `pnameamountmsat`) but that is now fixed.", - " * parrN: the N'th parameter. e.g. \"parr0=1RustyRX2oai4EYYDpQGWvEL62BBGqN9T\".", + " * time: the current UNIX time, e.g. `time<1656759180`.", + " * id: the node_id of the peer, e.g. `id=024b9a1fa8e006f1e3937f65f66c408e6da8e1ca728ea43222a7381df1cc449605`.", + " * method: the command being run, e.g. `method=withdraw`.", + " * per: how often the rune can be used, with suffix \"sec\" (default), \"min\", \"hour\", \"day\" or \"msec\", \"usec\" or \"nsec\". e.g. `per=5sec`.", + " * rate: the rate limit, per minute, e.g. `rate=60` is equivalent to `per=1sec`.", + " * pnum: the number of parameters. e.g. `pnum<2`.", + " * pnameX: the parameter named X e.g. `pnamedestination=1RustyRX2oai4EYYDpQGWvEL62BBGqN9T`. NOTE: until v24.05, X had to remove underscores from the parameter name (e.g. `pnameamount_msat` had to be specified as `pnameamountmsat`) but that is now fixed.", + " * parrN: the N'th parameter. e.g. `parr0=1RustyRX2oai4EYYDpQGWvEL62BBGqN9T`.", " * pinvX_N: parse the parameter X as an invoice (bolt11 or bolt12) and extract field N for comparison. Fails if parameter X is not present, does not parse, or N is not one of the following field names:", " * amount", " * description", @@ -7085,12 +7182,12 @@ "", "However, since brackets and AND conditions within OR are currently not supported for rune creation, we can restructure the conditions as follows:", "", - "- method^list|method^get|method=summary|method=pay|method=xpay", - "- method/listdatastore", - "- method/pay|per=1day", - "- method/pay|pnameamount\\_msat<100000001", - "- method/xpay|per=1day", - "- method/xpay|pnameamount\\_msat<100000001" + "- `method^list|method^get|method=summary|method=pay|method=xpay`", + "- `method/listdatastore`", + "- `method/pay|per=1day`", + "- `method/pay|pnameamount_msat<100000001`", + "- `method/xpay|per=1day`", + "- `method/xpay|pnameamount_msat<100000001`" ], "request": { "id": "example:createrune#9", @@ -9911,311 +10008,6 @@ } ] }, - "decodepay.json": { - "$schema": "../rpc-schema-draft.json", - "type": "object", - "added": "v23.05", - "depecated": [ - "v24.11", - "v25.12" - ], - "rpc": "decodepay", - "title": "Command for decoding a bolt11 string (low-level)", - "description": [ - "WARNING: deprecated: use *decode* which also handles bolt12.", - "", - "The **decodepay** RPC command checks and parses a *bolt11* string as specified by the BOLT 11 specification." - ], - "request": { - "required": [ - "bolt11" - ], - "additionalProperties": false, - "properties": { - "bolt11": { - "type": "string", - "description": [ - "Bolt11 invoice to decode." - ] - }, - "description": { - "type": "string", - "description": [ - "Description of the invoice to decode." - ] - } - } - }, - "response": { - "required": [ - "currency", - "created_at", - "expiry", - "payee", - "min_final_cltv_expiry", - "payment_hash", - "signature" - ], - "additionalProperties": false, - "properties": { - "currency": { - "type": "string", - "description": [ - "The BIP173 name for the currency." - ] - }, - "created_at": { - "type": "u64", - "description": [ - "The UNIX-style timestamp of the invoice." - ] - }, - "expiry": { - "type": "u64", - "description": [ - "The number of seconds this is valid after *timestamp*." - ] - }, - "payee": { - "type": "pubkey", - "description": [ - "The public key of the recipient." - ] - }, - "amount_msat": { - "type": "msat", - "description": [ - "Amount the invoice asked for." - ] - }, - "payment_hash": { - "type": "hash", - "description": [ - "The hash of the *payment_preimage*." - ] - }, - "signature": { - "type": "signature", - "description": [ - "Signature of the *payee* on this invoice." - ] - }, - "description": { - "type": "string", - "description": [ - "The description of the purpose of the purchase." - ] - }, - "description_hash": { - "type": "hash", - "description": [ - "The hash of the description, in place of *description*." - ] - }, - "min_final_cltv_expiry": { - "type": "u32", - "description": [ - "The minimum CLTV delay for the final node." - ] - }, - "payment_secret": { - "type": "hash", - "description": [ - "The secret to hand to the payee node." - ] - }, - "features": { - "type": "hex", - "description": [ - "The features bitmap for this invoice." - ] - }, - "payment_metadata": { - "type": "hex", - "description": [ - "The payment_metadata to put in the payment." - ] - }, - "fallbacks": { - "type": "array", - "description": [ - "Onchain addresses." - ], - "items": { - "type": "object", - "required": [ - "type", - "hex" - ], - "additionalProperties": false, - "properties": { - "type": { - "type": "string", - "description": [ - "The address type (if known)." - ], - "enum": [ - "P2PKH", - "P2SH", - "P2WPKH", - "P2WSH", - "P2TR" - ] - }, - "addr": { - "type": "string", - "description": [ - "The address in appropriate format for *type*." - ] - }, - "hex": { - "type": "hex", - "description": [ - "Raw encoded address." - ] - } - } - } - }, - "routes": { - "type": "array", - "description": [ - "Route hints to the *payee*." - ], - "items": { - "type": "array", - "description": [ - "Hops in the route." - ], - "items": { - "type": "object", - "required": [ - "pubkey", - "short_channel_id", - "fee_base_msat", - "fee_proportional_millionths", - "cltv_expiry_delta" - ], - "additionalProperties": false, - "properties": { - "pubkey": { - "type": "pubkey", - "description": [ - "The public key of the node." - ] - }, - "short_channel_id": { - "type": "short_channel_id", - "description": [ - "A channel to the next peer." - ] - }, - "fee_base_msat": { - "type": "msat", - "description": [ - "The base fee for payments." - ] - }, - "fee_proportional_millionths": { - "type": "u32", - "description": [ - "The parts-per-million fee for payments." - ] - }, - "cltv_expiry_delta": { - "type": "u32", - "description": [ - "The CLTV delta across this hop." - ] - } - } - } - } - }, - "extra": { - "type": "array", - "description": [ - "Any extra fields we didn't know how to parse." - ], - "items": { - "type": "object", - "required": [ - "tag", - "data" - ], - "additionalProperties": false, - "properties": { - "tag": { - "type": "string", - "description": [ - "The bech32 letter which identifies this field." - ], - "maxLength": 1, - "minLength": 1 - }, - "data": { - "type": "string", - "description": [ - "The bech32 data for this field." - ] - } - } - } - } - }, - "post_return_value_notes": [ - "Technically, the *description* field is optional if a *description_hash* field is given, but in this case **decodepay** will only succeed if the optional *description* field is passed and matches the *description_hash*. In practice, these are currently unused." - ] - }, - "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." - ], - "see_also": [ - "lightning-pay(7)", - "lightning-getroute(7)", - "lightning-sendpay(7)" - ], - "resources": [ - "[BOLT #11](https://github.com/lightning/bolts/blob/master/11-payment-encoding.md)", - "", - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" - ], - "examples": [ - { - "request": { - "id": "example:decodepay#1", - "method": "decodepay", - "params": { - "bolt11": "lnbcrt100n1pnt2bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000bolt11invl010100000000" - } - }, - "response": { - "currency": "bcrt", - "created_at": 1738000000, - "expiry": 604800, - "payee": "nodeid010101010101010101010101010101010101010101010101010101010101", - "amount_msat": 10000, - "description": "l11 description", - "min_final_cltv_expiry": 5, - "payment_secret": "paymentsecretinvl00110001100011000110001100011000110001100011000", - "features": "02024100", - "routes": [ - [ - { - "pubkey": "nodeid020202020202020202020202020202020202020202020202020202020202", - "short_channel_id": "109x1x1", - "fee_base_msat": 1, - "fee_proportional_millionths": 10, - "cltv_expiry_delta": 6 - } - ] - ], - "payment_hash": "paymenthashinvl0110011001100110011001100110011001100110011001100", - "signature": "dcdepay30c4bb50bed209d020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" - } - } - ] - }, "deldatastore.json": { "$schema": "../rpc-schema-draft.json", "type": "object", @@ -15026,7 +14818,7 @@ "$schema": "../rpc-schema-draft.json", "type": "object", "rpc": "getlog", - "title": "Command to show logs.", + "title": "Command to show recent logs.", "description": [ "The **getlog** the RPC command to show logs, with optional log *level*." ], @@ -15200,8 +14992,7 @@ "required": [ "time", "source", - "log", - "data" + "log" ], "properties": { "type": {}, @@ -15587,7 +15378,7 @@ "", "Layers are generally maintained by plugins, either to contain persistent information about capacities which have been discovered, or to contain transient information for this particular payment (such as blinded paths or routehints).", "", - "There are three automatic layers: *auto.localchans* contains information on local channels from this node (including non-public ones), and their exact current spendable capacities. *auto.sourcefree* overrides all channels (including those from previous layers) leading out of the *source* to be zero fee and zero delay. These are both useful in the case where the source is the current node. And *auto.no_mpp_support* forces getroutes to return a single path solution which is useful for payments for which MPP is not supported." + "There are four automatic layers: *auto.localchans* contains information on local channels from this node (including non-public ones), and their exact current spendable capacities. *auto.sourcefree* overrides all channels (including those from previous layers) leading out of the *source* to be zero fee and zero delay. These are both useful in the case where the source is the current node. *auto.no_mpp_support* forces getroutes to return a single path solution which is useful for payments for which MPP is not supported. And *auto.include_fees* that fixes the send amount and deducts fee from there, ie. the receiver pays for fees instead of the sender." ], "categories": [ "readonly" @@ -16763,7 +16554,7 @@ ], "see_also": [ "lightning-listpays(7)", - "lightning-decodepay(7)", + "lightning-decode(7)", "lightning-listinvoices(7)", "lightning-delinvoice(7)", "lightning-getroute(7)", @@ -20328,6 +20119,82 @@ ] } } + }, + "currencyrate-add-source": { + "added": "v26.04", + "type": "object", + "additionalProperties": false, + "required": [ + "values_str", + "sources" + ], + "properties": { + "values_str": { + "type": "array", + "added": "v26.04", + "items": { + "type": "string", + "description": [ + "A source for cln-currencyrate to fetch price data from in the format of NAME,URL,MEMBERS" + ] + } + }, + "sources": { + "type": "array", + "added": "v26.04", + "items": { + "type": "string", + "description": [ + "Source of configuration setting." + ] + } + }, + "plugin": { + "type": "string", + "added": "v26.04", + "description": [ + "Plugin which registered this configuration setting." + ] + } + } + }, + "currencyrate-disable-source": { + "added": "v26.04", + "type": "object", + "additionalProperties": false, + "required": [ + "values_str", + "sources" + ], + "properties": { + "values_str": { + "type": "array", + "added": "v26.04", + "items": { + "type": "string", + "description": [ + "The name of the cln-currencyrate source to disable" + ] + } + }, + "sources": { + "type": "array", + "added": "v26.04", + "items": { + "type": "string", + "description": [ + "Source of configuration setting." + ] + } + }, + "plugin": { + "type": "string", + "added": "v26.04", + "description": [ + "Plugin which registered this configuration setting." + ] + } + } } } } @@ -23718,9 +23585,11 @@ "rpc": "listpeerchannels", "title": "Command returning data on channels of connected lightning nodes", "description": [ - "The **listpeerchannels** RPC command returns list of this node's channels, with the possibility to filter them by peer's node id.", + "The **listpeerchannels** RPC command returns a list of this node's channels.", "", - "If no *id* is supplied, then channel data on all lightning nodes that are connected, or not connected but have open channels with this node, are returned." + "By default, data for all known channels is returned, including those to peers that are currently connected and those to peers that are disconnected but still have open channels.", + "", + "At most one of *id*, *short_channel_id* or *channel_id* may be provided as a filter. If more than one is provided, the command fails with an error." ], "categories": [ "readonly" @@ -23732,14 +23601,21 @@ "id": { "type": "pubkey", "description": [ - "If supplied, limits the channels to just the peer with the given ID, if it exists." + "If supplied, limits the channels to just the peer with the given ID, if it exists. Cannot be used with 'short_channel_id' or 'channel_id'." ] }, "short_channel_id": { "added": "v25.05", "type": "short_channel_id", "description": [ - "If supplied, limits the channels to just this short_channel_id (or local alias), if it exists. Cannot be used with 'id'." + "If supplied, limits the channels to just this short_channel_id (or local alias), if it exists. Cannot be used with 'id' or 'channel_id'." + ] + }, + "channel_id": { + "added": "v26.03", + "type": "hash", + "description": [ + "If supplied, limits the channels to just this channel_id, if it exists. Cannot be used with 'id' or 'short_channel_id'." ] } } @@ -24175,12 +24051,11 @@ "option_static_remotekey", "option_anchor_outputs", "option_anchors", - "option_anchors_zero_fee_htlc_tx", "option_scid_alias", "option_zeroconf" ], "description": [ - "BOLT #9 features which apply to this channel. Note that *anchors_zero_fee_htlc_tx* is a deprecated synonym for *anchors*." + "BOLT #9 features which apply to this channel." ] } }, @@ -24287,7 +24162,7 @@ ], "deprecated": [ "v25.02", - "v26.06" + "v26.03" ] }, "their_max_htlc_value_in_flight_msat": { @@ -25249,7 +25124,6 @@ }, "features": [ "option_static_remotekey", - "option_anchors_zero_fee_htlc_tx", "option_anchors" ], "funding": { @@ -25381,7 +25255,6 @@ }, "features": [ "option_static_remotekey", - "option_anchors_zero_fee_htlc_tx", "option_anchors" ], "funding": { @@ -25507,7 +25380,6 @@ }, "features": [ "option_static_remotekey", - "option_anchors_zero_fee_htlc_tx", "option_anchors" ], "funding": { @@ -27948,6 +27820,17 @@ "Make recurrence optional, for backwards compatibility (older payers will only pay once)." ] }, + "fronting_nodes": { + "added": "v26.04", + "type": "array", + "items": { + "type": "pubkey" + }, + "description": [ + "An optional array of peer nodes to create blinded paths from. One of these blinded paths will also be used for the invoice, when they request it. This overrides the `payment-fronting-node` configuration setting. If set to the empty array, this means *no fronting nodes*." + ], + "default": "The `payment-fronting-node` configuration setting" + }, "dev_paths": { "hidden": true } @@ -29416,7 +29299,7 @@ ], "see_also": [ "lightning-listpays(7)", - "lightning-decodepay(7)", + "lightning-decode(7)", "lightning-listinvoices(7)", "lightning-delinvoice(7)", "lightning-getroute(7)", @@ -29472,7 +29355,7 @@ "rpc": "ping", "title": "Command to check if a node is up.", "description": [ - "The **ping** command checks if the node with *id* is ready to talk. It currently only works for peers we have a channel with." + "The **ping** command checks if the node with *id* is ready to talk. It only works for peers we are currently connected with." ], "request": { "required": [ @@ -30382,7 +30265,9 @@ "description": [ "The **recover** RPC command wipes your node and restarts it with the `--recover` option. This is only permitted if the node is unused: no channels, no bitcoin addresses issued (you can use `check` to see if recovery is possible).", "", - "*hsmsecret* is either a codex32 secret starting with \"cl1\" as returned by `lightning-hsmtool getcodexsecret`, or a raw 64 character hex string.", + "For nodes created with v25.12 or later, *hsmsecret* MUST be the 12-word mnemonic.", + "", + "For earlier nodes, *hsmsecret* is either a codex32 secret starting with \"cl1\" as returned by `lightning-hsmtool getcodexsecret`, or a raw 64 character hex string.", "", "NOTE: this command only currently works with the `sqlite3` database backend." ], @@ -30395,7 +30280,7 @@ "hsmsecret": { "type": "string", "description": [ - "Either a codex32 secret starting with `cl1` as returned by `lightning-hsmtool getcodexsecret`, or a raw 64 character hex string." + "Usually a 12-word mnemonic; but for old nodes either a codex32 secret starting with `cl1` as returned by `lightning-hsmtool getcodexsecret` or a raw 64 character hex string." ] } } @@ -34415,12 +34300,6 @@ 0, "option_static_remotekey" ], - [ - 29, - 23, - 1, - "option_anchors_zero_fee_htlc_tx" - ], [ 30, 23, @@ -34648,7 +34527,7 @@ "outputs": { "type": "array", "description": [ - "Format is like: [{destination1: amount1}, {destination2: amount2}] or [{destination: *all*}]. It supports any number of **confirmed** outputs." + "Format is like: `[{destination1: amount1}, {destination2: amount2}]` or `[{destination: *all*}]`. It supports any number of **confirmed** outputs." ], "items": { "type": "outputdesc" @@ -37405,7 +37284,7 @@ ], "see_also": [ "lightning-pay(7)", - "lightning-decodepay(7)" + "lightning-decode(7)" ], "resources": [ "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" diff --git a/contrib/msggen/msggen/utils/utils.py b/contrib/msggen/msggen/utils/utils.py index 4e3cd48c8549..d2ec1586a9e5 100644 --- a/contrib/msggen/msggen/utils/utils.py +++ b/contrib/msggen/msggen/utils/utils.py @@ -57,7 +57,6 @@ "TxSend", "ListPeerChannels", "ListClosedChannels", - "DecodePay", "Decode", "DelPay", "DelForward", @@ -151,6 +150,7 @@ "ListChainMoves", "ListNetworkEvents", "DelNetworkEvent", + "Clnrest-Register-Path", ] grpc_notification_names = [ diff --git a/contrib/pyln-client/pyln/client/gossmap.py b/contrib/pyln-client/pyln/client/gossmap.py index b797f20290ea..920974a4cb9f 100755 --- a/contrib/pyln-client/pyln/client/gossmap.py +++ b/contrib/pyln-client/pyln/client/gossmap.py @@ -18,7 +18,7 @@ GOSSIP_STORE_LEN_PUSH_BIT = 0x4000 GOSSIP_STORE_LEN_COMPLETE_BIT = 0x2000 -# These duplicate constants in lightning/gossipd/gossip_store_wiregen.h +# These duplicate constants in lightning/common/gossip_store_wiregen.h WIRE_GOSSIP_STORE_PRIVATE_CHANNEL = 4104 WIRE_GOSSIP_STORE_PRIVATE_UPDATE = 4102 WIRE_GOSSIP_STORE_DELETE_CHAN = 4103 diff --git a/contrib/pyln-client/pyln/client/lightning.py b/contrib/pyln-client/pyln/client/lightning.py index a92f07f063fe..2d87655626e3 100644 --- a/contrib/pyln-client/pyln/client/lightning.py +++ b/contrib/pyln-client/pyln/client/lightning.py @@ -584,16 +584,6 @@ def datastoreusage(self, key=None): } return self.call("datastoreusage", payload) - def decodepay(self, bolt11, description=None): - """ - Decode {bolt11}, using {description} if necessary. - """ - payload = { - "bolt11": bolt11, - "description": description - } - return self.call("decodepay", payload) - def deldatastore(self, key, generation=None): """ Remove an existing entry from the datastore. @@ -1062,7 +1052,7 @@ def listpeers(self, peerid=None, level=None): } return self.call("listpeers", payload) - def listpeerchannels(self, peer_id=None, short_channel_id=None): + def listpeerchannels(self, peer_id=None, short_channel_id=None, channel_id=None): """ Show current peers channels, and if the {peer_id} is specified all the channels for the peer are returned, and if {short_channel_id} is @@ -1071,6 +1061,7 @@ def listpeerchannels(self, peer_id=None, short_channel_id=None): payload = { "id": peer_id, "short_channel_id": short_channel_id, + "channel_id": channel_id, } return self.call("listpeerchannels", payload) @@ -1130,7 +1121,7 @@ def newaddr(self, addresstype=None): def offer(self, amount, description=None, issuer=None, label=None, quantity_max=None, absolute_expiry=None, recurrence=None, recurrence_base=None, recurrence_paywindow=None, recurrence_limit=None, - single_use=None): + single_use=None, fronting_nodes=None): """ Create an offer (or returns an existing 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. @@ -1147,6 +1138,7 @@ def offer(self, amount, description=None, issuer=None, label=None, quantity_max= "recurrence_paywindow": recurrence_paywindow, "recurrence_limit": recurrence_limit, "single_use": single_use, + "fronting_nodes": fronting_nodes, } return self.call("offer", payload) diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py index afc057d5f4ff..f6cdaac201f1 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py @@ -25,13 +25,15 @@ from pyln.grpc import primitives_pb2 as primitives__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xc0\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\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\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\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xdf\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cnum_channels\x18\x08 \x01(\rH\x02\x88\x01\x01\x42\x0b\n\t_featuresB\x0e\n\x0c_remote_addrB\x0f\n\r_num_channels\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\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\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x01\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\xad\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\x0b\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\\\n\x0cSendpayRoute\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\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xac\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1c\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"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\"\xc7\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\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\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\"\xfd\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\n\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_created_indexB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xe6\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\n\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\x0b\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_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\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"3\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"\x88\x01\n\x0fRecoverResponse\x12\x37\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResultH\x00\x88\x01\x01\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\x42\t\n\x07_result\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\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\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rcreated_index\x18\n \x01(\x04H\x05\x88\x01\x01\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mppB\x10\n\x0e_created_index\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xd3\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\x0b\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0c\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xe7\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\t\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xfc\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\x0b\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\x93\x04\n\nPayRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\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\x17\n\nriskfactor\x18\x08 \x01(\x01H\x05\x88\x01\x01\x12\x0f\n\x07\x65xclude\x18\n \x03(\t\x12 \n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0c \x01(\tH\x07\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0e \x01(\x0cH\t\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\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\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"\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\"\xd3\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x1a\n\rcreated_index\x18\r \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\t\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\n\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xc4\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x1a\n\rcreated_index\x18\r \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\t\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\n\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\x8e\x05\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\n\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb9\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12!\n\x07satoshi\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xaf\x03\n\x0eKeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\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\x12 \n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\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(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa0\x03\n\x0fUtxopsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"e\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xf4\x19\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x01\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\t\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\n\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0b\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\x0c\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\r\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0e\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x0f\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x14\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x15\x88\x01\x01\x12\x30\n\x16max_total_htlc_in_msat\x18\x1e \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\x12H1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x42\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_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\x8b\x02\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1a\n\rsplice_amount\x18\x07 \x01(\x12H\x01\x88\x01\x01\x42\x0f\n\r_scratch_txidB\x10\n\x0e_splice_amount\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"]\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\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"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\"\xd0\n\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\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\n\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0b\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"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\"\xc7\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.DecodepayExtra\x12-\n\x06routes\x18\x11 \x01(\x0b\x32\x18.cln.DecodeRoutehintListH\x06\x88\x01\x01\x42\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_metadataB\t\n\x07_routes\"\xd0\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\"N\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\x12\x08\n\x04P2TR\x10\x04\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\"\x8c(\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\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\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH$\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH%\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\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\x12\x16\n\tdecrypted\x18L \x01(\x0cH=\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH>\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH?\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH@\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tHA\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHB\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHC\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHD\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHE\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHF\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHG\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHH\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHI\x88\x01\x01\"\x83\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\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_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalid\"\xec\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08\x62linding\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x0b\n\t_blindingB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\"\x97\x02\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08\x62linding\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x03\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x0b\n\t_blindingB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xaa\x02\n\x0f\x44\x65\x63odeFallbacks\x12\x36\n)warning_invoice_fallbacks_version_invalid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42,\n*_warning_invoice_fallbacks_version_invalidB\x07\n\x05_addr\"(\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\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xcb\x05\n\x0e\x44\x65lpayPayments\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\n\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\x0b\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xb2\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_description\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xb1\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_description\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\xd3\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x1a\n\rdelayed_to_us\x18\x06 \x01(\rH\x03\x88\x01\x01\x12\x1c\n\x0fhtlc_resolution\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x05\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\x12\n\x05\x66loor\x18\n \x01(\rH\x06\x88\x01\x01\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x07\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\x10\n\x0e_delayed_to_usB\x12\n\x10_htlc_resolutionB\n\n\x08_penaltyB\x08\n\x06_floorB\x1a\n\x18_unilateral_anchor_close\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\xd3\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x1a\n\rdelayed_to_us\x18\x06 \x01(\rH\x03\x88\x01\x01\x12\x1c\n\x0fhtlc_resolution\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x05\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\x12\n\x05\x66loor\x18\n \x01(\rH\x06\x88\x01\x01\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x07\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\x10\n\x0e_delayed_to_usB\x12\n\x10_htlc_resolutionB\n\n\x08_penaltyB\x08\n\x06_floorB\x1a\n\x18_unilateral_anchor_close\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\xfb\x03\n\x12\x46undchannelRequest\x12 \n\x06\x61mount\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12!\n\x07reserve\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xe4\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x36\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeH\x02\x88\x01\x01\x42\x0b\n\t_close_toB\x0b\n\t_mindepthB\x0f\n\r_channel_type\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xd6\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1b\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12!\n\x07reserve\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xec\x01\n\x0fGetrouteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\nriskfactor\x18\x03 \x01(\x04\x12\x11\n\x04\x63ltv\x18\x04 \x01(\rH\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\x12 \n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\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\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"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\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\xb4\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\t\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\n\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xae\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_description\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\xff\x02\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x06\x61mount\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12%\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12!\n\x07reserve\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xc8\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12\x45\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xca\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\x92\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\x9e\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1b\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x12\n\x10_funding_feerate\"\x83\x02\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12:\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelTypeH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0f\n\r_channel_typeB\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9f\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1b\n\x06\x61mount\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\x83\x02\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12:\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelTypeH\x00\x88\x01\x01\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0f\n\r_channel_typeB\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\xab\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12<\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelTypeH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"<\n\x14RenepaystatusRequest\x12\x16\n\tinvstring\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_invstring\"G\n\x15RenepaystatusResponse\x12.\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatus\"\xe2\x03\n\x16RenepaystatusPaystatus\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x1d\n\x10payment_preimage\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\x0f\n\x07groupid\x18\x05 \x01(\r\x12\x12\n\x05parts\x18\x06 \x01(\rH\x01\x88\x01\x01\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12H\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatus\x12\x18\n\x0b\x64\x65stination\x18\n \x01(\x0cH\x03\x88\x01\x01\x12\r\n\x05notes\x18\x0b \x03(\t\"E\n\x1cRenepaystatusPaystatusStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xda\x02\n\x0eRenepayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x12\n\x05label\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07\x65xclude\x18\t \x03(\tB\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xa5\x03\n\x0fRenepayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\ncreated_at\x18\x03 \x01(\x01\x12\r\n\x05parts\x18\x04 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12\x32\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatus\x12\x18\n\x0b\x64\x65stination\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x03\x88\x01\x01\"6\n\rRenepayStatus\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\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xcf\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x02\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_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\"\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*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\n \x01(\x08H\x03\x88\x01\x01\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_highB\x14\n\x12_ignore_fee_limits\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xa5\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x02\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x04\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x05\x88\x01\x01\x42\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"\x95\x01\n\x15UpgradewalletResponse\x12\x1a\n\rupgraded_outs\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_upgraded_outsB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"\xf0\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12&\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsH\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xfc\x04\n\x0bWaitDetails\x12\x37\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x14\n\x07groupid\x18\x07 \x01(\x04H\x06\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x08 \x01(\x0cH\x07\x88\x01\x01\x12\x17\n\nin_channel\x18\t \x01(\tH\x08\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\t\x88\x01\x01\x12!\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x0c \x01(\tH\x0b\x88\x01\x01\"\x89\x01\n\x11WaitDetailsStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x0b\n\x07PENDING\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\x0c\n\x08\x43OMPLETE\x10\x05\x12\x0b\n\x07OFFERED\x10\x06\x12\x0b\n\x07SETTLED\x10\x07\x12\x10\n\x0cLOCAL_FAILED\x10\x08\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\xe9.\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12O\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingH\x15\x88\x01\x01\x12Z\n\x1b\x65xperimental_onion_messages\x18\x17 \x01(\x0b\x32\x30.cln.ListconfigsConfigsExperimentalonionmessagesH\x16\x88\x01\x01\x12K\n\x13\x65xperimental_offers\x18\x18 \x01(\x0b\x32).cln.ListconfigsConfigsExperimentaloffersH\x17\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x18\x88\x01\x01\x12V\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageH\x19\x88\x01\x01\x12M\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsH\x1a\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x1b\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1c\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1d\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1e\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1f\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH \x88\x01\x01\x12J\n\x13max_locktime_blocks\x18\" \x01(\x0b\x32(.cln.ListconfigsConfigsMaxlocktimeblocksH!\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH\"\x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH#\x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH$\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH%\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH&\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH\'\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH(\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH)\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH*\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH+\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH,\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH-\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH.\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH/\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH0\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH1\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH2\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH3\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH4\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH5\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH6\x88\x01\x01\x12?\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmH7\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH8\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH9\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH:\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH;\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH<\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH=\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH>\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH?\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH@\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsHA\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsHB\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeHC\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHD\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHE\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB\x1e\n\x1c_experimental_onion_messagesB\x16\n\x14_experimental_offersB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x16\n\x14_max_locktime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peers\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n&ListconfigsConfigsExperimentalsplicing\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n+ListconfigsConfigsExperimentalonionmessages\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n$ListconfigsConfigsExperimentaloffers\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n%ListconfigsConfigsExperimentalanchors\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n#ListconfigsConfigsMaxlocktimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x1eListconfigsConfigsEncryptedhsm\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"\r\n\x0bStopRequest\"q\n\x0cStopResponse\x12\x31\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResultH\x00\x88\x01\x01\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\x42\t\n\x07_result\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xa1\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"B\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\"\x1a\n\x18\x41skreneunreserveResponse\"\x92\x01\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14short_channel_id_dir\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05layer\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\x17\n\x15_short_channel_id_dirB\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xbe\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x17\n\npersistent\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiasesB\r\n\x0b_persistent\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xf8\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x03\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x17\n\x15_short_channel_id_dirB\x0c\n\n_timestamp\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xb0\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"\x90\x01\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14short_channel_id_dir\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05layer\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\x17\n\x15_short_channel_id_dirB\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xfb\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\nfinal_cltv\x18\x07 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x02\x88\x01\x01\x42\r\n\x0b_final_cltvB\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x9c\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x17\n\nfinal_cltv\x18\x04 \x01(\rH\x00\x88\x01\x01\x42\r\n\x0b_final_cltv\"\x98\x01\n\x13GetroutesRoutesPath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cnext_node_id\x18\x04 \x01(\x0c\x12\r\n\x05\x64\x65lay\x18\x05 \x01(\r\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x17\n\x15_short_channel_id_dir\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\xcd\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x00\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12P\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInformH\x02\x88\x01\x01\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x42\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_amount_msatB\t\n\x07_inform\"Y\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xcb\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msat\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbf\x02\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_note\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message2\xe4T\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12<\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\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x62\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nnode.proto\x12\x03\x63ln\x1a\x10primitives.proto\"\x10\n\x0eGetinfoRequest\"\xc0\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\x32\n\x0cour_features\x18\n \x01(\x0b\x32\x17.cln.GetinfoOurFeaturesH\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\"R\n\x12GetinfoOurFeatures\x12\x0c\n\x04init\x18\x01 \x01(\x0c\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\x0c\x12\x0f\n\x07invoice\x18\x04 \x01(\x0c\"\xc4\x01\n\x0eGetinfoAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoAddress.GetinfoAddressType\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\"G\n\x12GetinfoAddressType\x12\x07\n\x03\x44NS\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\n\n\x08_address\"\xac\x02\n\x0eGetinfoBinding\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.GetinfoBinding.GetinfoBindingType\x12\x14\n\x07\x61\x64\x64ress\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06socket\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07subtype\x18\x05 \x01(\tH\x03\x88\x01\x01\"_\n\x12GetinfoBindingType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\n\n\x08_addressB\x07\n\x05_portB\t\n\x07_socketB\n\n\x08_subtype\"\xb5\x01\n\x10ListpeersRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x38\n\x05level\x18\x02 \x01(\x0e\x32$.cln.ListpeersRequest.ListpeersLevelH\x01\x88\x01\x01\"E\n\x0eListpeersLevel\x12\x06\n\x02IO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x0b\n\x07UNUSUAL\x10\x03\x12\t\n\x05TRACE\x10\x04\x42\x05\n\x03_idB\x08\n\x06_level\"7\n\x11ListpeersResponse\x12\"\n\x05peers\x18\x01 \x03(\x0b\x32\x13.cln.ListpeersPeers\"\xdf\x01\n\x0eListpeersPeers\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x11\n\tconnected\x18\x02 \x01(\x08\x12#\n\x03log\x18\x03 \x03(\x0b\x32\x16.cln.ListpeersPeersLog\x12\x0f\n\x07netaddr\x18\x05 \x03(\t\x12\x15\n\x08\x66\x65\x61tures\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0bremote_addr\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cnum_channels\x18\x08 \x01(\rH\x02\x88\x01\x01\x42\x0b\n\t_featuresB\x0e\n\x0c_remote_addrB\x0f\n\r_num_channels\"\x88\x03\n\x11ListpeersPeersLog\x12?\n\titem_type\x18\x01 \x01(\x0e\x32,.cln.ListpeersPeersLog.ListpeersPeersLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"t\n\x15ListpeersPeersLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"0\n\x10ListfundsRequest\x12\x12\n\x05spent\x18\x01 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_spent\"e\n\x11ListfundsResponse\x12&\n\x07outputs\x18\x01 \x03(\x0b\x32\x15.cln.ListfundsOutputs\x12(\n\x08\x63hannels\x18\x02 \x03(\x0b\x32\x16.cln.ListfundsChannels\"\xb9\x03\n\x10ListfundsOutputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06output\x18\x02 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cscriptpubkey\x18\x04 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0credeemscript\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12<\n\x06status\x18\x07 \x01(\x0e\x32,.cln.ListfundsOutputs.ListfundsOutputsStatus\x12\x18\n\x0b\x62lockheight\x18\x08 \x01(\rH\x02\x88\x01\x01\x12\x10\n\x08reserved\x18\t \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\n \x01(\rH\x03\x88\x01\x01\"Q\n\x16ListfundsOutputsStatus\x12\x0f\n\x0bUNCONFIRMED\x10\x00\x12\r\n\tCONFIRMED\x10\x01\x12\t\n\x05SPENT\x10\x02\x12\x0c\n\x08IMMATURE\x10\x03\x42\n\n\x08_addressB\x0f\n\r_redeemscriptB\x0e\n\x0c_blockheightB\x14\n\x12_reserved_to_block\"\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\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x01\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"\xbb\x03\n\x0eSendpayRequest\x12 \n\x05route\x18\x01 \x03(\x0b\x32\x11.cln.SendpayRoute\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\x05label\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0epayment_secret\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x13\n\x06partid\x18\x07 \x01(\x04H\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\t \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x12\x1d\n\x10payment_metadata\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_bolt11B\x11\n\x0f_payment_secretB\t\n\x07_partidB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x13\n\x11_payment_metadataB\x0e\n\x0c_description\"\xad\x05\n\x0fSendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x32\n\x06status\x18\x04 \x01(\x0e\x32\".cln.SendpayResponse.SendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x14\n\x07message\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\x0b\x88\x01\x01\"*\n\rSendpayStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\x0f\n\r_completed_atB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\\\n\x0cSendpayRoute\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\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x93\x01\n\x13ListchannelsRequest\x12\x1d\n\x10short_channel_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06source\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\t\n\x07_sourceB\x0e\n\x0c_destination\"C\n\x14ListchannelsResponse\x12+\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x19.cln.ListchannelsChannels\"\xb3\x03\n\x14ListchannelsChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\x0e\n\x06public\x18\x04 \x01(\x08\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\rmessage_flags\x18\x06 \x01(\r\x12\x15\n\rchannel_flags\x18\x07 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x08 \x01(\x08\x12\x13\n\x0blast_update\x18\t \x01(\r\x12\x1d\n\x15\x62\x61se_fee_millisatoshi\x18\n \x01(\r\x12\x19\n\x11\x66\x65\x65_per_millionth\x18\x0b \x01(\r\x12\r\n\x05\x64\x65lay\x18\x0c \x01(\r\x12&\n\x11htlc_minimum_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x11htlc_maximum_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x10\n\x08\x66\x65\x61tures\x18\x0f \x01(\x0c\x12\x11\n\tdirection\x18\x10 \x01(\rB\x14\n\x12_htlc_maximum_msat\"#\n\x10\x41\x64\x64gossipRequest\x12\x0f\n\x07message\x18\x01 \x01(\x0c\"\x13\n\x11\x41\x64\x64gossipResponse\"\xac\x01\n\x14\x41\x64\x64psbtoutputRequest\x12\x1c\n\x07satoshi\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x15\n\x08locktime\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\x0b\n\t_locktimeB\x0e\n\x0c_initialpsbtB\x0e\n\x0c_destination\"U\n\x15\x41\x64\x64psbtoutputResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1e\n\x16\x65stimated_added_weight\x18\x02 \x01(\r\x12\x0e\n\x06outnum\x18\x03 \x01(\r\"O\n\x14\x41utocleanonceRequest\x12*\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystem\x12\x0b\n\x03\x61ge\x18\x02 \x01(\x04\"G\n\x15\x41utocleanonceResponse\x12.\n\tautoclean\x18\x01 \x01(\x0b\x32\x1b.cln.AutocleanonceAutoclean\"\x89\x05\n\x16\x41utocleanonceAutoclean\x12L\n\x11succeededforwards\x18\x01 \x01(\x0b\x32,.cln.AutocleanonceAutocleanSucceededforwardsH\x00\x88\x01\x01\x12\x46\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32).cln.AutocleanonceAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x44\n\rsucceededpays\x18\x03 \x01(\x0b\x32(.cln.AutocleanonceAutocleanSucceededpaysH\x02\x88\x01\x01\x12>\n\nfailedpays\x18\x04 \x01(\x0b\x32%.cln.AutocleanonceAutocleanFailedpaysH\x03\x88\x01\x01\x12\x42\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32\'.cln.AutocleanonceAutocleanPaidinvoicesH\x04\x88\x01\x01\x12H\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32*.cln.AutocleanonceAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x44\n\rnetworkevents\x18\x07 \x01(\x0b\x32(.cln.AutocleanonceAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"M\n\'AutocleanonceAutocleanSucceededforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"J\n$AutocleanonceAutocleanFailedforwards\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanSucceededpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"F\n AutocleanonceAutocleanFailedpays\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"H\n\"AutocleanonceAutocleanPaidinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"K\n%AutocleanonceAutocleanExpiredinvoices\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"I\n#AutocleanonceAutocleanNetworkevents\x12\x0f\n\x07\x63leaned\x18\x01 \x01(\x04\x12\x11\n\tuncleaned\x18\x02 \x01(\x04\"W\n\x16\x41utocleanstatusRequest\x12/\n\tsubsystem\x18\x01 \x01(\x0e\x32\x17.cln.AutocleanSubsystemH\x00\x88\x01\x01\x42\x0c\n\n_subsystem\"K\n\x17\x41utocleanstatusResponse\x12\x30\n\tautoclean\x18\x01 \x01(\x0b\x32\x1d.cln.AutocleanstatusAutoclean\"\x99\x05\n\x18\x41utocleanstatusAutoclean\x12N\n\x11succeededforwards\x18\x01 \x01(\x0b\x32..cln.AutocleanstatusAutocleanSucceededforwardsH\x00\x88\x01\x01\x12H\n\x0e\x66\x61iledforwards\x18\x02 \x01(\x0b\x32+.cln.AutocleanstatusAutocleanFailedforwardsH\x01\x88\x01\x01\x12\x46\n\rsucceededpays\x18\x03 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanSucceededpaysH\x02\x88\x01\x01\x12@\n\nfailedpays\x18\x04 \x01(\x0b\x32\'.cln.AutocleanstatusAutocleanFailedpaysH\x03\x88\x01\x01\x12\x44\n\x0cpaidinvoices\x18\x05 \x01(\x0b\x32).cln.AutocleanstatusAutocleanPaidinvoicesH\x04\x88\x01\x01\x12J\n\x0f\x65xpiredinvoices\x18\x06 \x01(\x0b\x32,.cln.AutocleanstatusAutocleanExpiredinvoicesH\x05\x88\x01\x01\x12\x46\n\rnetworkevents\x18\x07 \x01(\x0b\x32*.cln.AutocleanstatusAutocleanNetworkeventsH\x06\x88\x01\x01\x42\x14\n\x12_succeededforwardsB\x11\n\x0f_failedforwardsB\x10\n\x0e_succeededpaysB\r\n\x0b_failedpaysB\x0f\n\r_paidinvoicesB\x12\n\x10_expiredinvoicesB\x10\n\x0e_networkevents\"g\n)AutocleanstatusAutocleanSucceededforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"d\n&AutocleanstatusAutocleanFailedforwards\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanSucceededpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"`\n\"AutocleanstatusAutocleanFailedpays\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"b\n$AutocleanstatusAutocleanPaidinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"e\n\'AutocleanstatusAutocleanExpiredinvoices\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"c\n%AutocleanstatusAutocleanNetworkevents\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x63leaned\x18\x02 \x01(\x04\x12\x10\n\x03\x61ge\x18\x03 \x01(\x04H\x00\x88\x01\x01\x42\x06\n\x04_age\"U\n\x13\x43heckmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\r\n\x05zbase\x18\x02 \x01(\t\x12\x13\n\x06pubkey\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x42\t\n\x07_pubkey\"8\n\x14\x43heckmessageResponse\x12\x10\n\x08verified\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\"\xcb\x02\n\x0c\x43loseRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x11unilateraltimeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\tH\x01\x88\x01\x01\x12!\n\x14\x66\x65\x65_negotiation_step\x18\x04 \x01(\tH\x02\x88\x01\x01\x12)\n\rwrong_funding\x18\x05 \x01(\x0b\x32\r.cln.OutpointH\x03\x88\x01\x01\x12\x1f\n\x12\x66orce_lease_closed\x18\x06 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x08\x66\x65\x65range\x18\x07 \x03(\x0b\x32\x0c.cln.FeerateB\x14\n\x12_unilateraltimeoutB\x0e\n\x0c_destinationB\x17\n\x15_fee_negotiation_stepB\x10\n\x0e_wrong_fundingB\x15\n\x13_force_lease_closed\"\x93\x01\n\rCloseResponse\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.CloseResponse.CloseType\x12\x0b\n\x03txs\x18\x04 \x03(\x0c\x12\r\n\x05txids\x18\x05 \x03(\x0c\"5\n\tCloseType\x12\n\n\x06MUTUAL\x10\x00\x12\x0e\n\nUNILATERAL\x10\x01\x12\x0c\n\x08UNOPENED\x10\x02\"T\n\x0e\x43onnectRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\x04host\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04port\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x07\n\x05_hostB\x07\n\x05_port\"\xb4\x01\n\x0f\x43onnectResponse\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x08\x66\x65\x61tures\x18\x02 \x01(\x0c\x12\x38\n\tdirection\x18\x03 \x01(\x0e\x32%.cln.ConnectResponse.ConnectDirection\x12$\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32\x13.cln.ConnectAddress\"#\n\x10\x43onnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\xfb\x01\n\x0e\x43onnectAddress\x12\x39\n\titem_type\x18\x01 \x01(\x0e\x32&.cln.ConnectAddress.ConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"P\n\x12\x43onnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"J\n\x14\x43reateinvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x10\n\x08preimage\x18\x03 \x01(\x0c\"\xfd\x05\n\x15\x43reateinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12>\n\x06status\x18\x06 \x01(\x0e\x32..cln.CreateinvoiceResponse.CreateinvoiceStatus\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x16\n\tpay_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x06\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\x08\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\x12:\n\rpaid_outpoint\x18\x11 \x01(\x0b\x32\x1e.cln.CreateinvoicePaidOutpointH\n\x88\x01\x01\"8\n\x13\x43reateinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_created_indexB\x10\n\x0e_paid_outpoint\"9\n\x19\x43reateinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xb4\x02\n\x10\x44\x61tastoreRequest\x12\x10\n\x03hex\x18\x02 \x01(\x0cH\x00\x88\x01\x01\x12\x36\n\x04mode\x18\x03 \x01(\x0e\x32#.cln.DatastoreRequest.DatastoreModeH\x01\x88\x01\x01\x12\x17\n\ngeneration\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\t\x12\x13\n\x06string\x18\x06 \x01(\tH\x03\x88\x01\x01\"p\n\rDatastoreMode\x12\x0f\n\x0bMUST_CREATE\x10\x00\x12\x10\n\x0cMUST_REPLACE\x10\x01\x12\x15\n\x11\x43REATE_OR_REPLACE\x10\x02\x12\x0f\n\x0bMUST_APPEND\x10\x03\x12\x14\n\x10\x43REATE_OR_APPEND\x10\x04\x42\x06\n\x04_hexB\x07\n\x05_modeB\r\n\x0b_generationB\t\n\x07_string\"\x82\x01\n\x11\x44\x61tastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"$\n\x15\x44\x61tastoreusageRequest\x12\x0b\n\x03key\x18\x01 \x03(\t\"S\n\x16\x44\x61tastoreusageResponse\x12\x39\n\x0e\x64\x61tastoreusage\x18\x01 \x01(\x0b\x32!.cln.DatastoreusageDatastoreusage\"@\n\x1c\x44\x61tastoreusageDatastoreusage\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x13\n\x0btotal_bytes\x18\x02 \x01(\x04\"\x9d\x01\n\x12\x43reateonionRequest\x12\"\n\x04hops\x18\x01 \x03(\x0b\x32\x14.cln.CreateonionHops\x12\x11\n\tassocdata\x18\x02 \x01(\x0c\x12\x18\n\x0bsession_key\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x17\n\nonion_size\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_session_keyB\r\n\x0b_onion_size\"<\n\x13\x43reateonionResponse\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x16\n\x0eshared_secrets\x18\x02 \x03(\x0c\"2\n\x0f\x43reateonionHops\x12\x0e\n\x06pubkey\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x13\x44\x65ldatastoreRequest\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x0b\n\x03key\x18\x03 \x03(\tB\r\n\x0b_generation\"\x85\x01\n\x14\x44\x65ldatastoreResponse\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03key\x18\x05 \x03(\tB\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xb6\x01\n\x11\x44\x65linvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\x12\x37\n\x06status\x18\x02 \x01(\x0e\x32\'.cln.DelinvoiceRequest.DelinvoiceStatus\x12\x15\n\x08\x64\x65sconly\x18\x03 \x01(\x08H\x00\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\x0b\n\t_desconly\"\xe6\x05\n\x12\x44\x65linvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x06\x62olt11\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x03 \x01(\tH\x01\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x38\n\x06status\x18\x07 \x01(\x0e\x32(.cln.DelinvoiceResponse.DelinvoiceStatus\x12\x12\n\nexpires_at\x18\x08 \x01(\x04\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x16\n\tpay_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\t\x88\x01\x01\x12\x14\n\x07paid_at\x18\x10 \x01(\x04H\n\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x11 \x01(\x0cH\x0b\x88\x01\x01\"5\n\x10\x44\x65linvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\n\n\x06UNPAID\x10\x02\x42\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x11\n\x0f_local_offer_idB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_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\"\x9f\x01\n\x17\x44\x65vforgetchannelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\x05\x66orce\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\x13\n\x11_short_channel_idB\r\n\x0b_channel_idB\x08\n\x06_force\"Y\n\x18\x44\x65vforgetchannelResponse\x12\x0e\n\x06\x66orced\x18\x01 \x01(\x08\x12\x17\n\x0f\x66unding_unspent\x18\x02 \x01(\x08\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\"\x19\n\x17\x45mergencyrecoverRequest\")\n\x18\x45mergencyrecoverResponse\x12\r\n\x05stubs\x18\x01 \x03(\x0c\" \n\x1eGetemergencyrecoverdataRequest\"3\n\x1fGetemergencyrecoverdataResponse\x12\x10\n\x08\x66iledata\x18\x01 \x01(\x0c\"Q\n\x13\x45xposesecretRequest\x12\x12\n\npassphrase\x18\x01 \x01(\t\x12\x17\n\nidentifier\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\r\n\x0b_identifier\"_\n\x14\x45xposesecretResponse\x12\x12\n\nidentifier\x18\x01 \x01(\t\x12\x0f\n\x07\x63odex32\x18\x02 \x01(\t\x12\x15\n\x08mnemonic\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x0b\n\t_mnemonic\"#\n\x0eRecoverRequest\x12\x11\n\thsmsecret\x18\x01 \x01(\t\"\x88\x01\n\x0fRecoverResponse\x12\x37\n\x06result\x18\x01 \x01(\x0e\x32\".cln.RecoverResponse.RecoverResultH\x00\x88\x01\x01\"1\n\rRecoverResult\x12 \n\x1cRECOVERY_RESTART_IN_PROGRESS\x10\x00\x42\t\n\x07_result\"$\n\x15RecoverchannelRequest\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"\'\n\x16RecoverchannelResponse\x12\r\n\x05stubs\x18\x01 \x03(\t\"\x99\x02\n\x0eInvoiceRequest\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x11\n\tfallbacks\x18\x04 \x03(\t\x12\x15\n\x08preimage\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x11\n\x04\x63ltv\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x65xpiry\x18\x07 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x15\x65xposeprivatechannels\x18\x08 \x03(\t\x12\x19\n\x0c\x64\x65schashonly\x18\t \x01(\x08H\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x10.cln.AmountOrAnyB\x0b\n\t_preimageB\x07\n\x05_cltvB\t\n\x07_expiryB\x0f\n\r_deschashonly\"\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\x1d\n\x10warning_capacity\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x0fwarning_offline\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x10warning_deadends\x18\x07 \x01(\tH\x02\x88\x01\x01\x12#\n\x16warning_private_unused\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0bwarning_mpp\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rcreated_index\x18\n \x01(\x04H\x05\x88\x01\x01\x42\x13\n\x11_warning_capacityB\x12\n\x10_warning_offlineB\x13\n\x11_warning_deadendsB\x19\n\x17_warning_private_unusedB\x0e\n\x0c_warning_mppB\x10\n\x0e_created_index\"\xe1\x01\n\x15InvoicerequestRequest\x12\x1b\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x05 \x01(\x04H\x02\x88\x01\x01\x12\x17\n\nsingle_use\x18\x06 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_issuerB\x08\n\x06_labelB\x12\n\x10_absolute_expiryB\r\n\x0b_single_use\"\x8b\x01\n\x16InvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"1\n\x1c\x44isableinvoicerequestRequest\x12\x11\n\tinvreq_id\x18\x01 \x01(\t\"\x92\x01\n\x1d\x44isableinvoicerequestResponse\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"l\n\x1aListinvoicerequestsRequest\x12\x16\n\tinvreq_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0c\n\n_invreq_idB\x0e\n\x0c_active_only\"_\n\x1bListinvoicerequestsResponse\x12@\n\x0finvoicerequests\x18\x01 \x03(\x0b\x32\'.cln.ListinvoicerequestsInvoicerequests\"\x97\x01\n\"ListinvoicerequestsInvoicerequests\x12\x11\n\tinvreq_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"#\n\x14ListdatastoreRequest\x12\x0b\n\x03key\x18\x02 \x03(\t\"G\n\x15ListdatastoreResponse\x12.\n\tdatastore\x18\x01 \x03(\x0b\x32\x1b.cln.ListdatastoreDatastore\"\x87\x01\n\x16ListdatastoreDatastore\x12\x0b\n\x03key\x18\x01 \x03(\t\x12\x17\n\ngeneration\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03hex\x18\x03 \x01(\x0cH\x01\x88\x01\x01\x12\x13\n\x06string\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_generationB\x06\n\x04_hexB\t\n\x07_string\"\xde\x02\n\x13ListinvoicesRequest\x12\x12\n\x05label\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08offer_id\x18\x04 \x01(\tH\x03\x88\x01\x01\x12>\n\x05index\x18\x05 \x01(\x0e\x32*.cln.ListinvoicesRequest.ListinvoicesIndexH\x04\x88\x01\x01\x12\x12\n\x05start\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x12\n\x05limit\x18\x07 \x01(\rH\x06\x88\x01\x01\"-\n\x11ListinvoicesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x0f\n\r_payment_hashB\x0b\n\t_offer_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListinvoicesResponse\x12+\n\x08invoices\x18\x01 \x03(\x0b\x32\x19.cln.ListinvoicesInvoices\"\xd3\x06\n\x14ListinvoicesInvoices\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListinvoicesInvoices.ListinvoicesInvoicesStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0elocal_offer_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x16\n\tpay_index\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x14\n\x07paid_at\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0e \x01(\x0cH\x08\x88\x01\x01\x12\x1e\n\x11invreq_payer_note\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\x0b\x88\x01\x01\x12\x41\n\rpaid_outpoint\x18\x12 \x01(\x0b\x32%.cln.ListinvoicesInvoicesPaidOutpointH\x0c\x88\x01\x01\"?\n\x1aListinvoicesInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x11\n\x0f_local_offer_idB\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x14\n\x12_invreq_payer_noteB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"@\n ListinvoicesInvoicesPaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\xf6\x03\n\x10SendonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12)\n\tfirst_hop\x18\x02 \x01(\x0b\x32\x16.cln.SendonionFirstHop\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x12\n\x05label\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\x0eshared_secrets\x18\x05 \x03(\x0c\x12\x13\n\x06partid\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\t \x01(\x0cH\x03\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x04\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12+\n\x11total_amount_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x42\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\x0e\n\x0c_destinationB\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0e\n\x0c_descriptionB\x14\n\x12_total_amount_msat\"\xe7\x04\n\x11SendonionResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x36\n\x06status\x18\x03 \x01(\x0e\x32&.cln.SendonionResponse.SendonionStatus\x12%\n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x06 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\x08 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0b \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x07message\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x13\n\x06partid\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0e \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0f \x01(\x04H\t\x88\x01\x01\",\n\x0fSendonionStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\n\n\x08_messageB\t\n\x07_partidB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"P\n\x11SendonionFirstHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\r\n\x05\x64\x65lay\x18\x03 \x01(\r\"\xa0\x03\n\x13ListsendpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12@\n\x06status\x18\x03 \x01(\x0e\x32+.cln.ListsendpaysRequest.ListsendpaysStatusH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListsendpaysRequest.ListsendpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\";\n\x12ListsendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"-\n\x11ListsendpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListsendpaysResponse\x12+\n\x08payments\x18\x01 \x03(\x0b\x32\x19.cln.ListsendpaysPayments\"\xfc\x05\n\x14ListsendpaysPayments\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0f\n\x07groupid\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x44\n\x06status\x18\x04 \x01(\x0e\x32\x34.cln.ListsendpaysPayments.ListsendpaysPaymentsStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\n \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0b \x01(\tH\x04\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\r \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0e \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06partid\x18\x0f \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x10 \x01(\x04H\t\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x11 \x01(\x04H\n\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x12 \x01(\x04H\x0b\x88\x01\x01\"C\n\x1aListsendpaysPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\t\n\x07_partidB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x0f\n\r_completed_at\"\x19\n\x17ListtransactionsRequest\"S\n\x18ListtransactionsResponse\x12\x37\n\x0ctransactions\x18\x01 \x03(\x0b\x32!.cln.ListtransactionsTransactions\"\xf8\x01\n\x1cListtransactionsTransactions\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\r\n\x05rawtx\x18\x02 \x01(\x0c\x12\x13\n\x0b\x62lockheight\x18\x03 \x01(\r\x12\x0f\n\x07txindex\x18\x04 \x01(\r\x12\x10\n\x08locktime\x18\x07 \x01(\r\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x37\n\x06inputs\x18\t \x03(\x0b\x32\'.cln.ListtransactionsTransactionsInputs\x12\x39\n\x07outputs\x18\n \x03(\x0b\x32(.cln.ListtransactionsTransactionsOutputs\"S\n\"ListtransactionsTransactionsInputs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\r\n\x05index\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\"l\n#ListtransactionsTransactionsOutputs\x12\r\n\x05index\x18\x01 \x01(\r\x12\x14\n\x0cscriptPubKey\x18\x03 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\"M\n\x11MakesecretRequest\x12\x10\n\x03hex\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06string\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_hexB\t\n\x07_string\"$\n\x12MakesecretResponse\x12\x0e\n\x06secret\x18\x01 \x01(\x0c\"\x93\x04\n\nPayRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\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\x17\n\nriskfactor\x18\x08 \x01(\x01H\x05\x88\x01\x01\x12\x0f\n\x07\x65xclude\x18\n \x03(\t\x12 \n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0c \x01(\tH\x07\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\x0e \x01(\x0cH\t\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_riskfactorB\t\n\x07_maxfeeB\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\x10\n\x0e_localinvreqidB\x0f\n\r_partial_msat\"\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\"\xb8\x02\n\x0eListnodesNodes\x12\x0e\n\x06nodeid\x18\x01 \x01(\x0c\x12\x1b\n\x0elast_timestamp\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x12\n\x05\x61lias\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05\x63olor\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18\x05 \x01(\x0cH\x03\x88\x01\x01\x12/\n\taddresses\x18\x06 \x03(\x0b\x32\x1c.cln.ListnodesNodesAddresses\x12@\n\x10option_will_fund\x18\x07 \x01(\x0b\x32!.cln.ListnodesNodesOptionWillFundH\x04\x88\x01\x01\x42\x11\n\x0f_last_timestampB\x08\n\x06_aliasB\x08\n\x06_colorB\x0b\n\t_featuresB\x13\n\x11_option_will_fund\"\xf2\x01\n\x1cListnodesNodesOptionWillFund\x12(\n\x13lease_fee_base_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\x0flease_fee_basis\x18\x02 \x01(\r\x12\x16\n\x0e\x66unding_weight\x18\x03 \x01(\r\x12.\n\x19\x63hannel_fee_max_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x30\n(channel_fee_max_proportional_thousandths\x18\x05 \x01(\r\x12\x15\n\rcompact_lease\x18\x06 \x01(\x0c\"\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\"\xd3\x05\n\x16WaitanyinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12@\n\x06status\x18\x04 \x01(\x0e\x32\x30.cln.WaitanyinvoiceResponse.WaitanyinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x1a\n\rcreated_index\x18\r \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\t\x88\x01\x01\x12;\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1f.cln.WaitanyinvoicePaidOutpointH\n\x88\x01\x01\"-\n\x14WaitanyinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\":\n\x1aWaitanyinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"#\n\x12WaitinvoiceRequest\x12\r\n\x05label\x18\x01 \x01(\t\"\xc4\x05\n\x13WaitinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitinvoiceResponse.WaitinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\t \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0b \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\x0c \x01(\x0cH\x07\x88\x01\x01\x12\x1a\n\rcreated_index\x18\r \x01(\x04H\x08\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x0e \x01(\x04H\t\x88\x01\x01\x12\x38\n\rpaid_outpoint\x18\x0f \x01(\x0b\x32\x1c.cln.WaitinvoicePaidOutpointH\n\x88\x01\x01\"*\n\x11WaitinvoiceStatus\x12\x08\n\x04PAID\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x42\x0e\n\x0c_descriptionB\x0e\n\x0c_amount_msatB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0c\n\n_pay_indexB\x17\n\x15_amount_received_msatB\n\n\x08_paid_atB\x13\n\x11_payment_preimageB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_paid_outpoint\"7\n\x17WaitinvoicePaidOutpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"\x8e\x01\n\x12WaitsendpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x02\x88\x01\x01\x42\t\n\x07_partidB\n\n\x08_timeoutB\n\n\x08_groupid\"\x8e\x05\n\x13WaitsendpayResponse\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x14\n\x07groupid\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.WaitsendpayResponse.WaitsendpayStatus\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x06 \x01(\x0cH\x02\x88\x01\x01\x12\x12\n\ncreated_at\x18\x07 \x01(\x04\x12%\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12\x12\n\x05label\x18\t \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06partid\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0b \x01(\tH\x05\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x0c \x01(\tH\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\t\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\n\x88\x01\x01\"!\n\x11WaitsendpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x42\n\n\x08_groupidB\x0e\n\x0c_amount_msatB\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_partidB\t\n\x07_bolt11B\t\n\x07_bolt12B\x13\n\x11_payment_preimageB\x0f\n\r_completed_atB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\x97\x01\n\x0eNewaddrRequest\x12@\n\x0b\x61\x64\x64resstype\x18\x01 \x01(\x0e\x32&.cln.NewaddrRequest.NewaddrAddresstypeH\x00\x88\x01\x01\"3\n\x12NewaddrAddresstype\x12\n\n\x06\x42\x45\x43H32\x10\x00\x12\x07\n\x03\x41LL\x10\x02\x12\x08\n\x04P2TR\x10\x03\x42\x0e\n\x0c_addresstype\"M\n\x0fNewaddrResponse\x12\x13\n\x06\x62\x65\x63h32\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb9\x01\n\x0fWithdrawRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12!\n\x07satoshi\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\"\n\x07\x66\x65\x65rate\x18\x05 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x42\n\n\x08_minconfB\n\n\x08_feerate\":\n\x10WithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0c\n\x04psbt\x18\x03 \x01(\t\"\xaf\x03\n\x0eKeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\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\x12 \n\x0b\x61mount_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12 \n\x06maxfee\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x42\x08\n\x06_labelB\x10\n\x0e_maxfeepercentB\x0c\n\n_retry_forB\x0b\n\t_maxdelayB\x0c\n\n_exemptfeeB\r\n\x0b_routehintsB\x0c\n\n_extratlvsB\t\n\x07_maxfee\"\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(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\",\n\x10SendpsbtResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"1\n\x0fSignpsbtRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x10\n\x08signonly\x18\x02 \x03(\r\"\'\n\x10SignpsbtResponse\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\t\"\xa0\x03\n\x0fUtxopsbtRequest\x12!\n\x07satoshi\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x1d\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.Feerate\x12\x13\n\x0bstartweight\x18\x03 \x01(\r\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x14\n\x07reserve\x18\x05 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08locktime\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x1f\n\x12min_witness_weight\x18\x07 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nreservedok\x18\x08 \x01(\x08H\x03\x88\x01\x01\x12\x1d\n\x10\x65xcess_as_change\x18\t \x01(\x08H\x04\x88\x01\x01\x12#\n\x16opening_anchor_channel\x18\n \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_reserveB\x0b\n\t_locktimeB\x15\n\x13_min_witness_weightB\r\n\x0b_reservedokB\x13\n\x11_excess_as_changeB\x19\n\x17_opening_anchor_channel\"\xd9\x01\n\x10UtxopsbtResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\x0e\x66\x65\x65rate_per_kw\x18\x02 \x01(\r\x12\x1e\n\x16\x65stimated_final_weight\x18\x03 \x01(\r\x12 \n\x0b\x65xcess_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1a\n\rchange_outnum\x18\x05 \x01(\rH\x00\x88\x01\x01\x12/\n\x0creservations\x18\x06 \x03(\x0b\x32\x19.cln.UtxopsbtReservationsB\x10\n\x0e_change_outnum\"u\n\x14UtxopsbtReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\" \n\x10TxdiscardRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"6\n\x11TxdiscardResponse\x12\x13\n\x0bunsigned_tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xa4\x01\n\x10TxprepareRequest\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12 \n\x07outputs\x18\x05 \x03(\x0b\x32\x0f.cln.OutputDescB\n\n\x08_feerateB\n\n\x08_minconf\"D\n\x11TxprepareResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x13\n\x0bunsigned_tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x1d\n\rTxsendRequest\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\"8\n\x0eTxsendResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"\x8d\x01\n\x17ListpeerchannelsRequest\x12\x0f\n\x02id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nchannel_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x42\x05\n\x03_idB\x13\n\x11_short_channel_idB\r\n\x0b_channel_id\"K\n\x18ListpeerchannelsResponse\x12/\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1d.cln.ListpeerchannelsChannels\"\xf4\x19\n\x18ListpeerchannelsChannels\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x16\n\x0epeer_connected\x18\x02 \x01(\x08\x12 \n\x05state\x18\x03 \x01(\x0e\x32\x11.cln.ChannelState\x12\x19\n\x0cscratch_txid\x18\x04 \x01(\x0cH\x00\x88\x01\x01\x12:\n\x07\x66\x65\x65rate\x18\x06 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFeerateH\x01\x88\x01\x01\x12\x12\n\x05owner\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x17\n\nchannel_id\x18\t \x01(\x0cH\x04\x88\x01\x01\x12\x19\n\x0c\x66unding_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x1b\n\x0e\x66unding_outnum\x18\x0b \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x0finitial_feerate\x18\x0c \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0clast_feerate\x18\r \x01(\tH\x08\x88\x01\x01\x12\x19\n\x0cnext_feerate\x18\x0e \x01(\tH\t\x88\x01\x01\x12\x1a\n\rnext_fee_step\x18\x0f \x01(\rH\n\x88\x01\x01\x12\x37\n\x08inflight\x18\x10 \x03(\x0b\x32%.cln.ListpeerchannelsChannelsInflight\x12\x15\n\x08\x63lose_to\x18\x11 \x01(\x0cH\x0b\x88\x01\x01\x12\x14\n\x07private\x18\x12 \x01(\x08H\x0c\x88\x01\x01\x12 \n\x06opener\x18\x13 \x01(\x0e\x32\x10.cln.ChannelSide\x12%\n\x06\x63loser\x18\x14 \x01(\x0e\x32\x10.cln.ChannelSideH\r\x88\x01\x01\x12:\n\x07\x66unding\x18\x16 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsFundingH\x0e\x88\x01\x01\x12$\n\nto_us_msat\x18\x17 \x01(\x0b\x32\x0b.cln.AmountH\x0f\x88\x01\x01\x12(\n\x0emin_to_us_msat\x18\x18 \x01(\x0b\x32\x0b.cln.AmountH\x10\x88\x01\x01\x12(\n\x0emax_to_us_msat\x18\x19 \x01(\x0b\x32\x0b.cln.AmountH\x11\x88\x01\x01\x12$\n\ntotal_msat\x18\x1a \x01(\x0b\x32\x0b.cln.AmountH\x12\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x1b \x01(\x0b\x32\x0b.cln.AmountH\x13\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x1c \x01(\rH\x14\x88\x01\x01\x12)\n\x0f\x64ust_limit_msat\x18\x1d \x01(\x0b\x32\x0b.cln.AmountH\x15\x88\x01\x01\x12\x30\n\x16max_total_htlc_in_msat\x18\x1e \x01(\x0b\x32\x0b.cln.AmountH\x16\x88\x01\x01\x12,\n\x12their_reserve_msat\x18\x1f \x01(\x0b\x32\x0b.cln.AmountH\x17\x88\x01\x01\x12*\n\x10our_reserve_msat\x18 \x01(\x0b\x32\x0b.cln.AmountH\x18\x88\x01\x01\x12(\n\x0espendable_msat\x18! \x01(\x0b\x32\x0b.cln.AmountH\x19\x88\x01\x01\x12)\n\x0freceivable_msat\x18\" \x01(\x0b\x32\x0b.cln.AmountH\x1a\x88\x01\x01\x12.\n\x14minimum_htlc_in_msat\x18# \x01(\x0b\x32\x0b.cln.AmountH\x1b\x88\x01\x01\x12/\n\x15minimum_htlc_out_msat\x18$ \x01(\x0b\x32\x0b.cln.AmountH\x1c\x88\x01\x01\x12/\n\x15maximum_htlc_out_msat\x18% \x01(\x0b\x32\x0b.cln.AmountH\x1d\x88\x01\x01\x12 \n\x13their_to_self_delay\x18& \x01(\rH\x1e\x88\x01\x01\x12\x1e\n\x11our_to_self_delay\x18\' \x01(\rH\x1f\x88\x01\x01\x12\x1f\n\x12max_accepted_htlcs\x18( \x01(\rH \x88\x01\x01\x12\x36\n\x05\x61lias\x18) \x01(\x0b\x32\".cln.ListpeerchannelsChannelsAliasH!\x88\x01\x01\x12\x0e\n\x06status\x18+ \x03(\t\x12 \n\x13in_payments_offered\x18, \x01(\x04H\"\x88\x01\x01\x12)\n\x0fin_offered_msat\x18- \x01(\x0b\x32\x0b.cln.AmountH#\x88\x01\x01\x12\"\n\x15in_payments_fulfilled\x18. \x01(\x04H$\x88\x01\x01\x12+\n\x11in_fulfilled_msat\x18/ \x01(\x0b\x32\x0b.cln.AmountH%\x88\x01\x01\x12!\n\x14out_payments_offered\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\x10out_offered_msat\x18\x31 \x01(\x0b\x32\x0b.cln.AmountH\'\x88\x01\x01\x12#\n\x16out_payments_fulfilled\x18\x32 \x01(\x04H(\x88\x01\x01\x12,\n\x12out_fulfilled_msat\x18\x33 \x01(\x0b\x32\x0b.cln.AmountH)\x88\x01\x01\x12\x31\n\x05htlcs\x18\x34 \x03(\x0b\x32\".cln.ListpeerchannelsChannelsHtlcs\x12\x1a\n\rclose_to_addr\x18\x35 \x01(\tH*\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\x36 \x01(\x08H+\x88\x01\x01\x12:\n\x07updates\x18\x37 \x01(\x0b\x32$.cln.ListpeerchannelsChannelsUpdatesH,\x88\x01\x01\x12#\n\x16last_stable_connection\x18\x38 \x01(\x04H-\x88\x01\x01\x12\x17\n\nlost_state\x18\x39 \x01(\x08H.\x88\x01\x01\x12\x1a\n\rreestablished\x18: \x01(\x08H/\x88\x01\x01\x12*\n\x10last_tx_fee_msat\x18; \x01(\x0b\x32\x0b.cln.AmountH0\x88\x01\x01\x12\x16\n\tdirection\x18< \x01(\x12H1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\x42\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_addrB\x14\n\x12_ignore_fee_limitsB\n\n\x08_updatesB\x19\n\x17_last_stable_connectionB\r\n\x0b_lost_stateB\x10\n\x0e_reestablishedB\x13\n\x11_last_tx_fee_msatB\x0c\n\n_directionB&\n$_their_max_htlc_value_in_flight_msatB$\n\"_our_max_htlc_value_in_flight_msat\"\xa7\x01\n\x1fListpeerchannelsChannelsUpdates\x12\x38\n\x05local\x18\x01 \x01(\x0b\x32).cln.ListpeerchannelsChannelsUpdatesLocal\x12?\n\x06remote\x18\x02 \x01(\x0b\x32*.cln.ListpeerchannelsChannelsUpdatesRemoteH\x00\x88\x01\x01\x42\t\n\x07_remote\"\xda\x01\n$ListpeerchannelsChannelsUpdatesLocal\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"\xdb\x01\n%ListpeerchannelsChannelsUpdatesRemote\x12&\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x11\x63ltv_expiry_delta\x18\x03 \x01(\r\x12\"\n\rfee_base_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x05 \x01(\r\"?\n\x1fListpeerchannelsChannelsFeerate\x12\r\n\x05perkw\x18\x01 \x01(\r\x12\r\n\x05perkb\x18\x02 \x01(\r\"\x8b\x02\n ListpeerchannelsChannelsInflight\x12\x14\n\x0c\x66unding_txid\x18\x01 \x01(\x0c\x12\x16\n\x0e\x66unding_outnum\x18\x02 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x03 \x01(\t\x12\'\n\x12total_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10our_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0cscratch_txid\x18\x06 \x01(\x0cH\x00\x88\x01\x01\x12\x1a\n\rsplice_amount\x18\x07 \x01(\x12H\x01\x88\x01\x01\x42\x0f\n\r_scratch_txidB\x10\n\x0e_splice_amount\"\xdd\x02\n\x1fListpeerchannelsChannelsFunding\x12%\n\x0bpushed_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12%\n\x10local_funds_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11remote_funds_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\'\n\rfee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_rcvd_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x11\n\x04psbt\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x15\n\x08withheld\x18\x07 \x01(\x08H\x04\x88\x01\x01\x42\x0e\n\x0c_pushed_msatB\x10\n\x0e_fee_paid_msatB\x10\n\x0e_fee_rcvd_msatB\x07\n\x05_psbtB\x0b\n\t_withheld\"]\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\"\xf9\x02\n\x1dListpeerchannelsChannelsHtlcs\x12\\\n\tdirection\x18\x01 \x01(\x0e\x32I.cln.ListpeerchannelsChannelsHtlcs.ListpeerchannelsChannelsHtlcsDirection\x12\n\n\x02id\x18\x02 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06\x65xpiry\x18\x04 \x01(\r\x12\x14\n\x0cpayment_hash\x18\x05 \x01(\x0c\x12\x1a\n\rlocal_trimmed\x18\x06 \x01(\x08H\x00\x88\x01\x01\x12\x13\n\x06status\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1d\n\x05state\x18\x08 \x01(\x0e\x32\x0e.cln.HtlcState\"9\n&ListpeerchannelsChannelsHtlcsDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\x42\x10\n\x0e_local_trimmedB\t\n\x07_status\"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\"\xd0\n\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\x65\n\x0b\x63lose_cause\x18\x18 \x01(\x0e\x32P.cln.ListclosedchannelsClosedchannels.ListclosedchannelsClosedchannelsCloseCause\x12#\n\x16last_stable_connection\x18\x19 \x01(\x04H\t\x88\x01\x01\x12\x19\n\x0c\x66unding_psbt\x18\x1a \x01(\tH\n\x88\x01\x01\x12\x1d\n\x10\x66unding_withheld\x18\x1b \x01(\x08H\x0b\x88\x01\x01\"u\n*ListclosedchannelsClosedchannelsCloseCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\n\n\x08_peer_idB\x13\n\x11_short_channel_idB\x08\n\x06_aliasB\t\n\x07_closerB\x18\n\x16_funding_fee_paid_msatB\x18\n\x16_funding_fee_rcvd_msatB\x16\n\x14_funding_pushed_msatB\x17\n\x15_last_commitment_txidB\x1b\n\x19_last_commitment_fee_msatB\x19\n\x17_last_stable_connectionB\x0f\n\r_funding_psbtB\x13\n\x11_funding_withheld\"e\n%ListclosedchannelsClosedchannelsAlias\x12\x12\n\x05local\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06remote\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_localB\t\n\x07_remote\"\x1f\n\rDecodeRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"\x8c(\n\x0e\x44\x65\x63odeResponse\x12\x31\n\titem_type\x18\x01 \x01(\x0e\x32\x1e.cln.DecodeResponse.DecodeType\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x15\n\x08offer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x0coffer_chains\x18\x04 \x03(\x0c\x12\x1b\n\x0eoffer_metadata\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0eoffer_currency\x18\x06 \x01(\tH\x02\x88\x01\x01\x12+\n\x1ewarning_unknown_offer_currency\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x63urrency_minor_unit\x18\x08 \x01(\rH\x04\x88\x01\x01\x12\x19\n\x0coffer_amount\x18\t \x01(\x04H\x05\x88\x01\x01\x12+\n\x11offer_amount_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x1e\n\x11offer_description\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0coffer_issuer\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x1b\n\x0eoffer_features\x18\r \x01(\x0cH\t\x88\x01\x01\x12\"\n\x15offer_absolute_expiry\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1f\n\x12offer_quantity_max\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12*\n\x0boffer_paths\x18\x10 \x03(\x0b\x32\x15.cln.DecodeOfferPaths\x12\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\x36\n\x11invoice_fallbacks\x18- \x03(\x0b\x32\x1b.cln.DecodeInvoiceFallbacks\x12\x1d\n\x10invoice_features\x18. \x01(\x0cH$\x88\x01\x01\x12\x1c\n\x0finvoice_node_id\x18/ \x01(\x0cH%\x88\x01\x01\x12(\n\x1binvoice_recurrence_basetime\x18\x30 \x01(\x04H&\x88\x01\x01\x12*\n\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\x12\x16\n\tdecrypted\x18L \x01(\x0cH=\x88\x01\x01\x12\x16\n\tsignature\x18M \x01(\tH>\x88\x01\x01\x12\x15\n\x08\x63urrency\x18N \x01(\tH?\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18O \x01(\x0b\x32\x0b.cln.AmountH@\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18P \x01(\tHA\x88\x01\x01\x12\x15\n\x08\x66\x65\x61tures\x18Q \x01(\x0cHB\x88\x01\x01\x12-\n\x06routes\x18R \x01(\x0b\x32\x18.cln.DecodeRoutehintListHC\x88\x01\x01\x12\x1c\n\x0foffer_issuer_id\x18S \x01(\x0cHD\x88\x01\x01\x12,\n\x1fwarning_missing_offer_issuer_id\x18T \x01(\tHE\x88\x01\x01\x12,\n\x0cinvreq_paths\x18U \x03(\x0b\x32\x16.cln.DecodeInvreqPaths\x12\'\n\x1awarning_empty_blinded_path\x18V \x01(\tHF\x88\x01\x01\x12=\n\x13invreq_bip_353_name\x18W \x01(\x0b\x32\x1b.cln.DecodeInvreqBip353NameHG\x88\x01\x01\x12\x35\n(warning_invreq_bip_353_name_name_invalid\x18X \x01(\tHH\x88\x01\x01\x12\x37\n*warning_invreq_bip_353_name_domain_invalid\x18Y \x01(\tHI\x88\x01\x01\"\x83\x01\n\nDecodeType\x12\x10\n\x0c\x42OLT12_OFFER\x10\x00\x12\x12\n\x0e\x42OLT12_INVOICE\x10\x01\x12\x1a\n\x16\x42OLT12_INVOICE_REQUEST\x10\x02\x12\x12\n\x0e\x42OLT11_INVOICE\x10\x03\x12\x08\n\x04RUNE\x10\x04\x12\x15\n\x11\x45MERGENCY_RECOVER\x10\x05\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_hexB\x0c\n\n_decryptedB\x0c\n\n_signatureB\x0b\n\t_currencyB\x0e\n\x0c_amount_msatB\x0e\n\x0c_descriptionB\x0b\n\t_featuresB\t\n\x07_routesB\x12\n\x10_offer_issuer_idB\"\n _warning_missing_offer_issuer_idB\x1d\n\x1b_warning_empty_blinded_pathB\x16\n\x14_invreq_bip_353_nameB+\n)_warning_invreq_bip_353_name_name_invalidB-\n+_warning_invreq_bip_353_name_domain_invalid\"\xec\x01\n\x10\x44\x65\x63odeOfferPaths\x12\x1a\n\rfirst_node_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08\x62linding\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x1b\n\x0e\x66irst_scid_dir\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x42\x10\n\x0e_first_node_idB\x0b\n\t_blindingB\x11\n\x0f_first_scid_dirB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"\x89\x01\n\x1e\x44\x65\x63odeOfferRecurrencePaywindow\x12\x16\n\x0eseconds_before\x18\x01 \x01(\r\x12\x15\n\rseconds_after\x18\x02 \x01(\r\x12 \n\x13proportional_amount\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x16\n\x14_proportional_amount\"\x97\x02\n\x11\x44\x65\x63odeInvreqPaths\x12\x1b\n\x0e\x66irst_scid_dir\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08\x62linding\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x1a\n\rfirst_node_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\nfirst_scid\x18\x04 \x01(\tH\x03\x88\x01\x01\x12(\n\x04path\x18\x05 \x03(\x0b\x32\x1a.cln.DecodeInvreqPathsPath\x12\x1b\n\x0e\x66irst_path_key\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x42\x11\n\x0f_first_scid_dirB\x0b\n\t_blindingB\x10\n\x0e_first_node_idB\r\n\x0b_first_scidB\x11\n\x0f_first_path_key\"R\n\x15\x44\x65\x63odeInvreqPathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"T\n\x16\x44\x65\x63odeInvreqBip353Name\x12\x11\n\x04name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06\x64omain\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x07\n\x05_nameB\t\n\x07_domain\"S\n\x16\x44\x65\x63odeInvoicePathsPath\x12\x17\n\x0f\x62linded_node_id\x18\x01 \x01(\x0c\x12 \n\x18\x65ncrypted_recipient_data\x18\x02 \x01(\x0c\"X\n\x16\x44\x65\x63odeInvoiceFallbacks\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x0b\n\x03hex\x18\x02 \x01(\x0c\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_address\"\xaa\x02\n\x0f\x44\x65\x63odeFallbacks\x12\x36\n)warning_invoice_fallbacks_version_invalid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12;\n\titem_type\x18\x02 \x01(\x0e\x32(.cln.DecodeFallbacks.DecodeFallbacksType\x12\x11\n\x04\x61\x64\x64r\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0b\n\x03hex\x18\x04 \x01(\x0c\"K\n\x13\x44\x65\x63odeFallbacksType\x12\t\n\x05P2PKH\x10\x00\x12\x08\n\x04P2SH\x10\x01\x12\n\n\x06P2WPKH\x10\x02\x12\t\n\x05P2WSH\x10\x03\x12\x08\n\x04P2TR\x10\x04\x42,\n*_warning_invoice_fallbacks_version_invalidB\x07\n\x05_addr\"(\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\"\xc2\x01\n\rDelpayRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x1f.cln.DelpayRequest.DelpayStatus\x12\x13\n\x06partid\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07groupid\x18\x04 \x01(\x04H\x01\x88\x01\x01\"(\n\x0c\x44\x65lpayStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x42\t\n\x07_partidB\n\n\x08_groupid\"7\n\x0e\x44\x65lpayResponse\x12%\n\x08payments\x18\x01 \x03(\x0b\x32\x13.cln.DelpayPayments\"\xcb\x05\n\x0e\x44\x65lpayPayments\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12\x38\n\x06status\x18\x04 \x01(\x0e\x32(.cln.DelpayPayments.DelpayPaymentsStatus\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65stination\x18\x07 \x01(\x0cH\x02\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x12\n\ncreated_at\x18\t \x01(\x04\x12\x1a\n\rupdated_index\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x14\n\x07groupid\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\x12\x12\n\x05label\x18\x0e \x01(\tH\x08\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x0f \x01(\tH\t\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x10 \x01(\tH\n\x88\x01\x01\x12\x17\n\nerroronion\x18\x11 \x01(\x0cH\x0b\x88\x01\x01\"=\n\x14\x44\x65lpayPaymentsStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x10\n\x0e_created_indexB\t\n\x07_partidB\x0e\n\x0c_destinationB\x0e\n\x0c_amount_msatB\x10\n\x0e_updated_indexB\x0f\n\r_completed_atB\n\n\x08_groupidB\x13\n\x11_payment_preimageB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\r\n\x0b_erroronion\"\xb3\x01\n\x11\x44\x65lforwardRequest\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x12\n\nin_htlc_id\x18\x02 \x01(\x04\x12\x37\n\x06status\x18\x03 \x01(\x0e\x32\'.cln.DelforwardRequest.DelforwardStatus\"=\n\x10\x44\x65lforwardStatus\x12\x0b\n\x07SETTLED\x10\x00\x12\x10\n\x0cLOCAL_FAILED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x14\n\x12\x44\x65lforwardResponse\"\'\n\x13\x44isableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xb2\x01\n\x14\x44isableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_description\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\xb1\x01\n\x13\x45nableofferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_description\"=\n\x11\x44isconnectRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\x05\x66orce\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x08\n\x06_force\"\x14\n\x12\x44isconnectResponse\"k\n\x0f\x46\x65\x65ratesRequest\x12\x31\n\x05style\x18\x01 \x01(\x0e\x32\".cln.FeeratesRequest.FeeratesStyle\"%\n\rFeeratesStyle\x12\t\n\x05PERKB\x10\x00\x12\t\n\x05PERKW\x10\x01\"\x9a\x02\n\x10\x46\x65\x65ratesResponse\x12%\n\x18warning_missing_feerates\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05perkb\x18\x02 \x01(\x0b\x32\x12.cln.FeeratesPerkbH\x01\x88\x01\x01\x12&\n\x05perkw\x18\x03 \x01(\x0b\x32\x12.cln.FeeratesPerkwH\x02\x88\x01\x01\x12\x44\n\x15onchain_fee_estimates\x18\x04 \x01(\x0b\x32 .cln.FeeratesOnchainFeeEstimatesH\x03\x88\x01\x01\x42\x1b\n\x19_warning_missing_feeratesB\x08\n\x06_perkbB\x08\n\x06_perkwB\x18\n\x16_onchain_fee_estimates\"\xd3\x03\n\rFeeratesPerkb\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x1a\n\rdelayed_to_us\x18\x06 \x01(\rH\x03\x88\x01\x01\x12\x1c\n\x0fhtlc_resolution\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x05\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkbEstimates\x12\x12\n\x05\x66loor\x18\n \x01(\rH\x06\x88\x01\x01\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x07\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\x10\n\x0e_delayed_to_usB\x12\n\x10_htlc_resolutionB\n\n\x08_penaltyB\x08\n\x06_floorB\x1a\n\x18_unilateral_anchor_close\"W\n\x16\x46\x65\x65ratesPerkbEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\xd3\x03\n\rFeeratesPerkw\x12\x16\n\x0emin_acceptable\x18\x01 \x01(\r\x12\x16\n\x0emax_acceptable\x18\x02 \x01(\r\x12\x14\n\x07opening\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmutual_close\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1d\n\x10unilateral_close\x18\x05 \x01(\rH\x02\x88\x01\x01\x12\x1a\n\rdelayed_to_us\x18\x06 \x01(\rH\x03\x88\x01\x01\x12\x1c\n\x0fhtlc_resolution\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x14\n\x07penalty\x18\x08 \x01(\rH\x05\x88\x01\x01\x12.\n\testimates\x18\t \x03(\x0b\x32\x1b.cln.FeeratesPerkwEstimates\x12\x12\n\x05\x66loor\x18\n \x01(\rH\x06\x88\x01\x01\x12$\n\x17unilateral_anchor_close\x18\x0b \x01(\rH\x07\x88\x01\x01\x42\n\n\x08_openingB\x0f\n\r_mutual_closeB\x13\n\x11_unilateral_closeB\x10\n\x0e_delayed_to_usB\x12\n\x10_htlc_resolutionB\n\n\x08_penaltyB\x08\n\x06_floorB\x1a\n\x18_unilateral_anchor_close\"W\n\x16\x46\x65\x65ratesPerkwEstimates\x12\x12\n\nblockcount\x18\x01 \x01(\r\x12\x0f\n\x07\x66\x65\x65rate\x18\x02 \x01(\r\x12\x18\n\x10smoothed_feerate\x18\x03 \x01(\r\"\x99\x02\n\x1b\x46\x65\x65ratesOnchainFeeEstimates\x12 \n\x18opening_channel_satoshis\x18\x01 \x01(\x04\x12\x1d\n\x15mutual_close_satoshis\x18\x02 \x01(\x04\x12!\n\x19unilateral_close_satoshis\x18\x03 \x01(\x04\x12\x1d\n\x15htlc_timeout_satoshis\x18\x04 \x01(\x04\x12\x1d\n\x15htlc_success_satoshis\x18\x05 \x01(\x04\x12\x30\n#unilateral_close_nonanchor_satoshis\x18\x06 \x01(\x04H\x00\x88\x01\x01\x42&\n$_unilateral_close_nonanchor_satoshis\"%\n\x12\x46\x65tchbip353Request\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"X\n\x13\x46\x65tchbip353Response\x12\r\n\x05proof\x18\x01 \x01(\t\x12\x32\n\x0cinstructions\x18\x02 \x03(\x0b\x32\x1c.cln.Fetchbip353Instructions\"\xf7\x01\n\x17\x46\x65tchbip353Instructions\x12\x18\n\x0b\x64\x65scription\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05offer\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x14\n\x07onchain\x18\x03 \x01(\tH\x02\x88\x01\x01\x12!\n\x14offchain_amount_msat\x18\x04 \x01(\x04H\x03\x88\x01\x01\x12\x1f\n\x12onchain_amount_sat\x18\x05 \x01(\x04H\x04\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x08\n\x06_offerB\n\n\x08_onchainB\x17\n\x15_offchain_amount_msatB\x15\n\x13_onchain_amount_sat\"\xb9\x03\n\x13\x46\x65tchinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x15\n\x08quantity\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x1f\n\x12recurrence_counter\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x1d\n\x10recurrence_start\x18\x05 \x01(\x01H\x03\x88\x01\x01\x12\x1d\n\x10recurrence_label\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x14\n\x07timeout\x18\x07 \x01(\x01H\x05\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x1b\n\x0epayer_metadata\x18\t \x01(\tH\x07\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\x0b\n\t_quantityB\x15\n\x13_recurrence_counterB\x13\n\x11_recurrence_startB\x13\n\x11_recurrence_labelB\n\n\x08_timeoutB\r\n\x0b_payer_noteB\x11\n\x0f_payer_metadataB\t\n\x07_bip353\"\x99\x01\n\x14\x46\x65tchinvoiceResponse\x12\x0f\n\x07invoice\x18\x01 \x01(\t\x12)\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x18.cln.FetchinvoiceChanges\x12\x35\n\x0bnext_period\x18\x03 \x01(\x0b\x32\x1b.cln.FetchinvoiceNextPeriodH\x00\x88\x01\x01\x42\x0e\n\x0c_next_period\"\x82\x02\n\x13\x46\x65tchinvoiceChanges\x12!\n\x14\x64\x65scription_appended\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0evendor_removed\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06vendor\x18\x04 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x42\x17\n\x15_description_appendedB\x0e\n\x0c_descriptionB\x11\n\x0f_vendor_removedB\t\n\x07_vendorB\x0e\n\x0c_amount_msat\"}\n\x16\x46\x65tchinvoiceNextPeriod\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x04\x12\x11\n\tstarttime\x18\x02 \x01(\x04\x12\x0f\n\x07\x65ndtime\x18\x03 \x01(\x04\x12\x17\n\x0fpaywindow_start\x18\x04 \x01(\x04\x12\x15\n\rpaywindow_end\x18\x05 \x01(\x04\"\xe0\x01\n\x1d\x43\x61ncelrecurringinvoiceRequest\x12\r\n\x05offer\x18\x01 \x01(\t\x12\x1a\n\x12recurrence_counter\x18\x02 \x01(\x04\x12\x18\n\x10recurrence_label\x18\x03 \x01(\t\x12\x1d\n\x10recurrence_start\x18\x04 \x01(\x01H\x00\x88\x01\x01\x12\x17\n\npayer_note\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62ip353\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x13\n\x11_recurrence_startB\r\n\x0b_payer_noteB\t\n\x07_bip353\"0\n\x1e\x43\x61ncelrecurringinvoiceResponse\x12\x0e\n\x06\x62olt12\x18\x01 \x01(\t\"&\n\x18\x46undchannelCancelRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\".\n\x19\x46undchannelCancelResponse\x12\x11\n\tcancelled\x18\x01 \x01(\t\"Z\n\x1a\x46undchannelCompleteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x15\n\x08withhold\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x0b\n\t_withhold\"N\n\x1b\x46undchannelCompleteResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\"\xfb\x03\n\x12\x46undchannelRequest\x12 \n\x06\x61mount\x18\x01 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12#\n\tpush_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\n\n\x02id\x18\t \x01(\x0c\x12\x14\n\x07minconf\x18\n \x01(\rH\x06\x88\x01\x01\x12\x1c\n\x05utxos\x18\x0b \x03(\x0b\x32\r.cln.Outpoint\x12\x15\n\x08mindepth\x18\x0c \x01(\rH\x07\x88\x01\x01\x12!\n\x07reserve\x18\r \x01(\x0b\x32\x0b.cln.AmountH\x08\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\x0e \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\n\n\x08_minconfB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xe4\x01\n\x13\x46undchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x0e\n\x06outnum\x18\x03 \x01(\r\x12\x12\n\nchannel_id\x18\x04 \x01(\x0c\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x00\x88\x01\x01\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x01\x88\x01\x01\x12\x36\n\x0c\x63hannel_type\x18\x07 \x01(\x0b\x32\x1b.cln.FundchannelChannelTypeH\x02\x88\x01\x01\x42\x0b\n\t_close_toB\x0b\n\t_mindepthB\x0f\n\r_channel_type\"K\n\x16\x46undchannelChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\xd6\x02\n\x17\x46undchannelStartRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x1b\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\x07\x66\x65\x65rate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12#\n\tpush_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08mindepth\x18\x07 \x01(\rH\x04\x88\x01\x01\x12!\n\x07reserve\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\rB\n\n\x08_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0c\n\n_push_msatB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xf6\x01\n\x18\x46undchannelStartResponse\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x14\n\x0cscriptpubkey\x18\x02 \x01(\x0c\x12;\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32 .cln.FundchannelStartChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x04 \x01(\x0cH\x01\x88\x01\x01\x12\x15\n\rwarning_usage\x18\x05 \x01(\t\x12\x15\n\x08mindepth\x18\x06 \x01(\rH\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x0b\n\t_mindepth\"P\n\x1b\x46undchannelStartChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9d\x01\n\rGetlogRequest\x12\x32\n\x05level\x18\x01 \x01(\x0e\x32\x1e.cln.GetlogRequest.GetlogLevelH\x00\x88\x01\x01\"N\n\x0bGetlogLevel\x12\n\n\x06\x42ROKEN\x10\x00\x12\x0b\n\x07UNUSUAL\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\t\n\x05\x44\x45\x42UG\x10\x03\x12\x06\n\x02IO\x10\x04\x12\t\n\x05TRACE\x10\x05\x42\x08\n\x06_level\"h\n\x0eGetlogResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\t\x12\x12\n\nbytes_used\x18\x02 \x01(\r\x12\x11\n\tbytes_max\x18\x03 \x01(\r\x12\x1b\n\x03log\x18\x04 \x03(\x0b\x32\x0e.cln.GetlogLog\"\xe8\x02\n\tGetlogLog\x12/\n\titem_type\x18\x01 \x01(\x0e\x32\x1c.cln.GetlogLog.GetlogLogType\x12\x18\n\x0bnum_skipped\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04time\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06source\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03log\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x14\n\x07node_id\x18\x06 \x01(\x0cH\x04\x88\x01\x01\x12\x11\n\x04\x64\x61ta\x18\x07 \x01(\x0cH\x05\x88\x01\x01\"l\n\rGetlogLogType\x12\x0b\n\x07SKIPPED\x10\x00\x12\n\n\x06\x42ROKEN\x10\x01\x12\x0b\n\x07UNUSUAL\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\t\n\x05\x44\x45\x42UG\x10\x04\x12\t\n\x05IO_IN\x10\x05\x12\n\n\x06IO_OUT\x10\x06\x12\t\n\x05TRACE\x10\x07\x42\x0e\n\x0c_num_skippedB\x07\n\x05_timeB\t\n\x07_sourceB\x06\n\x04_logB\n\n\x08_node_idB\x07\n\x05_data\"\xd9\x08\n\x13\x46underupdateRequest\x12@\n\x06policy\x18\x01 \x01(\x0e\x32+.cln.FunderupdateRequest.FunderupdatePolicyH\x00\x88\x01\x01\x12$\n\npolicy_mod\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x18\n\x0bleases_only\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12\x30\n\x16min_their_funding_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x30\n\x16max_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12.\n\x14per_channel_min_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12.\n\x14per_channel_max_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12+\n\x11reserve_tank_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x07\x88\x01\x01\x12\x19\n\x0c\x66uzz_percent\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1d\n\x10\x66und_probability\x18\n \x01(\rH\t\x88\x01\x01\x12-\n\x13lease_fee_base_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\r\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x0f \x01(\rH\x0e\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x10 \x01(\x0cH\x0f\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\t\n\x07_policyB\r\n\x0b_policy_modB\x0e\n\x0c_leases_onlyB\x19\n\x17_min_their_funding_msatB\x19\n\x17_max_their_funding_msatB\x17\n\x15_per_channel_min_msatB\x17\n\x15_per_channel_max_msatB\x14\n\x12_reserve_tank_msatB\x0f\n\r_fuzz_percentB\x13\n\x11_fund_probabilityB\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xdf\x06\n\x14\x46underupdateResponse\x12\x0f\n\x07summary\x18\x01 \x01(\t\x12<\n\x06policy\x18\x02 \x01(\x0e\x32,.cln.FunderupdateResponse.FunderupdatePolicy\x12\x12\n\npolicy_mod\x18\x03 \x01(\r\x12\x13\n\x0bleases_only\x18\x04 \x01(\x08\x12+\n\x16min_their_funding_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16max_their_funding_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_min_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12)\n\x14per_channel_max_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x11reserve_tank_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66uzz_percent\x18\n \x01(\r\x12\x18\n\x10\x66und_probability\x18\x0b \x01(\r\x12-\n\x13lease_fee_base_msat\x18\x0c \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x1c\n\x0flease_fee_basis\x18\r \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66unding_weight\x18\x0e \x01(\rH\x02\x88\x01\x01\x12\x33\n\x19\x63hannel_fee_max_base_msat\x18\x0f \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x35\n(channel_fee_max_proportional_thousandths\x18\x10 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x11 \x01(\x0cH\x05\x88\x01\x01\"9\n\x12\x46underupdatePolicy\x12\t\n\x05MATCH\x10\x00\x12\r\n\tAVAILABLE\x10\x01\x12\t\n\x05\x46IXED\x10\x02\x42\x16\n\x14_lease_fee_base_msatB\x12\n\x10_lease_fee_basisB\x11\n\x0f_funding_weightB\x1c\n\x1a_channel_fee_max_base_msatB+\n)_channel_fee_max_proportional_thousandthsB\x10\n\x0e_compact_lease\"\xec\x01\n\x0fGetrouteRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x12\n\nriskfactor\x18\x03 \x01(\x04\x12\x11\n\x04\x63ltv\x18\x04 \x01(\rH\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\x12 \n\x0b\x61mount_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountB\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\"t\n\x14ListaddressesRequest\x12\x14\n\x07\x61\x64\x64ress\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\n\n\x08_addressB\x08\n\x06_startB\x08\n\x06_limit\"G\n\x15ListaddressesResponse\x12.\n\taddresses\x18\x01 \x03(\x0b\x32\x1b.cln.ListaddressesAddresses\"d\n\x16ListaddressesAddresses\x12\x0e\n\x06keyidx\x18\x01 \x01(\x04\x12\x13\n\x06\x62\x65\x63h32\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x11\n\x04p2tr\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\t\n\x07_bech32B\x07\n\x05_p2tr\"\xb7\x03\n\x13ListforwardsRequest\x12@\n\x06status\x18\x01 \x01(\x0e\x32+.cln.ListforwardsRequest.ListforwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x03 \x01(\tH\x02\x88\x01\x01\x12>\n\x05index\x18\x04 \x01(\x0e\x32*.cln.ListforwardsRequest.ListforwardsIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"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\"-\n\x11ListforwardsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\t\n\x07_statusB\r\n\x0b_in_channelB\x0e\n\x0c_out_channelB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"C\n\x14ListforwardsResponse\x12+\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x19.cln.ListforwardsForwards\"\xb4\x06\n\x14ListforwardsForwards\x12\x12\n\nin_channel\x18\x01 \x01(\t\x12\x1c\n\x07in_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x44\n\x06status\x18\x03 \x01(\x0e\x32\x34.cln.ListforwardsForwards.ListforwardsForwardsStatus\x12\x15\n\rreceived_time\x18\x04 \x01(\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\"\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\"\n\x08out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12G\n\x05style\x18\t \x01(\x0e\x32\x33.cln.ListforwardsForwards.ListforwardsForwardsStyleH\x03\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\x04\x88\x01\x01\x12\x18\n\x0bout_htlc_id\x18\x0b \x01(\x04H\x05\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1a\n\rupdated_index\x18\r \x01(\x04H\x07\x88\x01\x01\x12\x1a\n\rresolved_time\x18\x0e \x01(\x01H\x08\x88\x01\x01\x12\x15\n\x08\x66\x61ilcode\x18\x0f \x01(\rH\t\x88\x01\x01\x12\x17\n\nfailreason\x18\x10 \x01(\tH\n\x88\x01\x01\"T\n\x1aListforwardsForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x10\n\x0cLOCAL_FAILED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03\"0\n\x19ListforwardsForwardsStyle\x12\n\n\x06LEGACY\x10\x00\x12\x07\n\x03TLV\x10\x01\x42\x0e\n\x0c_out_channelB\x0b\n\t_fee_msatB\x0b\n\t_out_msatB\x08\n\x06_styleB\r\n\x0b_in_htlc_idB\x0e\n\x0c_out_htlc_idB\x10\n\x0e_created_indexB\x10\n\x0e_updated_indexB\x10\n\x0e_resolved_timeB\x0b\n\t_failcodeB\r\n\x0b_failreason\"a\n\x11ListoffersRequest\x12\x15\n\x08offer_id\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0b\x61\x63tive_only\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x0b\n\t_offer_idB\x0e\n\x0c_active_only\";\n\x12ListoffersResponse\x12%\n\x06offers\x18\x01 \x03(\x0b\x32\x15.cln.ListoffersOffers\"\xae\x01\n\x10ListoffersOffers\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x12\n\x05label\x18\x06 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_labelB\x0e\n\x0c_description\"\x84\x03\n\x0fListpaysRequest\x12\x13\n\x06\x62olt11\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x02 \x01(\x0cH\x01\x88\x01\x01\x12\x38\n\x06status\x18\x03 \x01(\x0e\x32#.cln.ListpaysRequest.ListpaysStatusH\x02\x88\x01\x01\x12\x36\n\x05index\x18\x04 \x01(\x0e\x32\".cln.ListpaysRequest.ListpaysIndexH\x03\x88\x01\x01\x12\x12\n\x05start\x18\x05 \x01(\x04H\x04\x88\x01\x01\x12\x12\n\x05limit\x18\x06 \x01(\rH\x05\x88\x01\x01\"7\n\x0eListpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\x0c\n\x08\x43OMPLETE\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\")\n\rListpaysIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\t\n\x07_bolt11B\x0f\n\r_payment_hashB\t\n\x07_statusB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"3\n\x10ListpaysResponse\x12\x1f\n\x04pays\x18\x01 \x03(\x0b\x32\x11.cln.ListpaysPays\"\xdb\x05\n\x0cListpaysPays\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0e\x32$.cln.ListpaysPays.ListpaysPaysStatus\x12\x18\n\x0b\x64\x65stination\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x12\n\ncreated_at\x18\x04 \x01(\x04\x12\x12\n\x05label\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12*\n\x10\x61mount_sent_msat\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x17\n\nerroronion\x18\n \x01(\x0cH\x06\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x0b \x01(\tH\x07\x88\x01\x01\x12\x19\n\x0c\x63ompleted_at\x18\x0c \x01(\x04H\x08\x88\x01\x01\x12\x15\n\x08preimage\x18\r \x01(\x0cH\t\x88\x01\x01\x12\x1c\n\x0fnumber_of_parts\x18\x0e \x01(\x04H\n\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x0f \x01(\x04H\x0b\x88\x01\x01\x12\x1a\n\rupdated_index\x18\x10 \x01(\x04H\x0c\x88\x01\x01\";\n\x12ListpaysPaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\x0e\n\x0c_destinationB\x08\n\x06_labelB\t\n\x07_bolt11B\t\n\x07_bolt12B\x0e\n\x0c_amount_msatB\x13\n\x11_amount_sent_msatB\r\n\x0b_erroronionB\x0e\n\x0c_descriptionB\x0f\n\r_completed_atB\x0b\n\t_preimageB\x12\n\x10_number_of_partsB\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xd6\x01\n\x10ListhtlcsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x05index\x18\x02 \x01(\x0e\x32$.cln.ListhtlcsRequest.ListhtlcsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"*\n\x0eListhtlcsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"7\n\x11ListhtlcsResponse\x12\"\n\x05htlcs\x18\x01 \x03(\x0b\x32\x13.cln.ListhtlcsHtlcs\"\xe5\x02\n\x0eListhtlcsHtlcs\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x04\x12\x0e\n\x06\x65xpiry\x18\x03 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12>\n\tdirection\x18\x05 \x01(\x0e\x32+.cln.ListhtlcsHtlcs.ListhtlcsHtlcsDirection\x12\x14\n\x0cpayment_hash\x18\x06 \x01(\x0c\x12\x1d\n\x05state\x18\x07 \x01(\x0e\x32\x0e.cln.HtlcState\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x00\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x01\x88\x01\x01\"*\n\x17ListhtlcsHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x10\n\x0e_created_indexB\x10\n\x0e_updated_index\"\xb2\x02\n\x17MultifundchannelRequest\x12\x37\n\x0c\x64\x65stinations\x18\x01 \x03(\x0b\x32!.cln.MultifundchannelDestinations\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\x12H\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.Outpoint\x12\x18\n\x0bminchannels\x18\x05 \x01(\x12H\x02\x88\x01\x01\x12-\n\x12\x63ommitment_feerate\x18\x06 \x01(\x0b\x32\x0c.cln.FeerateH\x03\x88\x01\x01\x42\n\n\x08_feerateB\n\n\x08_minconfB\x0e\n\x0c_minchannelsB\x15\n\x13_commitment_feerate\"\x97\x01\n\x18MultifundchannelResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x34\n\x0b\x63hannel_ids\x18\x03 \x03(\x0b\x32\x1f.cln.MultifundchannelChannelIds\x12+\n\x06\x66\x61iled\x18\x04 \x03(\x0b\x32\x1b.cln.MultifundchannelFailed\"\xff\x02\n\x1cMultifundchannelDestinations\x12\n\n\x02id\x18\x01 \x01(\t\x12 \n\x06\x61mount\x18\x02 \x01(\x0b\x32\x10.cln.AmountOrAll\x12\x15\n\x08\x61nnounce\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12#\n\tpush_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\tH\x02\x88\x01\x01\x12%\n\x0brequest_amt\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08mindepth\x18\x08 \x01(\rH\x05\x88\x01\x01\x12!\n\x07reserve\x18\t \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x42\x0b\n\t_announceB\x0c\n\n_push_msatB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_leaseB\x0b\n\t_mindepthB\n\n\x08_reserve\"\xc8\x01\n\x1aMultifundchannelChannelIds\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12\x12\n\nchannel_id\x18\x03 \x01(\x0c\x12\x45\n\x0c\x63hannel_type\x18\x04 \x01(\x0b\x32*.cln.MultifundchannelChannelIdsChannelTypeH\x00\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x05 \x01(\x0cH\x01\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_to\"Z\n%MultifundchannelChannelIdsChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x93\x02\n\x16MultifundchannelFailed\x12\n\n\x02id\x18\x01 \x01(\x0c\x12H\n\x06method\x18\x02 \x01(\x0e\x32\x38.cln.MultifundchannelFailed.MultifundchannelFailedMethod\x12/\n\x05\x65rror\x18\x03 \x01(\x0b\x32 .cln.MultifundchannelFailedError\"r\n\x1cMultifundchannelFailedMethod\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x14\n\x10OPENCHANNEL_INIT\x10\x01\x12\x15\n\x11\x46UNDCHANNEL_START\x10\x02\x12\x18\n\x14\x46UNDCHANNEL_COMPLETE\x10\x03\"<\n\x1bMultifundchannelFailedError\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x12\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xa8\x01\n\x14MultiwithdrawRequest\x12 \n\x07outputs\x18\x01 \x03(\x0b\x32\x0f.cln.OutputDesc\x12\"\n\x07\x66\x65\x65rate\x18\x02 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x14\n\x07minconf\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x05utxos\x18\x04 \x03(\x0b\x32\r.cln.OutpointB\n\n\x08_feerateB\n\n\x08_minconf\"1\n\x15MultiwithdrawResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\"\xe2\x04\n\x0cOfferRequest\x12\x0e\n\x06\x61mount\x18\x01 \x01(\t\x12\x18\n\x0b\x64\x65scription\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06issuer\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x05label\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0cquantity_max\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x1c\n\x0f\x61\x62solute_expiry\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12\x17\n\nrecurrence\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1c\n\x0frecurrence_base\x18\x08 \x01(\tH\x06\x88\x01\x01\x12!\n\x14recurrence_paywindow\x18\t \x01(\tH\x07\x88\x01\x01\x12\x1d\n\x10recurrence_limit\x18\n \x01(\rH\x08\x88\x01\x01\x12\x17\n\nsingle_use\x18\x0b \x01(\x08H\t\x88\x01\x01\x12 \n\x13proportional_amount\x18\r \x01(\x08H\n\x88\x01\x01\x12 \n\x13optional_recurrence\x18\x0e \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\x0e\x66ronting_nodes\x18\x0f \x03(\x0c\x42\x0e\n\x0c_descriptionB\t\n\x07_issuerB\x08\n\x06_labelB\x0f\n\r_quantity_maxB\x12\n\x10_absolute_expiryB\r\n\x0b_recurrenceB\x12\n\x10_recurrence_baseB\x17\n\x15_recurrence_paywindowB\x13\n\x11_recurrence_limitB\r\n\x0b_single_useB\x16\n\x14_proportional_amountB\x16\n\x14_optional_recurrence\"\x92\x01\n\rOfferResponse\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x12\n\nsingle_use\x18\x03 \x01(\x08\x12\x0e\n\x06\x62olt12\x18\x04 \x01(\t\x12\x0c\n\x04used\x18\x05 \x01(\x08\x12\x0f\n\x07\x63reated\x18\x06 \x01(\x08\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_label\"-\n\x17OpenchannelAbortRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"X\n\x18OpenchannelAbortResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x18\n\x10\x63hannel_canceled\x18\x02 \x01(\x08\x12\x0e\n\x06reason\x18\x03 \x01(\t\"\x9e\x01\n\x16OpenchannelBumpRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12*\n\x0f\x66unding_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x1b\n\x06\x61mount\x18\x04 \x01(\x0b\x32\x0b.cln.AmountB\x12\n\x10_funding_feerate\"\x83\x02\n\x17OpenchannelBumpResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12:\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32\x1f.cln.OpenchannelBumpChannelTypeH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0f\n\r_channel_typeB\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelBumpChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"\x9f\x03\n\x16OpenchannelInitRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x13\n\x0binitialpsbt\x18\x02 \x01(\t\x12-\n\x12\x63ommitment_feerate\x18\x03 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12*\n\x0f\x66unding_feerate\x18\x04 \x01(\x0b\x32\x0c.cln.FeerateH\x01\x88\x01\x01\x12\x15\n\x08\x61nnounce\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\tH\x03\x88\x01\x01\x12%\n\x0brequest_amt\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x1a\n\rcompact_lease\x18\x08 \x01(\x0cH\x05\x88\x01\x01\x12\x14\n\x0c\x63hannel_type\x18\t \x03(\r\x12\x1b\n\x06\x61mount\x18\n \x01(\x0b\x32\x0b.cln.AmountB\x15\n\x13_commitment_feerateB\x12\n\x10_funding_feerateB\x0b\n\t_announceB\x0b\n\t_close_toB\x0e\n\x0c_request_amtB\x10\n\x0e_compact_lease\"\x83\x02\n\x17OpenchannelInitResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12:\n\x0c\x63hannel_type\x18\x03 \x01(\x0b\x32\x1f.cln.OpenchannelInitChannelTypeH\x00\x88\x01\x01\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_serial\x18\x05 \x01(\x04\x12&\n\x19requires_confirmed_inputs\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0f\n\r_channel_typeB\x1c\n\x1a_requires_confirmed_inputs\"O\n\x1aOpenchannelInitChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"C\n\x18OpenchannelSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x13\n\x0bsigned_psbt\x18\x02 \x01(\t\"I\n\x19OpenchannelSignedResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\n\n\x02tx\x18\x02 \x01(\x0c\x12\x0c\n\x04txid\x18\x03 \x01(\x0c\"<\n\x18OpenchannelUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"\xab\x02\n\x19OpenchannelUpdateResponse\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12<\n\x0c\x63hannel_type\x18\x02 \x01(\x0b\x32!.cln.OpenchannelUpdateChannelTypeH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x03 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x04 \x01(\x08\x12\x16\n\x0e\x66unding_outnum\x18\x05 \x01(\r\x12\x15\n\x08\x63lose_to\x18\x06 \x01(\x0cH\x01\x88\x01\x01\x12&\n\x19requires_confirmed_inputs\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\x0f\n\r_channel_typeB\x0b\n\t_close_toB\x1c\n\x1a_requires_confirmed_inputs\"Q\n\x1cOpenchannelUpdateChannelType\x12\x0c\n\x04\x62its\x18\x01 \x03(\r\x12#\n\x05names\x18\x02 \x03(\x0e\x32\x14.cln.ChannelTypeName\"Y\n\x0bPingRequest\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x10\n\x03len\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x16\n\tpongbytes\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x06\n\x04_lenB\x0c\n\n_pongbytes\"\x1e\n\x0cPingResponse\x12\x0e\n\x06totlen\x18\x01 \x01(\r\"\x91\x01\n\rPluginRequest\x12)\n\nsubcommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12\x13\n\x06plugin\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tdirectory\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07options\x18\x04 \x03(\tB\t\n\x07_pluginB\x0c\n\n_directory\"}\n\x0ePluginResponse\x12&\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\x15.cln.PluginSubcommand\x12#\n\x07plugins\x18\x02 \x03(\x0b\x32\x12.cln.PluginPlugins\x12\x13\n\x06result\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_result\">\n\rPluginPlugins\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tive\x18\x02 \x01(\x08\x12\x0f\n\x07\x64ynamic\x18\x03 \x01(\x08\"<\n\x14RenepaystatusRequest\x12\x16\n\tinvstring\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_invstring\"G\n\x15RenepaystatusResponse\x12.\n\tpaystatus\x18\x01 \x03(\x0b\x32\x1b.cln.RenepaystatusPaystatus\"\xe2\x03\n\x16RenepaystatusPaystatus\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\x12\x1d\n\x10payment_preimage\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\x0f\n\x07groupid\x18\x05 \x01(\r\x12\x12\n\x05parts\x18\x06 \x01(\rH\x01\x88\x01\x01\x12 \n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x10\x61mount_sent_msat\x18\x08 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12H\n\x06status\x18\t \x01(\x0e\x32\x38.cln.RenepaystatusPaystatus.RenepaystatusPaystatusStatus\x12\x18\n\x0b\x64\x65stination\x18\n \x01(\x0cH\x03\x88\x01\x01\x12\r\n\x05notes\x18\x0b \x03(\t\"E\n\x1cRenepaystatusPaystatusStatus\x12\x0c\n\x08\x43OMPLETE\x10\x00\x12\x0b\n\x07PENDING\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x42\x13\n\x11_payment_preimageB\x08\n\x06_partsB\x13\n\x11_amount_sent_msatB\x0e\n\x0c_destination\"\xda\x02\n\x0eRenepayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x04 \x01(\rH\x02\x88\x01\x01\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x04\x88\x01\x01\x12\x12\n\x05label\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1b\n\x0e\x64\x65v_use_shadow\x18\x08 \x01(\x08H\x06\x88\x01\x01\x12\x0f\n\x07\x65xclude\x18\t \x03(\tB\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0b\n\t_maxdelayB\x0c\n\n_retry_forB\x0e\n\x0c_descriptionB\x08\n\x06_labelB\x11\n\x0f_dev_use_shadow\"\xa5\x03\n\x0fRenepayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12\x12\n\ncreated_at\x18\x03 \x01(\x01\x12\r\n\x05parts\x18\x04 \x01(\r\x12 \n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12\x32\n\x06status\x18\x07 \x01(\x0e\x32\".cln.RenepayResponse.RenepayStatus\x12\x18\n\x0b\x64\x65stination\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\t \x01(\tH\x01\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\n \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07groupid\x18\x0b \x01(\x04H\x03\x88\x01\x01\"6\n\rRenepayStatus\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\t\n\x07_bolt11B\t\n\x07_bolt12B\n\n\x08_groupid\"l\n\x14ReserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x16\n\texclusive\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x14\n\x07reserve\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0c\n\n_exclusiveB\n\n\x08_reserve\"M\n\x15ReserveinputsResponse\x12\x34\n\x0creservations\x18\x01 \x03(\x0b\x32\x1e.cln.ReserveinputsReservations\"z\n\x19ReserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x19\n\x11reserved_to_block\x18\x05 \x01(\r\"4\n\x14SendcustommsgRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x0c\x12\x0b\n\x03msg\x18\x02 \x01(\x0c\"\'\n\x15SendcustommsgResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\"\xb0\x01\n\x12SendinvoiceRequest\x12\x0e\n\x06invreq\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x14\n\x07timeout\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08quantity\x18\x05 \x01(\x04H\x02\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\n\n\x08_timeoutB\x0b\n\t_quantity\"\xcf\x04\n\x13SendinvoiceResponse\x12\r\n\x05label\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x03 \x01(\x0c\x12:\n\x06status\x18\x04 \x01(\x0e\x32*.cln.SendinvoiceResponse.SendinvoiceStatus\x12\x12\n\nexpires_at\x18\x05 \x01(\x04\x12%\n\x0b\x61mount_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x07 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rcreated_index\x18\x08 \x01(\x04H\x02\x88\x01\x01\x12\x1a\n\rupdated_index\x18\t \x01(\x04H\x03\x88\x01\x01\x12\x16\n\tpay_index\x18\n \x01(\x04H\x04\x88\x01\x01\x12.\n\x14\x61mount_received_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x14\n\x07paid_at\x18\x0c \x01(\x04H\x06\x88\x01\x01\x12\x1d\n\x10payment_preimage\x18\r \x01(\x0cH\x07\x88\x01\x01\"6\n\x11SendinvoiceStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\x0e\n\x0c_amount_msatB\t\n\x07_bolt12B\x10\n\x0e_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\"\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*\n\x15minimum_htlc_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x17warning_htlcmin_too_low\x18\x07 \x01(\tH\x01\x88\x01\x01\x12*\n\x15maximum_htlc_out_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x18warning_htlcmax_too_high\x18\t \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11ignore_fee_limits\x18\n \x01(\x08H\x03\x88\x01\x01\x42\x13\n\x11_short_channel_idB\x1a\n\x18_warning_htlcmin_too_lowB\x1b\n\x19_warning_htlcmax_too_highB\x14\n\x12_ignore_fee_limits\"b\n\x10SetconfigRequest\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x10\n\x03val\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttransient\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x06\n\x04_valB\x0c\n\n_transient\"9\n\x11SetconfigResponse\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x14.cln.SetconfigConfig\"\xa5\x02\n\x0fSetconfigConfig\x12\x0e\n\x06\x63onfig\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07\x64ynamic\x18\x04 \x01(\x08\x12\x10\n\x03set\x18\x05 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tvalue_str\x18\x06 \x01(\tH\x02\x88\x01\x01\x12$\n\nvalue_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x16\n\tvalue_int\x18\x08 \x01(\x12H\x04\x88\x01\x01\x12\x17\n\nvalue_bool\x18\t \x01(\x08H\x05\x88\x01\x01\x42\t\n\x07_pluginB\x06\n\x04_setB\x0c\n\n_value_strB\r\n\x0b_value_msatB\x0c\n\n_value_intB\r\n\x0b_value_bool\"6\n\x15SetpsbtversionRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\r\"&\n\x16SetpsbtversionResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"\'\n\x12SigninvoiceRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\"%\n\x13SigninvoiceResponse\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"%\n\x12SignmessageRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\"F\n\x13SignmessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\r\n\x05recid\x18\x02 \x01(\x0c\x12\r\n\x05zbase\x18\x03 \x01(\t\"\xc8\x01\n\x11SpliceInitRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x17\n\x0frelative_amount\x18\x02 \x01(\x12\x12\x18\n\x0binitialpsbt\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x66\x65\x65rate_per_kw\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x05 \x01(\x08H\x02\x88\x01\x01\x42\x0e\n\x0c_initialpsbtB\x11\n\x0f_feerate_per_kwB\x10\n\x0e_force_feerate\"\"\n\x12SpliceInitResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\"_\n\x13SpliceSignedRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\x12\x17\n\nsign_first\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_sign_first\"^\n\x14SpliceSignedResponse\x12\n\n\x02tx\x18\x01 \x01(\x0c\x12\x0c\n\x04txid\x18\x02 \x01(\x0c\x12\x13\n\x06outnum\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x0c\n\x04psbt\x18\x04 \x01(\tB\t\n\x07_outnum\"7\n\x13SpliceUpdateRequest\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\x12\x0c\n\x04psbt\x18\x02 \x01(\t\"y\n\x14SpliceUpdateResponse\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x1b\n\x13\x63ommitments_secured\x18\x02 \x01(\x08\x12\x1f\n\x12signatures_secured\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\x15\n\x13_signatures_secured\"\xc6\x01\n\x10\x44\x65vspliceRequest\x12\x16\n\x0escript_or_json\x18\x01 \x01(\t\x12\x13\n\x06\x64ryrun\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1a\n\rforce_feerate\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tdebug_log\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\x17\n\ndev_wetrun\x18\x05 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_dryrunB\x10\n\x0e_force_feerateB\x0c\n\n_debug_logB\r\n\x0b_dev_wetrun\"\x80\x01\n\x11\x44\x65vspliceResponse\x12\x0e\n\x06\x64ryrun\x18\x01 \x03(\t\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x0b\n\x03log\x18\x05 \x03(\tB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"H\n\x16UnreserveinputsRequest\x12\x0c\n\x04psbt\x18\x01 \x01(\t\x12\x14\n\x07reserve\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_reserve\"Q\n\x17UnreserveinputsResponse\x12\x36\n\x0creservations\x18\x01 \x03(\x0b\x32 .cln.UnreserveinputsReservations\"\x97\x01\n\x1bUnreserveinputsReservations\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0c\n\x04vout\x18\x02 \x01(\r\x12\x14\n\x0cwas_reserved\x18\x03 \x01(\x08\x12\x10\n\x08reserved\x18\x04 \x01(\x08\x12\x1e\n\x11reserved_to_block\x18\x05 \x01(\rH\x00\x88\x01\x01\x42\x14\n\x12_reserved_to_block\"n\n\x14UpgradewalletRequest\x12\"\n\x07\x66\x65\x65rate\x18\x01 \x01(\x0b\x32\x0c.cln.FeerateH\x00\x88\x01\x01\x12\x17\n\nreservedok\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\n\n\x08_feerateB\r\n\x0b_reservedok\"\x95\x01\n\x15UpgradewalletResponse\x12\x1a\n\rupgraded_outs\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x11\n\x04psbt\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x02tx\x18\x03 \x01(\x0cH\x02\x88\x01\x01\x12\x11\n\x04txid\x18\x04 \x01(\x0cH\x03\x88\x01\x01\x42\x10\n\x0e_upgraded_outsB\x07\n\x05_psbtB\x05\n\x03_txB\x07\n\x05_txid\"O\n\x16WaitblockheightRequest\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\x12\x14\n\x07timeout\x18\x02 \x01(\rH\x00\x88\x01\x01\x42\n\n\x08_timeout\".\n\x17WaitblockheightResponse\x12\x13\n\x0b\x62lockheight\x18\x01 \x01(\r\"\xb9\x02\n\x0bWaitRequest\x12\x31\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitSubsystem\x12\x31\n\tindexname\x18\x02 \x01(\x0e\x32\x1e.cln.WaitRequest.WaitIndexname\x12\x11\n\tnextvalue\x18\x03 \x01(\x04\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\"6\n\rWaitIndexname\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07UPDATED\x10\x01\x12\x0b\n\x07\x44\x45LETED\x10\x02\"\xf0\x05\n\x0cWaitResponse\x12\x32\n\tsubsystem\x18\x01 \x01(\x0e\x32\x1f.cln.WaitResponse.WaitSubsystem\x12\x14\n\x07\x63reated\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x14\n\x07updated\x18\x03 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07\x64\x65leted\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12&\n\x07\x64\x65tails\x18\x05 \x01(\x0b\x32\x10.cln.WaitDetailsH\x03\x88\x01\x01\x12(\n\x08\x66orwards\x18\x06 \x01(\x0b\x32\x11.cln.WaitForwardsH\x04\x88\x01\x01\x12(\n\x08invoices\x18\x07 \x01(\x0b\x32\x11.cln.WaitInvoicesH\x05\x88\x01\x01\x12(\n\x08sendpays\x18\x08 \x01(\x0b\x32\x11.cln.WaitSendpaysH\x06\x88\x01\x01\x12\"\n\x05htlcs\x18\t \x01(\x0b\x32\x0e.cln.WaitHtlcsH\x07\x88\x01\x01\x12,\n\nchainmoves\x18\n \x01(\x0b\x32\x13.cln.WaitChainmovesH\x08\x88\x01\x01\x12\x30\n\x0c\x63hannelmoves\x18\x0b \x01(\x0b\x32\x15.cln.WaitChannelmovesH\t\x88\x01\x01\x12\x32\n\rnetworkevents\x18\x0c \x01(\x0b\x32\x16.cln.WaitNetworkeventsH\n\x88\x01\x01\"y\n\rWaitSubsystem\x12\x0c\n\x08INVOICES\x10\x00\x12\x0c\n\x08\x46ORWARDS\x10\x01\x12\x0c\n\x08SENDPAYS\x10\x02\x12\t\n\x05HTLCS\x10\x03\x12\x0e\n\nCHAINMOVES\x10\x04\x12\x10\n\x0c\x43HANNELMOVES\x10\x05\x12\x11\n\rNETWORKEVENTS\x10\x06\x42\n\n\x08_createdB\n\n\x08_updatedB\n\n\x08_deletedB\n\n\x08_detailsB\x0b\n\t_forwardsB\x0b\n\t_invoicesB\x0b\n\t_sendpaysB\x08\n\x06_htlcsB\r\n\x0b_chainmovesB\x0f\n\r_channelmovesB\x10\n\x0e_networkevents\"\xcb\x02\n\x0cWaitForwards\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitForwards.WaitForwardsStatusH\x00\x88\x01\x01\x12\x17\n\nin_channel\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12!\n\x07in_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x05 \x01(\tH\x04\x88\x01\x01\"L\n\x12WaitForwardsStatus\x12\x0b\n\x07OFFERED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x10\n\x0cLOCAL_FAILED\x10\x03\x42\t\n\x07_statusB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"\x95\x02\n\x0cWaitInvoices\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitInvoices.WaitInvoicesStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\"7\n\x12WaitInvoicesStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12\"\xff\x01\n\x0cWaitSendpays\x12\x39\n\x06status\x18\x01 \x01(\x0e\x32$.cln.WaitSendpays.WaitSendpaysStatusH\x00\x88\x01\x01\x12\x13\n\x06partid\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x14\n\x07groupid\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x04 \x01(\x0cH\x03\x88\x01\x01\";\n\x12WaitSendpaysStatus\x12\x0b\n\x07PENDING\x10\x00\x12\n\n\x06\x46\x41ILED\x10\x01\x12\x0c\n\x08\x43OMPLETE\x10\x02\x42\t\n\x07_statusB\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hash\"\x8c\x03\n\tWaitHtlcs\x12\"\n\x05state\x18\x01 \x01(\x0e\x32\x0e.cln.HtlcStateH\x00\x88\x01\x01\x12\x14\n\x07htlc_id\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63ltv_expiry\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x04\x88\x01\x01\x12\x39\n\tdirection\x18\x06 \x01(\x0e\x32!.cln.WaitHtlcs.WaitHtlcsDirectionH\x05\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x06\x88\x01\x01\"%\n\x12WaitHtlcsDirection\x12\x07\n\x03OUT\x10\x00\x12\x06\n\x02IN\x10\x01\x42\x08\n\x06_stateB\n\n\x08_htlc_idB\x13\n\x11_short_channel_idB\x0e\n\x0c_cltv_expiryB\x0e\n\x0c_amount_msatB\x0c\n\n_directionB\x0f\n\r_payment_hash\"d\n\x0eWaitChainmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"f\n\x10WaitChannelmoves\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x89\x02\n\x11WaitNetworkevents\x12\x1a\n\rcreated_index\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x44\n\titem_type\x18\x02 \x01(\x0e\x32,.cln.WaitNetworkevents.WaitNetworkeventsTypeH\x01\x88\x01\x01\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x02\x88\x01\x01\"P\n\x15WaitNetworkeventsType\x12\x0b\n\x07\x43ONNECT\x10\x00\x12\x10\n\x0c\x43ONNECT_FAIL\x10\x01\x12\x08\n\x04PING\x10\x02\x12\x0e\n\nDISCONNECT\x10\x03\x42\x10\n\x0e_created_indexB\x0c\n\n_item_typeB\n\n\x08_peer_id\"\xfc\x04\n\x0bWaitDetails\x12\x37\n\x06status\x18\x01 \x01(\x0e\x32\".cln.WaitDetails.WaitDetailsStatusH\x00\x88\x01\x01\x12\x12\n\x05label\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x13\n\x06\x62olt11\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x13\n\x06\x62olt12\x18\x05 \x01(\tH\x04\x88\x01\x01\x12\x13\n\x06partid\x18\x06 \x01(\x04H\x05\x88\x01\x01\x12\x14\n\x07groupid\x18\x07 \x01(\x04H\x06\x88\x01\x01\x12\x19\n\x0cpayment_hash\x18\x08 \x01(\x0cH\x07\x88\x01\x01\x12\x17\n\nin_channel\x18\t \x01(\tH\x08\x88\x01\x01\x12\x17\n\nin_htlc_id\x18\n \x01(\x04H\t\x88\x01\x01\x12!\n\x07in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\n\x88\x01\x01\x12\x18\n\x0bout_channel\x18\x0c \x01(\tH\x0b\x88\x01\x01\"\x89\x01\n\x11WaitDetailsStatus\x12\n\n\x06UNPAID\x10\x00\x12\x08\n\x04PAID\x10\x01\x12\x0b\n\x07\x45XPIRED\x10\x02\x12\x0b\n\x07PENDING\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\x0c\n\x08\x43OMPLETE\x10\x05\x12\x0b\n\x07OFFERED\x10\x06\x12\x0b\n\x07SETTLED\x10\x07\x12\x10\n\x0cLOCAL_FAILED\x10\x08\x42\t\n\x07_statusB\x08\n\x06_labelB\x0e\n\x0c_descriptionB\t\n\x07_bolt11B\t\n\x07_bolt12B\t\n\x07_partidB\n\n\x08_groupidB\x0f\n\r_payment_hashB\r\n\x0b_in_channelB\r\n\x0b_in_htlc_idB\n\n\x08_in_msatB\x0e\n\x0c_out_channel\"4\n\x12ListconfigsRequest\x12\x13\n\x06\x63onfig\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_config\"P\n\x13ListconfigsResponse\x12-\n\x07\x63onfigs\x18\x01 \x01(\x0b\x32\x17.cln.ListconfigsConfigsH\x00\x88\x01\x01\x42\n\n\x08_configs\"\xd5\x30\n\x12ListconfigsConfigs\x12.\n\x04\x63onf\x18\x01 \x01(\x0b\x32\x1b.cln.ListconfigsConfigsConfH\x00\x88\x01\x01\x12\x38\n\tdeveloper\x18\x02 \x01(\x0b\x32 .cln.ListconfigsConfigsDeveloperH\x01\x88\x01\x01\x12?\n\rclear_plugins\x18\x03 \x01(\x0b\x32#.cln.ListconfigsConfigsClearpluginsH\x02\x88\x01\x01\x12;\n\x0b\x64isable_mpp\x18\x04 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablemppH\x03\x88\x01\x01\x12\x34\n\x07mainnet\x18\x05 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsMainnetH\x04\x88\x01\x01\x12\x34\n\x07regtest\x18\x06 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRegtestH\x05\x88\x01\x01\x12\x32\n\x06signet\x18\x07 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsSignetH\x06\x88\x01\x01\x12\x34\n\x07testnet\x18\x08 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsTestnetH\x07\x88\x01\x01\x12\x45\n\x10important_plugin\x18\t \x01(\x0b\x32&.cln.ListconfigsConfigsImportantpluginH\x08\x88\x01\x01\x12\x32\n\x06plugin\x18\n \x01(\x0b\x32\x1d.cln.ListconfigsConfigsPluginH\t\x88\x01\x01\x12\x39\n\nplugin_dir\x18\x0b \x01(\x0b\x32 .cln.ListconfigsConfigsPlugindirH\n\x88\x01\x01\x12?\n\rlightning_dir\x18\x0c \x01(\x0b\x32#.cln.ListconfigsConfigsLightningdirH\x0b\x88\x01\x01\x12\x34\n\x07network\x18\r \x01(\x0b\x32\x1e.cln.ListconfigsConfigsNetworkH\x0c\x88\x01\x01\x12N\n\x15\x61llow_deprecated_apis\x18\x0e \x01(\x0b\x32*.cln.ListconfigsConfigsAllowdeprecatedapisH\r\x88\x01\x01\x12\x35\n\x08rpc_file\x18\x0f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsRpcfileH\x0e\x88\x01\x01\x12\x41\n\x0e\x64isable_plugin\x18\x10 \x01(\x0b\x32$.cln.ListconfigsConfigsDisablepluginH\x0f\x88\x01\x01\x12\x44\n\x10\x61lways_use_proxy\x18\x11 \x01(\x0b\x32%.cln.ListconfigsConfigsAlwaysuseproxyH\x10\x88\x01\x01\x12\x32\n\x06\x64\x61\x65mon\x18\x12 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsDaemonH\x11\x88\x01\x01\x12\x32\n\x06wallet\x18\x13 \x01(\x0b\x32\x1d.cln.ListconfigsConfigsWalletH\x12\x88\x01\x01\x12\x41\n\x0elarge_channels\x18\x14 \x01(\x0b\x32$.cln.ListconfigsConfigsLargechannelsH\x13\x88\x01\x01\x12P\n\x16\x65xperimental_dual_fund\x18\x15 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentaldualfundH\x14\x88\x01\x01\x12O\n\x15\x65xperimental_splicing\x18\x16 \x01(\x0b\x32+.cln.ListconfigsConfigsExperimentalsplicingH\x15\x88\x01\x01\x12Z\n\x1b\x65xperimental_onion_messages\x18\x17 \x01(\x0b\x32\x30.cln.ListconfigsConfigsExperimentalonionmessagesH\x16\x88\x01\x01\x12K\n\x13\x65xperimental_offers\x18\x18 \x01(\x0b\x32).cln.ListconfigsConfigsExperimentaloffersH\x17\x88\x01\x01\x12i\n#experimental_shutdown_wrong_funding\x18\x19 \x01(\x0b\x32\x37.cln.ListconfigsConfigsExperimentalshutdownwrongfundingH\x18\x88\x01\x01\x12V\n\x19\x65xperimental_peer_storage\x18\x1a \x01(\x0b\x32..cln.ListconfigsConfigsExperimentalpeerstorageH\x19\x88\x01\x01\x12M\n\x14\x65xperimental_anchors\x18\x1b \x01(\x0b\x32*.cln.ListconfigsConfigsExperimentalanchorsH\x1a\x88\x01\x01\x12\x45\n\x10\x64\x61tabase_upgrade\x18\x1c \x01(\x0b\x32&.cln.ListconfigsConfigsDatabaseupgradeH\x1b\x88\x01\x01\x12,\n\x03rgb\x18\x1d \x01(\x0b\x32\x1a.cln.ListconfigsConfigsRgbH\x1c\x88\x01\x01\x12\x30\n\x05\x61lias\x18\x1e \x01(\x0b\x32\x1c.cln.ListconfigsConfigsAliasH\x1d\x88\x01\x01\x12\x35\n\x08pid_file\x18\x1f \x01(\x0b\x32\x1e.cln.ListconfigsConfigsPidfileH\x1e\x88\x01\x01\x12\x46\n\x11ignore_fee_limits\x18 \x01(\x0b\x32&.cln.ListconfigsConfigsIgnorefeelimitsH\x1f\x88\x01\x01\x12\x45\n\x10watchtime_blocks\x18! \x01(\x0b\x32&.cln.ListconfigsConfigsWatchtimeblocksH \x88\x01\x01\x12J\n\x13max_locktime_blocks\x18\" \x01(\x0b\x32(.cln.ListconfigsConfigsMaxlocktimeblocksH!\x88\x01\x01\x12\x45\n\x10\x66unding_confirms\x18# \x01(\x0b\x32&.cln.ListconfigsConfigsFundingconfirmsH\"\x88\x01\x01\x12\x39\n\ncltv_delta\x18$ \x01(\x0b\x32 .cln.ListconfigsConfigsCltvdeltaH#\x88\x01\x01\x12\x39\n\ncltv_final\x18% \x01(\x0b\x32 .cln.ListconfigsConfigsCltvfinalH$\x88\x01\x01\x12;\n\x0b\x63ommit_time\x18& \x01(\x0b\x32!.cln.ListconfigsConfigsCommittimeH%\x88\x01\x01\x12\x35\n\x08\x66\x65\x65_base\x18\' \x01(\x0b\x32\x1e.cln.ListconfigsConfigsFeebaseH&\x88\x01\x01\x12\x32\n\x06rescan\x18( \x01(\x0b\x32\x1d.cln.ListconfigsConfigsRescanH\'\x88\x01\x01\x12\x42\n\x0f\x66\x65\x65_per_satoshi\x18) \x01(\x0b\x32$.cln.ListconfigsConfigsFeepersatoshiH(\x88\x01\x01\x12L\n\x14max_concurrent_htlcs\x18* \x01(\x0b\x32).cln.ListconfigsConfigsMaxconcurrenthtlcsH)\x88\x01\x01\x12\x46\n\x11htlc_minimum_msat\x18+ \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcminimummsatH*\x88\x01\x01\x12\x46\n\x11htlc_maximum_msat\x18, \x01(\x0b\x32&.cln.ListconfigsConfigsHtlcmaximummsatH+\x88\x01\x01\x12X\n\x1bmax_dust_htlc_exposure_msat\x18- \x01(\x0b\x32..cln.ListconfigsConfigsMaxdusthtlcexposuremsatH,\x88\x01\x01\x12\x44\n\x10min_capacity_sat\x18. \x01(\x0b\x32%.cln.ListconfigsConfigsMincapacitysatH-\x88\x01\x01\x12.\n\x04\x61\x64\x64r\x18/ \x01(\x0b\x32\x1b.cln.ListconfigsConfigsAddrH.\x88\x01\x01\x12?\n\rannounce_addr\x18\x30 \x01(\x0b\x32#.cln.ListconfigsConfigsAnnounceaddrH/\x88\x01\x01\x12\x37\n\tbind_addr\x18\x31 \x01(\x0b\x32\x1f.cln.ListconfigsConfigsBindaddrH0\x88\x01\x01\x12\x34\n\x07offline\x18\x32 \x01(\x0b\x32\x1e.cln.ListconfigsConfigsOfflineH1\x88\x01\x01\x12:\n\nautolisten\x18\x33 \x01(\x0b\x32!.cln.ListconfigsConfigsAutolistenH2\x88\x01\x01\x12\x30\n\x05proxy\x18\x34 \x01(\x0b\x32\x1c.cln.ListconfigsConfigsProxyH3\x88\x01\x01\x12;\n\x0b\x64isable_dns\x18\x35 \x01(\x0b\x32!.cln.ListconfigsConfigsDisablednsH4\x88\x01\x01\x12T\n\x18\x61nnounce_addr_discovered\x18\x36 \x01(\x0b\x32-.cln.ListconfigsConfigsAnnounceaddrdiscoveredH5\x88\x01\x01\x12]\n\x1d\x61nnounce_addr_discovered_port\x18\x37 \x01(\x0b\x32\x31.cln.ListconfigsConfigsAnnounceaddrdiscoveredportH6\x88\x01\x01\x12?\n\rencrypted_hsm\x18\x38 \x01(\x0b\x32#.cln.ListconfigsConfigsEncryptedhsmH7\x88\x01\x01\x12>\n\rrpc_file_mode\x18\x39 \x01(\x0b\x32\".cln.ListconfigsConfigsRpcfilemodeH8\x88\x01\x01\x12\x37\n\tlog_level\x18: \x01(\x0b\x32\x1f.cln.ListconfigsConfigsLoglevelH9\x88\x01\x01\x12\x39\n\nlog_prefix\x18; \x01(\x0b\x32 .cln.ListconfigsConfigsLogprefixH:\x88\x01\x01\x12\x35\n\x08log_file\x18< \x01(\x0b\x32\x1e.cln.ListconfigsConfigsLogfileH;\x88\x01\x01\x12\x41\n\x0elog_timestamps\x18= \x01(\x0b\x32$.cln.ListconfigsConfigsLogtimestampsH<\x88\x01\x01\x12\x41\n\x0e\x66orce_feerates\x18> \x01(\x0b\x32$.cln.ListconfigsConfigsForcefeeratesH=\x88\x01\x01\x12\x38\n\tsubdaemon\x18? \x01(\x0b\x32 .cln.ListconfigsConfigsSubdaemonH>\x88\x01\x01\x12Q\n\x16\x66\x65tchinvoice_noconnect\x18@ \x01(\x0b\x32,.cln.ListconfigsConfigsFetchinvoicenoconnectH?\x88\x01\x01\x12L\n\x14tor_service_password\x18\x42 \x01(\x0b\x32).cln.ListconfigsConfigsTorservicepasswordH@\x88\x01\x01\x12\x46\n\x11\x61nnounce_addr_dns\x18\x43 \x01(\x0b\x32&.cln.ListconfigsConfigsAnnounceaddrdnsHA\x88\x01\x01\x12T\n\x18require_confirmed_inputs\x18\x44 \x01(\x0b\x32-.cln.ListconfigsConfigsRequireconfirmedinputsHB\x88\x01\x01\x12\x39\n\ncommit_fee\x18\x45 \x01(\x0b\x32 .cln.ListconfigsConfigsCommitfeeHC\x88\x01\x01\x12N\n\x15\x63ommit_feerate_offset\x18\x46 \x01(\x0b\x32*.cln.ListconfigsConfigsCommitfeerateoffsetHD\x88\x01\x01\x12T\n\x18\x61utoconnect_seeker_peers\x18G \x01(\x0b\x32-.cln.ListconfigsConfigsAutoconnectseekerpeersHE\x88\x01\x01\x12R\n\x17\x63urrencyrate_add_source\x18J \x01(\x0b\x32,.cln.ListconfigsConfigsCurrencyrateaddsourceHF\x88\x01\x01\x12Z\n\x1b\x63urrencyrate_disable_source\x18K \x01(\x0b\x32\x30.cln.ListconfigsConfigsCurrencyratedisablesourceHG\x88\x01\x01\x42\x07\n\x05_confB\x0c\n\n_developerB\x10\n\x0e_clear_pluginsB\x0e\n\x0c_disable_mppB\n\n\x08_mainnetB\n\n\x08_regtestB\t\n\x07_signetB\n\n\x08_testnetB\x13\n\x11_important_pluginB\t\n\x07_pluginB\r\n\x0b_plugin_dirB\x10\n\x0e_lightning_dirB\n\n\x08_networkB\x18\n\x16_allow_deprecated_apisB\x0b\n\t_rpc_fileB\x11\n\x0f_disable_pluginB\x13\n\x11_always_use_proxyB\t\n\x07_daemonB\t\n\x07_walletB\x11\n\x0f_large_channelsB\x19\n\x17_experimental_dual_fundB\x18\n\x16_experimental_splicingB\x1e\n\x1c_experimental_onion_messagesB\x16\n\x14_experimental_offersB&\n$_experimental_shutdown_wrong_fundingB\x1c\n\x1a_experimental_peer_storageB\x17\n\x15_experimental_anchorsB\x13\n\x11_database_upgradeB\x06\n\x04_rgbB\x08\n\x06_aliasB\x0b\n\t_pid_fileB\x14\n\x12_ignore_fee_limitsB\x13\n\x11_watchtime_blocksB\x16\n\x14_max_locktime_blocksB\x13\n\x11_funding_confirmsB\r\n\x0b_cltv_deltaB\r\n\x0b_cltv_finalB\x0e\n\x0c_commit_timeB\x0b\n\t_fee_baseB\t\n\x07_rescanB\x12\n\x10_fee_per_satoshiB\x17\n\x15_max_concurrent_htlcsB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x1e\n\x1c_max_dust_htlc_exposure_msatB\x13\n\x11_min_capacity_satB\x07\n\x05_addrB\x10\n\x0e_announce_addrB\x0c\n\n_bind_addrB\n\n\x08_offlineB\r\n\x0b_autolistenB\x08\n\x06_proxyB\x0e\n\x0c_disable_dnsB\x1b\n\x19_announce_addr_discoveredB \n\x1e_announce_addr_discovered_portB\x10\n\x0e_encrypted_hsmB\x10\n\x0e_rpc_file_modeB\x0c\n\n_log_levelB\r\n\x0b_log_prefixB\x0b\n\t_log_fileB\x11\n\x0f_log_timestampsB\x11\n\x0f_force_feeratesB\x0c\n\n_subdaemonB\x19\n\x17_fetchinvoice_noconnectB\x17\n\x15_tor_service_passwordB\x14\n\x12_announce_addr_dnsB\x1b\n\x19_require_confirmed_inputsB\r\n\x0b_commit_feeB\x18\n\x16_commit_feerate_offsetB\x1b\n\x19_autoconnect_seeker_peersB\x1a\n\x18_currencyrate_add_sourceB\x1e\n\x1c_currencyrate_disable_source\"\xa2\x01\n\x16ListconfigsConfigsConf\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12H\n\x06source\x18\x02 \x01(\x0e\x32\x38.cln.ListconfigsConfigsConf.ListconfigsConfigsConfSource\"+\n\x1cListconfigsConfigsConfSource\x12\x0b\n\x07\x43MDLINE\x10\x00\":\n\x1bListconfigsConfigsDeveloper\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x1eListconfigsConfigsClearplugins\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"[\n\x1cListconfigsConfigsDisablempp\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"8\n\x19ListconfigsConfigsMainnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsRegtest\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsSignet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"8\n\x19ListconfigsConfigsTestnet\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n!ListconfigsConfigsImportantplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"?\n\x18ListconfigsConfigsPlugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"B\n\x1bListconfigsConfigsPlugindir\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"C\n\x1eListconfigsConfigsLightningdir\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsNetwork\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"K\n%ListconfigsConfigsAllowdeprecatedapis\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsRpcfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n\x1fListconfigsConfigsDisableplugin\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"F\n ListconfigsConfigsAlwaysuseproxy\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"7\n\x18ListconfigsConfigsDaemon\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsWallet\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x1fListconfigsConfigsLargechannels\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n&ListconfigsConfigsExperimentaldualfund\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"E\n&ListconfigsConfigsExperimentalsplicing\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n+ListconfigsConfigsExperimentalonionmessages\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"C\n$ListconfigsConfigsExperimentaloffers\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n2ListconfigsConfigsExperimentalshutdownwrongfunding\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n)ListconfigsConfigsExperimentalpeerstorage\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n%ListconfigsConfigsExperimentalanchors\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsDatabaseupgrade\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\":\n\x15ListconfigsConfigsRgb\x12\x11\n\tvalue_str\x18\x01 \x01(\x0c\x12\x0e\n\x06source\x18\x02 \x01(\t\"<\n\x17ListconfigsConfigsAlias\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsPidfile\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsIgnorefeelimits\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsWatchtimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"H\n#ListconfigsConfigsMaxlocktimeblocks\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"F\n!ListconfigsConfigsFundingconfirms\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvdelta\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCltvfinal\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"A\n\x1cListconfigsConfigsCommittime\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\">\n\x19ListconfigsConfigsFeebase\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x18ListconfigsConfigsRescan\x12\x11\n\tvalue_int\x18\x01 \x01(\x12\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsFeepersatoshi\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"I\n$ListconfigsConfigsMaxconcurrenthtlcs\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcminimummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"T\n!ListconfigsConfigsHtlcmaximummsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"\\\n)ListconfigsConfigsMaxdusthtlcexposuremsat\x12\x1f\n\nvalue_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06source\x18\x02 \x01(\t\"g\n ListconfigsConfigsMincapacitysat\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x14\n\x07\x64ynamic\x18\x03 \x01(\x08H\x00\x88\x01\x01\x42\n\n\x08_dynamic\"=\n\x16ListconfigsConfigsAddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1eListconfigsConfigsAnnounceaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"A\n\x1aListconfigsConfigsBindaddr\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"8\n\x19ListconfigsConfigsOffline\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1cListconfigsConfigsAutolisten\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"<\n\x17ListconfigsConfigsProxy\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\";\n\x1cListconfigsConfigsDisabledns\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"\x80\x02\n(ListconfigsConfigsAnnounceaddrdiscovered\x12q\n\tvalue_str\x18\x01 \x01(\x0e\x32^.cln.ListconfigsConfigsAnnounceaddrdiscovered.ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x0e\n\x06source\x18\x02 \x01(\t\"Q\n0ListconfigsConfigsAnnounceaddrdiscoveredValueStr\x12\x08\n\x04TRUE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04\x41UTO\x10\x02\"Q\n,ListconfigsConfigsAnnounceaddrdiscoveredport\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"=\n\x1eListconfigsConfigsEncryptedhsm\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1dListconfigsConfigsRpcfilemode\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"?\n\x1aListconfigsConfigsLoglevel\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsLogprefix\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x19ListconfigsConfigsLogfile\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"E\n\x1fListconfigsConfigsLogtimestamps\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"D\n\x1fListconfigsConfigsForcefeerates\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"B\n\x1bListconfigsConfigsSubdaemon\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\"f\n\'ListconfigsConfigsFetchinvoicenoconnect\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"I\n$ListconfigsConfigsTorservicepassword\x12\x11\n\tvalue_str\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\t\"G\n!ListconfigsConfigsAnnounceaddrdns\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"N\n(ListconfigsConfigsRequireconfirmedinputs\x12\x12\n\nvalue_bool\x18\x01 \x01(\x08\x12\x0e\n\x06source\x18\x02 \x01(\t\"@\n\x1bListconfigsConfigsCommitfee\x12\x11\n\tvalue_int\x18\x01 \x01(\x04\x12\x0e\n\x06source\x18\x02 \x01(\t\"J\n%ListconfigsConfigsCommitfeerateoffset\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"M\n(ListconfigsConfigsAutoconnectseekerpeers\x12\x11\n\tvalue_int\x18\x01 \x01(\r\x12\x0e\n\x06source\x18\x02 \x01(\t\"n\n\'ListconfigsConfigsCurrencyrateaddsource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"r\n+ListconfigsConfigsCurrencyratedisablesource\x12\x12\n\nvalues_str\x18\x01 \x03(\t\x12\x0f\n\x07sources\x18\x02 \x03(\t\x12\x13\n\x06plugin\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\t\n\x07_plugin\"\r\n\x0bStopRequest\"q\n\x0cStopResponse\x12\x31\n\x06result\x18\x01 \x01(\x0e\x32\x1c.cln.StopResponse.StopResultH\x00\x88\x01\x01\"#\n\nStopResult\x12\x15\n\x11SHUTDOWN_COMPLETE\x10\x00\x42\t\n\x07_result\"/\n\x0bHelpRequest\x12\x14\n\x07\x63ommand\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\n\n\x08_command\"\x95\x01\n\x0cHelpResponse\x12\x1b\n\x04help\x18\x01 \x03(\x0b\x32\r.cln.HelpHelp\x12:\n\x0b\x66ormat_hint\x18\x02 \x01(\x0e\x32 .cln.HelpResponse.HelpFormathintH\x00\x88\x01\x01\"\x1c\n\x0eHelpFormathint\x12\n\n\x06SIMPLE\x10\x00\x42\x0e\n\x0c_format_hint\"\x1b\n\x08HelpHelp\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\"g\n\x18PreapprovekeysendRequest\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\"\x1b\n\x19PreapprovekeysendResponse\"*\n\x18PreapproveinvoiceRequest\x12\x0e\n\x06\x62olt11\x18\x01 \x01(\t\"\x1b\n\x19PreapproveinvoiceResponse\"\x15\n\x13StaticbackupRequest\"#\n\x14StaticbackupResponse\x12\x0b\n\x03scb\x18\x01 \x03(\x0c\"d\n\x16\x42kprchannelsapyRequest\x12\x17\n\nstart_time\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x02 \x01(\x04H\x01\x88\x01\x01\x42\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x17\x42kprchannelsapyResponse\x12\x35\n\x0c\x63hannels_apy\x18\x01 \x03(\x0b\x32\x1f.cln.BkprchannelsapyChannelsApy\"\xf9\x06\n\x1a\x42kprchannelsapyChannelsApy\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12$\n\x0frouted_out_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0erouted_in_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12(\n\x13lease_fee_paid_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12*\n\x15lease_fee_earned_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12$\n\x0fpushed_out_msat\x18\x06 \x01(\x0b\x32\x0b.cln.Amount\x12#\n\x0epushed_in_msat\x18\x07 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x16our_start_balance_msat\x18\x08 \x01(\x0b\x32\x0b.cln.Amount\x12/\n\x1a\x63hannel_start_balance_msat\x18\t \x01(\x0b\x32\x0b.cln.Amount\x12\"\n\rfees_out_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x0c\x66\x65\x65s_in_msat\x18\x0b \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12\x17\n\x0futilization_out\x18\x0c \x01(\t\x12$\n\x17utilization_out_initial\x18\r \x01(\tH\x01\x88\x01\x01\x12\x16\n\x0eutilization_in\x18\x0e \x01(\t\x12#\n\x16utilization_in_initial\x18\x0f \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x07\x61py_out\x18\x10 \x01(\t\x12\x1c\n\x0f\x61py_out_initial\x18\x11 \x01(\tH\x03\x88\x01\x01\x12\x0e\n\x06\x61py_in\x18\x12 \x01(\t\x12\x1b\n\x0e\x61py_in_initial\x18\x13 \x01(\tH\x04\x88\x01\x01\x12\x11\n\tapy_total\x18\x14 \x01(\t\x12\x1e\n\x11\x61py_total_initial\x18\x15 \x01(\tH\x05\x88\x01\x01\x12\x16\n\tapy_lease\x18\x16 \x01(\tH\x06\x88\x01\x01\x42\x0f\n\r_fees_in_msatB\x1a\n\x18_utilization_out_initialB\x19\n\x17_utilization_in_initialB\x12\n\x10_apy_out_initialB\x11\n\x0f_apy_in_initialB\x14\n\x12_apy_total_initialB\x0c\n\n_apy_lease\"\xd2\x01\n\x18\x42kprdumpincomecsvRequest\x12\x12\n\ncsv_format\x18\x01 \x01(\t\x12\x15\n\x08\x63sv_file\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x1d\n\x10\x63onsolidate_fees\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x17\n\nstart_time\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x05 \x01(\x04H\x03\x88\x01\x01\x42\x0b\n\t_csv_fileB\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"\xd4\x01\n\x19\x42kprdumpincomecsvResponse\x12\x10\n\x08\x63sv_file\x18\x01 \x01(\t\x12M\n\ncsv_format\x18\x02 \x01(\x0e\x32\x39.cln.BkprdumpincomecsvResponse.BkprdumpincomecsvCsvFormat\"V\n\x1a\x42kprdumpincomecsvCsvFormat\x12\x0f\n\x0b\x43OINTRACKER\x10\x00\x12\n\n\x06KOINLY\x10\x01\x12\x0b\n\x07HARMONY\x10\x02\x12\x0e\n\nQUICKBOOKS\x10\x03\"%\n\x12\x42kprinspectRequest\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\"7\n\x13\x42kprinspectResponse\x12 \n\x03txs\x18\x01 \x03(\x0b\x32\x13.cln.BkprinspectTxs\"\x9a\x01\n\x0e\x42kprinspectTxs\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x18\n\x0b\x62lockheight\x18\x02 \x01(\rH\x00\x88\x01\x01\x12#\n\x0e\x66\x65\x65s_paid_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12+\n\x07outputs\x18\x04 \x03(\x0b\x32\x1a.cln.BkprinspectTxsOutputsB\x0e\n\x0c_blockheight\"\xbc\x03\n\x15\x42kprinspectTxsOutputs\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0e\n\x06outnum\x18\x02 \x01(\r\x12&\n\x11output_value_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x04 \x01(\t\x12%\n\x0b\x63redit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12$\n\ndebit_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12 \n\x13originating_account\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x17\n\noutput_tag\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tspend_tag\x18\t \x01(\tH\x04\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x05\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x06\x88\x01\x01\x42\x0e\n\x0c_credit_msatB\r\n\x0b_debit_msatB\x16\n\x14_originating_accountB\r\n\x0b_output_tagB\x0c\n\n_spend_tagB\x10\n\x0e_spending_txidB\r\n\x0b_payment_id\"h\n\x1c\x42kprlistaccounteventsRequest\x12\x14\n\x07\x61\x63\x63ount\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\npayment_id\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\n\n\x08_accountB\r\n\x0b_payment_id\"Q\n\x1d\x42kprlistaccounteventsResponse\x12\x30\n\x06\x65vents\x18\x01 \x03(\x0b\x32 .cln.BkprlistaccounteventsEvents\"\xa1\x05\n\x1b\x42kprlistaccounteventsEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12S\n\titem_type\x18\x02 \x01(\x0e\x32@.cln.BkprlistaccounteventsEvents.BkprlistaccounteventsEventsType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\t \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\n \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0b \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\x0c \x01(\x0cH\x04\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\r \x01(\tH\x05\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x06\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x07\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x08\x88\x01\x01\"J\n\x1f\x42kprlistaccounteventsEventsType\x12\x0f\n\x0bONCHAIN_FEE\x10\x00\x12\t\n\x05\x43HAIN\x10\x01\x12\x0b\n\x07\x43HANNEL\x10\x02\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0e\n\x0c_descriptionB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"\x19\n\x17\x42kprlistbalancesRequest\"K\n\x18\x42kprlistbalancesResponse\x12/\n\x08\x61\x63\x63ounts\x18\x01 \x03(\x0b\x32\x1d.cln.BkprlistbalancesAccounts\"\xc6\x02\n\x18\x42kprlistbalancesAccounts\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x37\n\x08\x62\x61lances\x18\x02 \x03(\x0b\x32%.cln.BkprlistbalancesAccountsBalances\x12\x14\n\x07peer_id\x18\x03 \x01(\x0cH\x00\x88\x01\x01\x12\x16\n\twe_opened\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x61\x63\x63ount_closed\x18\x05 \x01(\x08H\x02\x88\x01\x01\x12\x1d\n\x10\x61\x63\x63ount_resolved\x18\x06 \x01(\x08H\x03\x88\x01\x01\x12\x1e\n\x11resolved_at_block\x18\x07 \x01(\rH\x04\x88\x01\x01\x42\n\n\x08_peer_idB\x0c\n\n_we_openedB\x11\n\x0f_account_closedB\x13\n\x11_account_resolvedB\x14\n\x12_resolved_at_block\"X\n BkprlistbalancesAccountsBalances\x12!\n\x0c\x62\x61lance_msat\x18\x01 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\tcoin_type\x18\x02 \x01(\t\"\x97\x01\n\x15\x42kprlistincomeRequest\x12\x1d\n\x10\x63onsolidate_fees\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x17\n\nstart_time\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x65nd_time\x18\x03 \x01(\rH\x02\x88\x01\x01\x42\x13\n\x11_consolidate_feesB\r\n\x0b_start_timeB\x0b\n\t_end_time\"P\n\x16\x42kprlistincomeResponse\x12\x36\n\rincome_events\x18\x01 \x03(\x0b\x32\x1f.cln.BkprlistincomeIncomeEvents\"\xb4\x02\n\x1a\x42kprlistincomeIncomeEvents\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x0b\n\x03tag\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\r\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08outpoint\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04txid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\n \x01(\x0cH\x03\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_outpointB\x07\n\x05_txidB\r\n\x0b_payment_id\"P\n%BkpreditdescriptionbypaymentidRequest\x12\x12\n\npayment_id\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"e\n&BkpreditdescriptionbypaymentidResponse\x12;\n\x07updated\x18\x01 \x03(\x0b\x32*.cln.BkpreditdescriptionbypaymentidUpdated\"\xa3\x05\n%BkpreditdescriptionbypaymentidUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12g\n\titem_type\x18\x02 \x01(\x0e\x32T.cln.BkpreditdescriptionbypaymentidUpdated.BkpreditdescriptionbypaymentidUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"C\n)BkpreditdescriptionbypaymentidUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"M\n$BkpreditdescriptionbyoutpointRequest\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"c\n%BkpreditdescriptionbyoutpointResponse\x12:\n\x07updated\x18\x01 \x03(\x0b\x32).cln.BkpreditdescriptionbyoutpointUpdated\"\x9f\x05\n$BkpreditdescriptionbyoutpointUpdated\x12\x0f\n\x07\x61\x63\x63ount\x18\x01 \x01(\t\x12\x65\n\titem_type\x18\x02 \x01(\x0e\x32R.cln.BkpreditdescriptionbyoutpointUpdated.BkpreditdescriptionbyoutpointUpdatedType\x12\x0b\n\x03tag\x18\x03 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x10\n\x08\x63urrency\x18\x06 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\r\x12\x13\n\x0b\x64\x65scription\x18\x08 \x01(\t\x12\x15\n\x08outpoint\x18\t \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x62lockheight\x18\n \x01(\rH\x01\x88\x01\x01\x12\x13\n\x06origin\x18\x0b \x01(\tH\x02\x88\x01\x01\x12\x17\n\npayment_id\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12\x11\n\x04txid\x18\r \x01(\x0cH\x04\x88\x01\x01\x12#\n\tfees_msat\x18\x0e \x01(\x0b\x32\x0b.cln.AmountH\x05\x88\x01\x01\x12\x19\n\x0cis_rebalance\x18\x0f \x01(\x08H\x06\x88\x01\x01\x12\x14\n\x07part_id\x18\x10 \x01(\rH\x07\x88\x01\x01\"B\n(BkpreditdescriptionbyoutpointUpdatedType\x12\t\n\x05\x43HAIN\x10\x00\x12\x0b\n\x07\x43HANNEL\x10\x01\x42\x0b\n\t_outpointB\x0e\n\x0c_blockheightB\t\n\x07_originB\r\n\x0b_payment_idB\x07\n\x05_txidB\x0c\n\n_fees_msatB\x0f\n\r_is_rebalanceB\n\n\x08_part_id\"n\n\x14\x42lacklistruneRequest\x12\x12\n\x05start\x18\x01 \x01(\x04H\x00\x88\x01\x01\x12\x10\n\x03\x65nd\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06relist\x18\x03 \x01(\x08H\x02\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_endB\t\n\x07_relist\"G\n\x15\x42lacklistruneResponse\x12.\n\tblacklist\x18\x01 \x03(\x0b\x32\x1b.cln.BlacklistruneBlacklist\"4\n\x16\x42lacklistruneBlacklist\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04\"p\n\x10\x43heckruneRequest\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x13\n\x06nodeid\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x0e\n\x06params\x18\x04 \x03(\tB\t\n\x07_nodeidB\t\n\x07_method\"\"\n\x11\x43heckruneResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"E\n\x11\x43reateruneRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x0crestrictions\x18\x02 \x03(\tB\x07\n\x05_rune\"{\n\x12\x43reateruneResponse\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12&\n\x19warning_unrestricted_rune\x18\x03 \x01(\tH\x00\x88\x01\x01\x42\x1c\n\x1a_warning_unrestricted_rune\".\n\x10ShowrunesRequest\x12\x11\n\x04rune\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x07\n\x05_rune\"7\n\x11ShowrunesResponse\x12\"\n\x05runes\x18\x01 \x03(\x0b\x32\x13.cln.ShowrunesRunes\"\x9d\x02\n\x0eShowrunesRunes\x12\x0c\n\x04rune\x18\x01 \x01(\t\x12\x11\n\tunique_id\x18\x02 \x01(\t\x12\x35\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x1f.cln.ShowrunesRunesRestrictions\x12\x1f\n\x17restrictions_as_english\x18\x04 \x01(\t\x12\x13\n\x06stored\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x18\n\x0b\x62lacklisted\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x16\n\tlast_used\x18\x07 \x01(\x01H\x02\x88\x01\x01\x12\x15\n\x08our_rune\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\t\n\x07_storedB\x0e\n\x0c_blacklistedB\x0c\n\n_last_usedB\x0b\n\t_our_rune\"p\n\x1aShowrunesRunesRestrictions\x12\x41\n\x0c\x61lternatives\x18\x01 \x03(\x0b\x32+.cln.ShowrunesRunesRestrictionsAlternatives\x12\x0f\n\x07\x65nglish\x18\x02 \x01(\t\"n\n&ShowrunesRunesRestrictionsAlternatives\x12\x11\n\tfieldname\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x11\n\tcondition\x18\x03 \x01(\t\x12\x0f\n\x07\x65nglish\x18\x04 \x01(\t\"B\n\x17\x41skreneunreserveRequest\x12\'\n\x04path\x18\x01 \x03(\x0b\x32\x19.cln.AskreneunreservePath\"\x1a\n\x18\x41skreneunreserveResponse\"\x92\x01\n\x14\x41skreneunreservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14short_channel_id_dir\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05layer\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\x17\n\x15_short_channel_id_dirB\x08\n\x06_layer\"8\n\x18\x41skrenelistlayersRequest\x12\x12\n\x05layer\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_layer\"I\n\x19\x41skrenelistlayersResponse\x12,\n\x06layers\x18\x01 \x03(\x0b\x32\x1c.cln.AskrenelistlayersLayers\"\xbe\x03\n\x17\x41skrenelistlayersLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x16\n\x0e\x64isabled_nodes\x18\x02 \x03(\x0c\x12\x45\n\x10\x63reated_channels\x18\x03 \x03(\x0b\x32+.cln.AskrenelistlayersLayersCreatedChannels\x12<\n\x0b\x63onstraints\x18\x04 \x03(\x0b\x32\'.cln.AskrenelistlayersLayersConstraints\x12\x17\n\npersistent\x18\x05 \x01(\x08H\x00\x88\x01\x01\x12\x19\n\x11\x64isabled_channels\x18\x06 \x03(\t\x12\x43\n\x0f\x63hannel_updates\x18\x07 \x03(\x0b\x32*.cln.AskrenelistlayersLayersChannelUpdates\x12\x32\n\x06\x62iases\x18\x08 \x03(\x0b\x32\".cln.AskrenelistlayersLayersBiases\x12;\n\x0bnode_biases\x18\t \x03(\x0b\x32&.cln.AskrenelistlayersLayersNodeBiasesB\r\n\x0b_persistent\"\x8b\x01\n&AskrenelistlayersLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"\xa8\x03\n%AskrenelistlayersLayersChannelUpdates\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x06 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x07 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\xf8\x01\n\"AskrenelistlayersLayersConstraints\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12!\n\x14short_channel_id_dir\x18\x05 \x01(\tH\x02\x88\x01\x01\x12\x16\n\ttimestamp\x18\x06 \x01(\x04H\x03\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msatB\x17\n\x15_short_channel_id_dirB\x0c\n\n_timestamp\"\x9b\x01\n\x1d\x41skrenelistlayersLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\x91\x01\n!AskrenelistlayersLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"R\n\x19\x41skrenecreatelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x17\n\npersistent\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\r\n\x0b_persistent\"K\n\x1a\x41skrenecreatelayerResponse\x12-\n\x06layers\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenecreatelayerLayers\"\xb0\x03\n\x18\x41skrenecreatelayerLayers\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x12\n\npersistent\x18\x02 \x01(\x08\x12\x16\n\x0e\x64isabled_nodes\x18\x03 \x03(\x0c\x12\x19\n\x11\x64isabled_channels\x18\x04 \x03(\t\x12\x46\n\x10\x63reated_channels\x18\x05 \x03(\x0b\x32,.cln.AskrenecreatelayerLayersCreatedChannels\x12\x44\n\x0f\x63hannel_updates\x18\x06 \x03(\x0b\x32+.cln.AskrenecreatelayerLayersChannelUpdates\x12=\n\x0b\x63onstraints\x18\x07 \x03(\x0b\x32(.cln.AskrenecreatelayerLayersConstraints\x12\x33\n\x06\x62iases\x18\x08 \x03(\x0b\x32#.cln.AskrenecreatelayerLayersBiases\x12<\n\x0bnode_biases\x18\t \x03(\x0b\x32\'.cln.AskrenecreatelayerLayersNodeBiases\"\x8c\x01\n\'AskrenecreatelayerLayersCreatedChannels\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x03 \x01(\t\x12\"\n\rcapacity_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\"\xd1\x02\n&AskrenecreatelayerLayersChannelUpdates\x12+\n\x11htlc_minimum_msat\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x12\n\x05\x64\x65lay\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x08\n\x06_delay\"\xc4\x01\n#AskrenecreatelayerLayersConstraints\x12\x18\n\x10short_channel_id\x18\x01 \x01(\t\x12\x11\n\tdirection\x18\x02 \x01(\r\x12&\n\x0cmaximum_msat\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x9c\x01\n\x1e\x41skrenecreatelayerLayersBiases\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\x0c\n\x04\x62ias\x18\x02 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x04 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\x92\x01\n\"AskrenecreatelayerLayersNodeBiases\x12\x0c\n\x04node\x18\x01 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x02 \x01(\x12\x12\x10\n\x08out_bias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x42\x0e\n\x0c_description\"*\n\x19\x41skreneremovelayerRequest\x12\r\n\x05layer\x18\x01 \x01(\t\"\x1c\n\x1a\x41skreneremovelayerResponse\">\n\x15\x41skrenereserveRequest\x12%\n\x04path\x18\x01 \x03(\x0b\x32\x17.cln.AskrenereservePath\"\x18\n\x16\x41skrenereserveResponse\"\x90\x01\n\x12\x41skrenereservePath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12!\n\x14short_channel_id_dir\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x12\n\x05layer\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\x17\n\x15_short_channel_id_dirB\x08\n\x06_layer\"2\n\x11\x41skreneageRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06\x63utoff\x18\x02 \x01(\x04\"8\n\x12\x41skreneageResponse\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x13\n\x0bnum_removed\x18\x02 \x01(\x04\"\xfb\x01\n\x10GetroutesRequest\x12\x0e\n\x06source\x18\x01 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12 \n\x0bmaxfee_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\x12\x17\n\nfinal_cltv\x18\x07 \x01(\rH\x00\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x08 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08maxparts\x18\t \x01(\rH\x02\x88\x01\x01\x42\r\n\x0b_final_cltvB\x0b\n\t_maxdelayB\x0b\n\t_maxparts\"R\n\x11GetroutesResponse\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12$\n\x06routes\x18\x02 \x03(\x0b\x32\x14.cln.GetroutesRoutes\"\x9c\x01\n\x0fGetroutesRoutes\x12\x17\n\x0fprobability_ppm\x18\x01 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12&\n\x04path\x18\x03 \x03(\x0b\x32\x18.cln.GetroutesRoutesPath\x12\x17\n\nfinal_cltv\x18\x04 \x01(\rH\x00\x88\x01\x01\x42\r\n\x0b_final_cltv\"\x98\x01\n\x13GetroutesRoutesPath\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0cnext_node_id\x18\x04 \x01(\x0c\x12\r\n\x05\x64\x65lay\x18\x05 \x01(\r\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x00\x88\x01\x01\x42\x17\n\x15_short_channel_id_dir\"8\n\x19\x41skrenedisablenodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\"\x1c\n\x1a\x41skrenedisablenodeResponse\"\xcd\x02\n\x1b\x41skreneinformchannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12!\n\x14short_channel_id_dir\x18\x06 \x01(\tH\x00\x88\x01\x01\x12%\n\x0b\x61mount_msat\x18\x07 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12P\n\x06inform\x18\x08 \x01(\x0e\x32;.cln.AskreneinformchannelRequest.AskreneinformchannelInformH\x02\x88\x01\x01\"O\n\x1a\x41skreneinformchannelInform\x12\x0f\n\x0b\x43ONSTRAINED\x10\x00\x12\x11\n\rUNCONSTRAINED\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x42\x17\n\x15_short_channel_id_dirB\x0e\n\x0c_amount_msatB\t\n\x07_inform\"Y\n\x1c\x41skreneinformchannelResponse\x12\x39\n\x0b\x63onstraints\x18\x02 \x03(\x0b\x32$.cln.AskreneinformchannelConstraints\"\xd3\x01\n\x1f\x41skreneinformchannelConstraints\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12\r\n\x05layer\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12&\n\x0cmaximum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12&\n\x0cminimum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x42\x0f\n\r_maximum_msatB\x0f\n\r_minimum_msat\"\x8f\x01\n\x1b\x41skrenecreatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0e\n\x06source\x18\x02 \x01(\x0c\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x04 \x01(\t\x12\"\n\rcapacity_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"\x1e\n\x1c\x41skrenecreatechannelResponse\"\xad\x03\n\x1b\x41skreneupdatechannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x14\n\x07\x65nabled\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12+\n\x11htlc_minimum_msat\x18\x04 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12+\n\x11htlc_maximum_msat\x18\x05 \x01(\x0b\x32\x0b.cln.AmountH\x02\x88\x01\x01\x12\'\n\rfee_base_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12(\n\x1b\x66\x65\x65_proportional_millionths\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x1e\n\x11\x63ltv_expiry_delta\x18\x08 \x01(\rH\x05\x88\x01\x01\x42\n\n\x08_enabledB\x14\n\x12_htlc_minimum_msatB\x14\n\x12_htlc_maximum_msatB\x10\n\x0e_fee_base_msatB\x1e\n\x1c_fee_proportional_millionthsB\x14\n\x12_cltv_expiry_delta\"\x1e\n\x1c\x41skreneupdatechannelResponse\"\xa4\x01\n\x19\x41skrenebiaschannelRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x05 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"K\n\x1a\x41skrenebiaschannelResponse\x12-\n\x06\x62iases\x18\x01 \x03(\x0b\x32\x1d.cln.AskrenebiaschannelBiases\"\xa5\x01\n\x18\x41skrenebiaschannelBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x1c\n\x14short_channel_id_dir\x18\x02 \x01(\t\x12\x0c\n\x04\x62ias\x18\x03 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x16\n\ttimestamp\x18\x05 \x01(\x04H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0c\n\n_timestamp\"\xa4\x01\n\x16\x41skrenebiasnodeRequest\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x11\n\tdirection\x18\x03 \x01(\t\x12\x0c\n\x04\x62ias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08relative\x18\x06 \x01(\x08H\x01\x88\x01\x01\x42\x0e\n\x0c_descriptionB\x0b\n\t_relative\"N\n\x17\x41skrenebiasnodeResponse\x12\x33\n\x0bnode_biases\x18\x01 \x03(\x0b\x32\x1e.cln.AskrenebiasnodeNodeBiases\"\x98\x01\n\x19\x41skrenebiasnodeNodeBiases\x12\r\n\x05layer\x18\x01 \x01(\t\x12\x0c\n\x04node\x18\x02 \x01(\x0c\x12\x0f\n\x07in_bias\x18\x03 \x01(\x12\x12\x10\n\x08out_bias\x18\x04 \x01(\x12\x12\x18\n\x0b\x64\x65scription\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x06 \x01(\x04\x42\x0e\n\x0c_description\" \n\x1e\x41skrenelistreservationsRequest\"a\n\x1f\x41skrenelistreservationsResponse\x12>\n\x0creservations\x18\x01 \x03(\x0b\x32(.cln.AskrenelistreservationsReservations\"\x91\x01\n#AskrenelistreservationsReservations\x12\x1c\n\x14short_channel_id_dir\x18\x01 \x01(\t\x12 \n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x16\n\x0e\x61ge_in_seconds\x18\x03 \x01(\x04\x12\x12\n\ncommand_id\x18\x04 \x01(\t\"\xcb\x02\n\x19InjectpaymentonionRequest\x12\r\n\x05onion\x18\x01 \x01(\x0c\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\x0c\x12 \n\x0b\x61mount_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x13\n\x0b\x63ltv_expiry\x18\x04 \x01(\r\x12\x0e\n\x06partid\x18\x05 \x01(\x04\x12\x0f\n\x07groupid\x18\x06 \x01(\x04\x12\x12\n\x05label\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tinvstring\x18\x08 \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rlocalinvreqid\x18\t \x01(\x0cH\x02\x88\x01\x01\x12*\n\x10\x64\x65stination_msat\x18\n \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x42\x08\n\x06_labelB\x0c\n\n_invstringB\x10\n\x0e_localinvreqidB\x13\n\x11_destination_msat\"w\n\x1aInjectpaymentonionResponse\x12\x12\n\ncreated_at\x18\x01 \x01(\x04\x12\x14\n\x0c\x63ompleted_at\x18\x02 \x01(\x04\x12\x15\n\rcreated_index\x18\x03 \x01(\x04\x12\x18\n\x10payment_preimage\x18\x04 \x01(\x0c\">\n\x19InjectonionmessageRequest\x12\x10\n\x08path_key\x18\x01 \x01(\x0c\x12\x0f\n\x07message\x18\x02 \x01(\x0c\"\x1c\n\x1aInjectonionmessageResponse\"\xbf\x02\n\x0bXpayRequest\x12\x11\n\tinvstring\x18\x01 \x01(\t\x12%\n\x0b\x61mount_msat\x18\x02 \x01(\x0b\x32\x0b.cln.AmountH\x00\x88\x01\x01\x12 \n\x06maxfee\x18\x03 \x01(\x0b\x32\x0b.cln.AmountH\x01\x88\x01\x01\x12\x0e\n\x06layers\x18\x04 \x03(\t\x12\x16\n\tretry_for\x18\x05 \x01(\rH\x02\x88\x01\x01\x12&\n\x0cpartial_msat\x18\x06 \x01(\x0b\x32\x0b.cln.AmountH\x03\x88\x01\x01\x12\x15\n\x08maxdelay\x18\x07 \x01(\rH\x04\x88\x01\x01\x12\x17\n\npayer_note\x18\x08 \x01(\tH\x05\x88\x01\x01\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelayB\r\n\x0b_payer_note\"\xa1\x01\n\x0cXpayResponse\x12\x18\n\x10payment_preimage\x18\x01 \x01(\x0c\x12\x14\n\x0c\x66\x61iled_parts\x18\x02 \x01(\x04\x12\x18\n\x10successful_parts\x18\x03 \x01(\x04\x12 \n\x0b\x61mount_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12%\n\x10\x61mount_sent_msat\x18\x05 \x01(\x0b\x32\x0b.cln.Amount\"=\n\x19SignmessagewithkeyRequest\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\"`\n\x1aSignmessagewithkeyResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x0e\n\x06pubkey\x18\x02 \x01(\x0c\x12\x11\n\tsignature\x18\x03 \x01(\x0c\x12\x0e\n\x06\x62\x61se64\x18\x04 \x01(\t\"\xcd\x01\n\x17ListchannelmovesRequest\x12\x46\n\x05index\x18\x01 \x01(\x0e\x32\x32.cln.ListchannelmovesRequest.ListchannelmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"$\n\x15ListchannelmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"S\n\x18ListchannelmovesResponse\x12\x37\n\x0c\x63hannelmoves\x18\x01 \x03(\x0b\x32!.cln.ListchannelmovesChannelmoves\"\xa9\x04\n\x1cListchannelmovesChannelmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12]\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32H.cln.ListchannelmovesChannelmoves.ListchannelmovesChannelmovesPrimaryTag\x12\x19\n\x0cpayment_hash\x18\x07 \x01(\x0cH\x00\x88\x01\x01\x12\x14\n\x07part_id\x18\x08 \x01(\x04H\x01\x88\x01\x01\x12\x15\n\x08group_id\x18\t \x01(\x04H\x02\x88\x01\x01\x12\x1e\n\tfees_msat\x18\n \x01(\x0b\x32\x0b.cln.Amount\"\x96\x01\n&ListchannelmovesChannelmovesPrimaryTag\x12\x0b\n\x07INVOICE\x10\x00\x12\n\n\x06ROUTED\x10\x01\x12\n\n\x06PUSHED\x10\x02\x12\r\n\tLEASE_FEE\x10\x03\x12\x14\n\x10\x43HANNEL_PROPOSED\x10\x04\x12\x0f\n\x0bPENALTY_ADJ\x10\x05\x12\x11\n\rJOURNAL_ENTRY\x10\x06\x42\x0f\n\r_payment_hashB\n\n\x08_part_idB\x0b\n\t_group_id\"\xc5\x01\n\x15ListchainmovesRequest\x12\x42\n\x05index\x18\x01 \x01(\x0e\x32..cln.ListchainmovesRequest.ListchainmovesIndexH\x00\x88\x01\x01\x12\x12\n\x05start\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x03 \x01(\rH\x02\x88\x01\x01\"\"\n\x13ListchainmovesIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"K\n\x16ListchainmovesResponse\x12\x31\n\nchainmoves\x18\x01 \x03(\x0b\x32\x1d.cln.ListchainmovesChainmoves\"\xd4\x06\n\x18ListchainmovesChainmoves\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x12\n\naccount_id\x18\x02 \x01(\t\x12 \n\x0b\x63redit_msat\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x1f\n\ndebit_msat\x18\x04 \x01(\x0b\x32\x0b.cln.Amount\x12\x11\n\ttimestamp\x18\x05 \x01(\x04\x12U\n\x0bprimary_tag\x18\x06 \x01(\x0e\x32@.cln.ListchainmovesChainmoves.ListchainmovesChainmovesPrimaryTag\x12\x14\n\x07peer_id\x18\x08 \x01(\x0cH\x00\x88\x01\x01\x12 \n\x13originating_account\x18\t \x01(\tH\x01\x88\x01\x01\x12\x1a\n\rspending_txid\x18\n \x01(\x0cH\x02\x88\x01\x01\x12\x1b\n\x04utxo\x18\x0b \x01(\x0b\x32\r.cln.Outpoint\x12\x19\n\x0cpayment_hash\x18\x0c \x01(\x0cH\x03\x88\x01\x01\x12 \n\x0boutput_msat\x18\r \x01(\x0b\x32\x0b.cln.Amount\x12\x19\n\x0coutput_count\x18\x0e \x01(\rH\x04\x88\x01\x01\x12\x13\n\x0b\x62lockheight\x18\x0f \x01(\r\x12\x12\n\nextra_tags\x18\x10 \x03(\t\"\x95\x02\n\"ListchainmovesChainmovesPrimaryTag\x12\x0b\n\x07\x44\x45POSIT\x10\x00\x12\x0e\n\nWITHDRAWAL\x10\x01\x12\x0b\n\x07PENALTY\x10\x02\x12\x10\n\x0c\x43HANNEL_OPEN\x10\x03\x12\x11\n\rCHANNEL_CLOSE\x10\x04\x12\x11\n\rDELAYED_TO_US\x10\x05\x12\x0b\n\x07HTLC_TX\x10\x06\x12\x10\n\x0cHTLC_TIMEOUT\x10\x07\x12\x10\n\x0cHTLC_FULFILL\x10\x08\x12\r\n\tTO_WALLET\x10\t\x12\n\n\x06\x41NCHOR\x10\n\x12\x0b\n\x07TO_THEM\x10\x0b\x12\r\n\tPENALIZED\x10\x0c\x12\n\n\x06STOLEN\x10\r\x12\x0b\n\x07IGNORED\x10\x0e\x12\x0c\n\x08TO_MINER\x10\x0f\x42\n\n\x08_peer_idB\x16\n\x14_originating_accountB\x10\n\x0e_spending_txidB\x0f\n\r_payment_hashB\x0f\n\r_output_count\"\xe9\x01\n\x18ListnetworkeventsRequest\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12H\n\x05index\x18\x02 \x01(\x0e\x32\x34.cln.ListnetworkeventsRequest.ListnetworkeventsIndexH\x01\x88\x01\x01\x12\x12\n\x05start\x18\x03 \x01(\x04H\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\rH\x03\x88\x01\x01\"%\n\x16ListnetworkeventsIndex\x12\x0b\n\x07\x43REATED\x10\x00\x42\x05\n\x03_idB\x08\n\x06_indexB\x08\n\x06_startB\x08\n\x06_limit\"W\n\x19ListnetworkeventsResponse\x12:\n\rnetworkevents\x18\x01 \x03(\x0b\x32#.cln.ListnetworkeventsNetworkevents\"\xf2\x01\n\x1eListnetworkeventsNetworkevents\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x0f\n\x07peer_id\x18\x03 \x01(\x0c\x12\x11\n\titem_type\x18\x04 \x01(\t\x12\x13\n\x06reason\x18\x05 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rduration_nsec\x18\x06 \x01(\x04H\x01\x88\x01\x01\x12\x1e\n\x11\x63onnect_attempted\x18\x07 \x01(\x08H\x02\x88\x01\x01\x42\t\n\x07_reasonB\x10\n\x0e_duration_nsecB\x14\n\x12_connect_attempted\"/\n\x16\x44\x65lnetworkeventRequest\x12\x15\n\rcreated_index\x18\x01 \x01(\x04\"\x19\n\x17\x44\x65lnetworkeventResponse\"\xf6\x01\n\x1a\x43lnrestregisterpathRequest\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x12\n\nrpc_method\x18\x02 \x01(\t\x12H\n\x11rune_restrictions\x18\x03 \x01(\x0b\x32(.cln.ClnrestregisterpathRuneRestrictionsH\x00\x88\x01\x01\x12\x1a\n\rrune_required\x18\x04 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0bhttp_method\x18\x05 \x01(\tH\x02\x88\x01\x01\x42\x14\n\x12_rune_restrictionsB\x10\n\x0e_rune_requiredB\x0e\n\x0c_http_method\"\x1d\n\x1b\x43lnrestregisterpathResponse\"\xda\x01\n#ClnrestregisterpathRuneRestrictions\x12\x13\n\x06nodeid\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06method\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x44\n\x06params\x18\x03 \x03(\x0b\x32\x34.cln.ClnrestregisterpathRuneRestrictions.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_nodeidB\t\n\x07_method\"\x19\n\x17StreamBlockAddedRequest\"6\n\x16\x42lockAddedNotification\x12\x0c\n\x04hash\x18\x01 \x01(\x0c\x12\x0e\n\x06height\x18\x02 \x01(\r\" \n\x1eStreamChannelOpenFailedRequest\"3\n\x1d\x43hannelOpenFailedNotification\x12\x12\n\nchannel_id\x18\x01 \x01(\x0c\"\x1c\n\x1aStreamChannelOpenedRequest\"w\n\x19\x43hannelOpenedNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12!\n\x0c\x66unding_msat\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\x12\x14\n\x0c\x66unding_txid\x18\x03 \x01(\x0c\x12\x15\n\rchannel_ready\x18\x04 \x01(\x08\"\x16\n\x14StreamConnectRequest\"\xbe\x01\n\x17PeerConnectNotification\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x44\n\tdirection\x18\x02 \x01(\x0e\x32\x31.cln.PeerConnectNotification.PeerConnectDirection\x12(\n\x07\x61\x64\x64ress\x18\x03 \x01(\x0b\x32\x17.cln.PeerConnectAddress\"\'\n\x14PeerConnectDirection\x12\x06\n\x02IN\x10\x00\x12\x07\n\x03OUT\x10\x01\"\x9a\x02\n\x12PeerConnectAddress\x12\x41\n\titem_type\x18\x01 \x01(\x0e\x32..cln.PeerConnectAddress.PeerConnectAddressType\x12\x13\n\x06socket\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07\x61\x64\x64ress\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x11\n\x04port\x18\x04 \x01(\rH\x02\x88\x01\x01\"c\n\x16PeerConnectAddressType\x12\x10\n\x0cLOCAL_SOCKET\x10\x00\x12\x08\n\x04IPV4\x10\x01\x12\x08\n\x04IPV6\x10\x02\x12\t\n\x05TORV2\x10\x03\x12\t\n\x05TORV3\x10\x04\x12\r\n\tWEBSOCKET\x10\x05\x42\t\n\x07_socketB\n\n\x08_addressB\x07\n\x05_port\"\x18\n\x16StreamCustomMsgRequest\"9\n\x15\x43ustomMsgNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"\"\n StreamChannelStateChangedRequest\"\xc1\x03\n\x1f\x43hannelStateChangedNotification\x12\x0f\n\x07peer_id\x18\x01 \x01(\x0c\x12\x12\n\nchannel_id\x18\x02 \x01(\x0c\x12\x1d\n\x10short_channel_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\t\x12)\n\told_state\x18\x05 \x01(\x0e\x32\x11.cln.ChannelStateH\x01\x88\x01\x01\x12$\n\tnew_state\x18\x06 \x01(\x0e\x32\x11.cln.ChannelState\x12L\n\x05\x63\x61use\x18\x07 \x01(\x0e\x32=.cln.ChannelStateChangedNotification.ChannelStateChangedCause\x12\x14\n\x07message\x18\x08 \x01(\tH\x02\x88\x01\x01\"c\n\x18\x43hannelStateChangedCause\x12\x0b\n\x07UNKNOWN\x10\x00\x12\t\n\x05LOCAL\x10\x01\x12\x08\n\x04USER\x10\x02\x12\n\n\x06REMOTE\x10\x03\x12\x0c\n\x08PROTOCOL\x10\x04\x12\x0b\n\x07ONCHAIN\x10\x05\x42\x13\n\x11_short_channel_idB\x0c\n\n_old_stateB\n\n\x08_message2\x82U\n\x04Node\x12\x36\n\x07Getinfo\x12\x13.cln.GetinfoRequest\x1a\x14.cln.GetinfoResponse\"\x00\x12<\n\tListPeers\x12\x15.cln.ListpeersRequest\x1a\x16.cln.ListpeersResponse\"\x00\x12<\n\tListFunds\x12\x15.cln.ListfundsRequest\x1a\x16.cln.ListfundsResponse\"\x00\x12\x36\n\x07SendPay\x12\x13.cln.SendpayRequest\x1a\x14.cln.SendpayResponse\"\x00\x12\x45\n\x0cListChannels\x12\x18.cln.ListchannelsRequest\x1a\x19.cln.ListchannelsResponse\"\x00\x12<\n\tAddGossip\x12\x15.cln.AddgossipRequest\x1a\x16.cln.AddgossipResponse\"\x00\x12H\n\rAddPsbtOutput\x12\x19.cln.AddpsbtoutputRequest\x1a\x1a.cln.AddpsbtoutputResponse\"\x00\x12H\n\rAutoCleanOnce\x12\x19.cln.AutocleanonceRequest\x1a\x1a.cln.AutocleanonceResponse\"\x00\x12N\n\x0f\x41utoCleanStatus\x12\x1b.cln.AutocleanstatusRequest\x1a\x1c.cln.AutocleanstatusResponse\"\x00\x12\x45\n\x0c\x43heckMessage\x12\x18.cln.CheckmessageRequest\x1a\x19.cln.CheckmessageResponse\"\x00\x12\x30\n\x05\x43lose\x12\x11.cln.CloseRequest\x1a\x12.cln.CloseResponse\"\x00\x12:\n\x0b\x43onnectPeer\x12\x13.cln.ConnectRequest\x1a\x14.cln.ConnectResponse\"\x00\x12H\n\rCreateInvoice\x12\x19.cln.CreateinvoiceRequest\x1a\x1a.cln.CreateinvoiceResponse\"\x00\x12<\n\tDatastore\x12\x15.cln.DatastoreRequest\x1a\x16.cln.DatastoreResponse\"\x00\x12K\n\x0e\x44\x61tastoreUsage\x12\x1a.cln.DatastoreusageRequest\x1a\x1b.cln.DatastoreusageResponse\"\x00\x12\x42\n\x0b\x43reateOnion\x12\x17.cln.CreateonionRequest\x1a\x18.cln.CreateonionResponse\"\x00\x12\x45\n\x0c\x44\x65lDatastore\x12\x18.cln.DeldatastoreRequest\x1a\x19.cln.DeldatastoreResponse\"\x00\x12?\n\nDelInvoice\x12\x16.cln.DelinvoiceRequest\x1a\x17.cln.DelinvoiceResponse\"\x00\x12Q\n\x10\x44\x65vForgetChannel\x12\x1c.cln.DevforgetchannelRequest\x1a\x1d.cln.DevforgetchannelResponse\"\x00\x12Q\n\x10\x45mergencyRecover\x12\x1c.cln.EmergencyrecoverRequest\x1a\x1d.cln.EmergencyrecoverResponse\"\x00\x12\x66\n\x17GetEmergencyRecoverData\x12#.cln.GetemergencyrecoverdataRequest\x1a$.cln.GetemergencyrecoverdataResponse\"\x00\x12\x45\n\x0c\x45xposeSecret\x12\x18.cln.ExposesecretRequest\x1a\x19.cln.ExposesecretResponse\"\x00\x12\x36\n\x07Recover\x12\x13.cln.RecoverRequest\x1a\x14.cln.RecoverResponse\"\x00\x12K\n\x0eRecoverChannel\x12\x1a.cln.RecoverchannelRequest\x1a\x1b.cln.RecoverchannelResponse\"\x00\x12\x36\n\x07Invoice\x12\x13.cln.InvoiceRequest\x1a\x14.cln.InvoiceResponse\"\x00\x12Q\n\x14\x43reateInvoiceRequest\x12\x1a.cln.InvoicerequestRequest\x1a\x1b.cln.InvoicerequestResponse\"\x00\x12`\n\x15\x44isableInvoiceRequest\x12!.cln.DisableinvoicerequestRequest\x1a\".cln.DisableinvoicerequestResponse\"\x00\x12Z\n\x13ListInvoiceRequests\x12\x1f.cln.ListinvoicerequestsRequest\x1a .cln.ListinvoicerequestsResponse\"\x00\x12H\n\rListDatastore\x12\x19.cln.ListdatastoreRequest\x1a\x1a.cln.ListdatastoreResponse\"\x00\x12\x45\n\x0cListInvoices\x12\x18.cln.ListinvoicesRequest\x1a\x19.cln.ListinvoicesResponse\"\x00\x12<\n\tSendOnion\x12\x15.cln.SendonionRequest\x1a\x16.cln.SendonionResponse\"\x00\x12\x45\n\x0cListSendPays\x12\x18.cln.ListsendpaysRequest\x1a\x19.cln.ListsendpaysResponse\"\x00\x12Q\n\x10ListTransactions\x12\x1c.cln.ListtransactionsRequest\x1a\x1d.cln.ListtransactionsResponse\"\x00\x12?\n\nMakeSecret\x12\x16.cln.MakesecretRequest\x1a\x17.cln.MakesecretResponse\"\x00\x12*\n\x03Pay\x12\x0f.cln.PayRequest\x1a\x10.cln.PayResponse\"\x00\x12<\n\tListNodes\x12\x15.cln.ListnodesRequest\x1a\x16.cln.ListnodesResponse\"\x00\x12K\n\x0eWaitAnyInvoice\x12\x1a.cln.WaitanyinvoiceRequest\x1a\x1b.cln.WaitanyinvoiceResponse\"\x00\x12\x42\n\x0bWaitInvoice\x12\x17.cln.WaitinvoiceRequest\x1a\x18.cln.WaitinvoiceResponse\"\x00\x12\x42\n\x0bWaitSendPay\x12\x17.cln.WaitsendpayRequest\x1a\x18.cln.WaitsendpayResponse\"\x00\x12\x36\n\x07NewAddr\x12\x13.cln.NewaddrRequest\x1a\x14.cln.NewaddrResponse\"\x00\x12\x39\n\x08Withdraw\x12\x14.cln.WithdrawRequest\x1a\x15.cln.WithdrawResponse\"\x00\x12\x36\n\x07KeySend\x12\x13.cln.KeysendRequest\x1a\x14.cln.KeysendResponse\"\x00\x12\x39\n\x08\x46undPsbt\x12\x14.cln.FundpsbtRequest\x1a\x15.cln.FundpsbtResponse\"\x00\x12\x39\n\x08SendPsbt\x12\x14.cln.SendpsbtRequest\x1a\x15.cln.SendpsbtResponse\"\x00\x12\x39\n\x08SignPsbt\x12\x14.cln.SignpsbtRequest\x1a\x15.cln.SignpsbtResponse\"\x00\x12\x39\n\x08UtxoPsbt\x12\x14.cln.UtxopsbtRequest\x1a\x15.cln.UtxopsbtResponse\"\x00\x12<\n\tTxDiscard\x12\x15.cln.TxdiscardRequest\x1a\x16.cln.TxdiscardResponse\"\x00\x12<\n\tTxPrepare\x12\x15.cln.TxprepareRequest\x1a\x16.cln.TxprepareResponse\"\x00\x12\x33\n\x06TxSend\x12\x12.cln.TxsendRequest\x1a\x13.cln.TxsendResponse\"\x00\x12Q\n\x10ListPeerChannels\x12\x1c.cln.ListpeerchannelsRequest\x1a\x1d.cln.ListpeerchannelsResponse\"\x00\x12W\n\x12ListClosedChannels\x12\x1e.cln.ListclosedchannelsRequest\x1a\x1f.cln.ListclosedchannelsResponse\"\x00\x12\x33\n\x06\x44\x65\x63ode\x12\x12.cln.DecodeRequest\x1a\x13.cln.DecodeResponse\"\x00\x12\x33\n\x06\x44\x65lPay\x12\x12.cln.DelpayRequest\x1a\x13.cln.DelpayResponse\"\x00\x12?\n\nDelForward\x12\x16.cln.DelforwardRequest\x1a\x17.cln.DelforwardResponse\"\x00\x12\x45\n\x0c\x44isableOffer\x12\x18.cln.DisableofferRequest\x1a\x19.cln.DisableofferResponse\"\x00\x12\x42\n\x0b\x45nableOffer\x12\x17.cln.EnableofferRequest\x1a\x18.cln.EnableofferResponse\"\x00\x12?\n\nDisconnect\x12\x16.cln.DisconnectRequest\x1a\x17.cln.DisconnectResponse\"\x00\x12\x39\n\x08\x46\x65\x65rates\x12\x14.cln.FeeratesRequest\x1a\x15.cln.FeeratesResponse\"\x00\x12\x42\n\x0b\x46\x65tchBip353\x12\x17.cln.Fetchbip353Request\x1a\x18.cln.Fetchbip353Response\"\x00\x12\x45\n\x0c\x46\x65tchInvoice\x12\x18.cln.FetchinvoiceRequest\x1a\x19.cln.FetchinvoiceResponse\"\x00\x12\x63\n\x16\x43\x61ncelRecurringInvoice\x12\".cln.CancelrecurringinvoiceRequest\x1a#.cln.CancelrecurringinvoiceResponse\"\x00\x12T\n\x11\x46undChannelCancel\x12\x1d.cln.FundchannelCancelRequest\x1a\x1e.cln.FundchannelCancelResponse\"\x00\x12Z\n\x13\x46undChannelComplete\x12\x1f.cln.FundchannelCompleteRequest\x1a .cln.FundchannelCompleteResponse\"\x00\x12\x42\n\x0b\x46undChannel\x12\x17.cln.FundchannelRequest\x1a\x18.cln.FundchannelResponse\"\x00\x12Q\n\x10\x46undChannelStart\x12\x1c.cln.FundchannelStartRequest\x1a\x1d.cln.FundchannelStartResponse\"\x00\x12\x33\n\x06GetLog\x12\x12.cln.GetlogRequest\x1a\x13.cln.GetlogResponse\"\x00\x12\x45\n\x0c\x46underUpdate\x12\x18.cln.FunderupdateRequest\x1a\x19.cln.FunderupdateResponse\"\x00\x12\x39\n\x08GetRoute\x12\x14.cln.GetrouteRequest\x1a\x15.cln.GetrouteResponse\"\x00\x12H\n\rListAddresses\x12\x19.cln.ListaddressesRequest\x1a\x1a.cln.ListaddressesResponse\"\x00\x12\x45\n\x0cListForwards\x12\x18.cln.ListforwardsRequest\x1a\x19.cln.ListforwardsResponse\"\x00\x12?\n\nListOffers\x12\x16.cln.ListoffersRequest\x1a\x17.cln.ListoffersResponse\"\x00\x12\x39\n\x08ListPays\x12\x14.cln.ListpaysRequest\x1a\x15.cln.ListpaysResponse\"\x00\x12<\n\tListHtlcs\x12\x15.cln.ListhtlcsRequest\x1a\x16.cln.ListhtlcsResponse\"\x00\x12Q\n\x10MultiFundChannel\x12\x1c.cln.MultifundchannelRequest\x1a\x1d.cln.MultifundchannelResponse\"\x00\x12H\n\rMultiWithdraw\x12\x19.cln.MultiwithdrawRequest\x1a\x1a.cln.MultiwithdrawResponse\"\x00\x12\x30\n\x05Offer\x12\x11.cln.OfferRequest\x1a\x12.cln.OfferResponse\"\x00\x12Q\n\x10OpenChannelAbort\x12\x1c.cln.OpenchannelAbortRequest\x1a\x1d.cln.OpenchannelAbortResponse\"\x00\x12N\n\x0fOpenChannelBump\x12\x1b.cln.OpenchannelBumpRequest\x1a\x1c.cln.OpenchannelBumpResponse\"\x00\x12N\n\x0fOpenChannelInit\x12\x1b.cln.OpenchannelInitRequest\x1a\x1c.cln.OpenchannelInitResponse\"\x00\x12T\n\x11OpenChannelSigned\x12\x1d.cln.OpenchannelSignedRequest\x1a\x1e.cln.OpenchannelSignedResponse\"\x00\x12T\n\x11OpenChannelUpdate\x12\x1d.cln.OpenchannelUpdateRequest\x1a\x1e.cln.OpenchannelUpdateResponse\"\x00\x12-\n\x04Ping\x12\x10.cln.PingRequest\x1a\x11.cln.PingResponse\"\x00\x12\x33\n\x06Plugin\x12\x12.cln.PluginRequest\x1a\x13.cln.PluginResponse\"\x00\x12H\n\rRenePayStatus\x12\x19.cln.RenepaystatusRequest\x1a\x1a.cln.RenepaystatusResponse\"\x00\x12\x36\n\x07RenePay\x12\x13.cln.RenepayRequest\x1a\x14.cln.RenepayResponse\"\x00\x12H\n\rReserveInputs\x12\x19.cln.ReserveinputsRequest\x1a\x1a.cln.ReserveinputsResponse\"\x00\x12H\n\rSendCustomMsg\x12\x19.cln.SendcustommsgRequest\x1a\x1a.cln.SendcustommsgResponse\"\x00\x12\x42\n\x0bSendInvoice\x12\x17.cln.SendinvoiceRequest\x1a\x18.cln.SendinvoiceResponse\"\x00\x12?\n\nSetChannel\x12\x16.cln.SetchannelRequest\x1a\x17.cln.SetchannelResponse\"\x00\x12<\n\tSetConfig\x12\x15.cln.SetconfigRequest\x1a\x16.cln.SetconfigResponse\"\x00\x12K\n\x0eSetPsbtVersion\x12\x1a.cln.SetpsbtversionRequest\x1a\x1b.cln.SetpsbtversionResponse\"\x00\x12\x42\n\x0bSignInvoice\x12\x17.cln.SigninvoiceRequest\x1a\x18.cln.SigninvoiceResponse\"\x00\x12\x42\n\x0bSignMessage\x12\x17.cln.SignmessageRequest\x1a\x18.cln.SignmessageResponse\"\x00\x12?\n\nSpliceInit\x12\x16.cln.SpliceInitRequest\x1a\x17.cln.SpliceInitResponse\"\x00\x12\x45\n\x0cSpliceSigned\x12\x18.cln.SpliceSignedRequest\x1a\x19.cln.SpliceSignedResponse\"\x00\x12\x45\n\x0cSpliceUpdate\x12\x18.cln.SpliceUpdateRequest\x1a\x19.cln.SpliceUpdateResponse\"\x00\x12<\n\tDevSplice\x12\x15.cln.DevspliceRequest\x1a\x16.cln.DevspliceResponse\"\x00\x12N\n\x0fUnreserveInputs\x12\x1b.cln.UnreserveinputsRequest\x1a\x1c.cln.UnreserveinputsResponse\"\x00\x12H\n\rUpgradeWallet\x12\x19.cln.UpgradewalletRequest\x1a\x1a.cln.UpgradewalletResponse\"\x00\x12N\n\x0fWaitBlockHeight\x12\x1b.cln.WaitblockheightRequest\x1a\x1c.cln.WaitblockheightResponse\"\x00\x12-\n\x04Wait\x12\x10.cln.WaitRequest\x1a\x11.cln.WaitResponse\"\x00\x12\x42\n\x0bListConfigs\x12\x17.cln.ListconfigsRequest\x1a\x18.cln.ListconfigsResponse\"\x00\x12-\n\x04Stop\x12\x10.cln.StopRequest\x1a\x11.cln.StopResponse\"\x00\x12-\n\x04Help\x12\x10.cln.HelpRequest\x1a\x11.cln.HelpResponse\"\x00\x12T\n\x11PreApproveKeysend\x12\x1d.cln.PreapprovekeysendRequest\x1a\x1e.cln.PreapprovekeysendResponse\"\x00\x12T\n\x11PreApproveInvoice\x12\x1d.cln.PreapproveinvoiceRequest\x1a\x1e.cln.PreapproveinvoiceResponse\"\x00\x12\x45\n\x0cStaticBackup\x12\x18.cln.StaticbackupRequest\x1a\x19.cln.StaticbackupResponse\"\x00\x12N\n\x0f\x42kprChannelsApy\x12\x1b.cln.BkprchannelsapyRequest\x1a\x1c.cln.BkprchannelsapyResponse\"\x00\x12T\n\x11\x42kprDumpIncomeCsv\x12\x1d.cln.BkprdumpincomecsvRequest\x1a\x1e.cln.BkprdumpincomecsvResponse\"\x00\x12\x42\n\x0b\x42kprInspect\x12\x17.cln.BkprinspectRequest\x1a\x18.cln.BkprinspectResponse\"\x00\x12`\n\x15\x42kprListAccountEvents\x12!.cln.BkprlistaccounteventsRequest\x1a\".cln.BkprlistaccounteventsResponse\"\x00\x12Q\n\x10\x42kprListBalances\x12\x1c.cln.BkprlistbalancesRequest\x1a\x1d.cln.BkprlistbalancesResponse\"\x00\x12K\n\x0e\x42kprListIncome\x12\x1a.cln.BkprlistincomeRequest\x1a\x1b.cln.BkprlistincomeResponse\"\x00\x12{\n\x1e\x42kprEditDescriptionByPaymentId\x12*.cln.BkpreditdescriptionbypaymentidRequest\x1a+.cln.BkpreditdescriptionbypaymentidResponse\"\x00\x12x\n\x1d\x42kprEditDescriptionByOutpoint\x12).cln.BkpreditdescriptionbyoutpointRequest\x1a*.cln.BkpreditdescriptionbyoutpointResponse\"\x00\x12H\n\rBlacklistRune\x12\x19.cln.BlacklistruneRequest\x1a\x1a.cln.BlacklistruneResponse\"\x00\x12<\n\tCheckRune\x12\x15.cln.CheckruneRequest\x1a\x16.cln.CheckruneResponse\"\x00\x12?\n\nCreateRune\x12\x16.cln.CreateruneRequest\x1a\x17.cln.CreateruneResponse\"\x00\x12<\n\tShowRunes\x12\x15.cln.ShowrunesRequest\x1a\x16.cln.ShowrunesResponse\"\x00\x12Q\n\x10\x41skReneUnreserve\x12\x1c.cln.AskreneunreserveRequest\x1a\x1d.cln.AskreneunreserveResponse\"\x00\x12T\n\x11\x41skReneListLayers\x12\x1d.cln.AskrenelistlayersRequest\x1a\x1e.cln.AskrenelistlayersResponse\"\x00\x12W\n\x12\x41skReneCreateLayer\x12\x1e.cln.AskrenecreatelayerRequest\x1a\x1f.cln.AskrenecreatelayerResponse\"\x00\x12W\n\x12\x41skReneRemoveLayer\x12\x1e.cln.AskreneremovelayerRequest\x1a\x1f.cln.AskreneremovelayerResponse\"\x00\x12K\n\x0e\x41skReneReserve\x12\x1a.cln.AskrenereserveRequest\x1a\x1b.cln.AskrenereserveResponse\"\x00\x12?\n\nAskReneAge\x12\x16.cln.AskreneageRequest\x1a\x17.cln.AskreneageResponse\"\x00\x12<\n\tGetRoutes\x12\x15.cln.GetroutesRequest\x1a\x16.cln.GetroutesResponse\"\x00\x12W\n\x12\x41skReneDisableNode\x12\x1e.cln.AskrenedisablenodeRequest\x1a\x1f.cln.AskrenedisablenodeResponse\"\x00\x12]\n\x14\x41skReneInformChannel\x12 .cln.AskreneinformchannelRequest\x1a!.cln.AskreneinformchannelResponse\"\x00\x12]\n\x14\x41skReneCreateChannel\x12 .cln.AskrenecreatechannelRequest\x1a!.cln.AskrenecreatechannelResponse\"\x00\x12]\n\x14\x41skReneUpdateChannel\x12 .cln.AskreneupdatechannelRequest\x1a!.cln.AskreneupdatechannelResponse\"\x00\x12W\n\x12\x41skReneBiasChannel\x12\x1e.cln.AskrenebiaschannelRequest\x1a\x1f.cln.AskrenebiaschannelResponse\"\x00\x12N\n\x0f\x41skreneBiasNode\x12\x1b.cln.AskrenebiasnodeRequest\x1a\x1c.cln.AskrenebiasnodeResponse\"\x00\x12\x66\n\x17\x41skReneListReservations\x12#.cln.AskrenelistreservationsRequest\x1a$.cln.AskrenelistreservationsResponse\"\x00\x12W\n\x12InjectPaymentOnion\x12\x1e.cln.InjectpaymentonionRequest\x1a\x1f.cln.InjectpaymentonionResponse\"\x00\x12W\n\x12InjectOnionMessage\x12\x1e.cln.InjectonionmessageRequest\x1a\x1f.cln.InjectonionmessageResponse\"\x00\x12-\n\x04Xpay\x12\x10.cln.XpayRequest\x1a\x11.cln.XpayResponse\"\x00\x12W\n\x12SignMessageWithKey\x12\x1e.cln.SignmessagewithkeyRequest\x1a\x1f.cln.SignmessagewithkeyResponse\"\x00\x12Q\n\x10ListChannelMoves\x12\x1c.cln.ListchannelmovesRequest\x1a\x1d.cln.ListchannelmovesResponse\"\x00\x12K\n\x0eListChainMoves\x12\x1a.cln.ListchainmovesRequest\x1a\x1b.cln.ListchainmovesResponse\"\x00\x12T\n\x11ListNetworkEvents\x12\x1d.cln.ListnetworkeventsRequest\x1a\x1e.cln.ListnetworkeventsResponse\"\x00\x12N\n\x0f\x44\x65lNetworkEvent\x12\x1b.cln.DelnetworkeventRequest\x1a\x1c.cln.DelnetworkeventResponse\"\x00\x12Z\n\x13\x43lnrestRegisterPath\x12\x1f.cln.ClnrestregisterpathRequest\x1a .cln.ClnrestregisterpathResponse\"\x00\x12T\n\x13SubscribeBlockAdded\x12\x1c.cln.StreamBlockAddedRequest\x1a\x1b.cln.BlockAddedNotification\"\x00\x30\x01\x12i\n\x1aSubscribeChannelOpenFailed\x12#.cln.StreamChannelOpenFailedRequest\x1a\".cln.ChannelOpenFailedNotification\"\x00\x30\x01\x12]\n\x16SubscribeChannelOpened\x12\x1f.cln.StreamChannelOpenedRequest\x1a\x1e.cln.ChannelOpenedNotification\"\x00\x30\x01\x12O\n\x10SubscribeConnect\x12\x19.cln.StreamConnectRequest\x1a\x1c.cln.PeerConnectNotification\"\x00\x30\x01\x12Q\n\x12SubscribeCustomMsg\x12\x1b.cln.StreamCustomMsgRequest\x1a\x1a.cln.CustomMsgNotification\"\x00\x30\x01\x12o\n\x1cSubscribeChannelStateChanged\x12%.cln.StreamChannelStateChangedRequest\x1a$.cln.ChannelStateChangedNotification\"\x00\x30\x01\x62\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'node_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: DESCRIPTOR._loaded_options = None + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._loaded_options = None + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_options = b'8\001' _globals['_GETINFOREQUEST']._serialized_start=37 _globals['_GETINFOREQUEST']._serialized_end=53 _globals['_GETINFORESPONSE']._serialized_start=56 @@ -137,1087 +139,1089 @@ _globals['_CLOSEREQUEST']._serialized_start=8210 _globals['_CLOSEREQUEST']._serialized_end=8541 _globals['_CLOSERESPONSE']._serialized_start=8544 - _globals['_CLOSERESPONSE']._serialized_end=8743 - _globals['_CLOSERESPONSE_CLOSETYPE']._serialized_start=8674 - _globals['_CLOSERESPONSE_CLOSETYPE']._serialized_end=8727 - _globals['_CONNECTREQUEST']._serialized_start=8745 - _globals['_CONNECTREQUEST']._serialized_end=8829 - _globals['_CONNECTRESPONSE']._serialized_start=8832 - _globals['_CONNECTRESPONSE']._serialized_end=9012 - _globals['_CONNECTRESPONSE_CONNECTDIRECTION']._serialized_start=8977 - _globals['_CONNECTRESPONSE_CONNECTDIRECTION']._serialized_end=9012 - _globals['_CONNECTADDRESS']._serialized_start=9015 - _globals['_CONNECTADDRESS']._serialized_end=9266 - _globals['_CONNECTADDRESS_CONNECTADDRESSTYPE']._serialized_start=9154 - _globals['_CONNECTADDRESS_CONNECTADDRESSTYPE']._serialized_end=9234 - _globals['_CREATEINVOICEREQUEST']._serialized_start=9268 - _globals['_CREATEINVOICEREQUEST']._serialized_end=9342 - _globals['_CREATEINVOICERESPONSE']._serialized_start=9345 - _globals['_CREATEINVOICERESPONSE']._serialized_end=10110 - _globals['_CREATEINVOICERESPONSE_CREATEINVOICESTATUS']._serialized_start=9867 - _globals['_CREATEINVOICERESPONSE_CREATEINVOICESTATUS']._serialized_end=9923 - _globals['_CREATEINVOICEPAIDOUTPOINT']._serialized_start=10112 - _globals['_CREATEINVOICEPAIDOUTPOINT']._serialized_end=10169 - _globals['_DATASTOREREQUEST']._serialized_start=10172 - _globals['_DATASTOREREQUEST']._serialized_end=10480 - _globals['_DATASTOREREQUEST_DATASTOREMODE']._serialized_start=10325 - _globals['_DATASTOREREQUEST_DATASTOREMODE']._serialized_end=10437 - _globals['_DATASTORERESPONSE']._serialized_start=10483 - _globals['_DATASTORERESPONSE']._serialized_end=10613 - _globals['_DATASTOREUSAGEREQUEST']._serialized_start=10615 - _globals['_DATASTOREUSAGEREQUEST']._serialized_end=10651 - _globals['_DATASTOREUSAGERESPONSE']._serialized_start=10653 - _globals['_DATASTOREUSAGERESPONSE']._serialized_end=10736 - _globals['_DATASTOREUSAGEDATASTOREUSAGE']._serialized_start=10738 - _globals['_DATASTOREUSAGEDATASTOREUSAGE']._serialized_end=10802 - _globals['_CREATEONIONREQUEST']._serialized_start=10805 - _globals['_CREATEONIONREQUEST']._serialized_end=10962 - _globals['_CREATEONIONRESPONSE']._serialized_start=10964 - _globals['_CREATEONIONRESPONSE']._serialized_end=11024 - _globals['_CREATEONIONHOPS']._serialized_start=11026 - _globals['_CREATEONIONHOPS']._serialized_end=11076 - _globals['_DELDATASTOREREQUEST']._serialized_start=11078 - _globals['_DELDATASTOREREQUEST']._serialized_end=11152 - _globals['_DELDATASTORERESPONSE']._serialized_start=11155 - _globals['_DELDATASTORERESPONSE']._serialized_end=11288 - _globals['_DELINVOICEREQUEST']._serialized_start=11291 - _globals['_DELINVOICEREQUEST']._serialized_end=11473 - _globals['_DELINVOICEREQUEST_DELINVOICESTATUS']._serialized_start=11407 - _globals['_DELINVOICEREQUEST_DELINVOICESTATUS']._serialized_end=11460 - _globals['_DELINVOICERESPONSE']._serialized_start=11476 - _globals['_DELINVOICERESPONSE']._serialized_end=12218 - _globals['_DELINVOICERESPONSE_DELINVOICESTATUS']._serialized_start=11407 - _globals['_DELINVOICERESPONSE_DELINVOICESTATUS']._serialized_end=11460 - _globals['_DEVFORGETCHANNELREQUEST']._serialized_start=12221 - _globals['_DEVFORGETCHANNELREQUEST']._serialized_end=12380 - _globals['_DEVFORGETCHANNELRESPONSE']._serialized_start=12382 - _globals['_DEVFORGETCHANNELRESPONSE']._serialized_end=12471 - _globals['_EMERGENCYRECOVERREQUEST']._serialized_start=12473 - _globals['_EMERGENCYRECOVERREQUEST']._serialized_end=12498 - _globals['_EMERGENCYRECOVERRESPONSE']._serialized_start=12500 - _globals['_EMERGENCYRECOVERRESPONSE']._serialized_end=12541 - _globals['_GETEMERGENCYRECOVERDATAREQUEST']._serialized_start=12543 - _globals['_GETEMERGENCYRECOVERDATAREQUEST']._serialized_end=12575 - _globals['_GETEMERGENCYRECOVERDATARESPONSE']._serialized_start=12577 - _globals['_GETEMERGENCYRECOVERDATARESPONSE']._serialized_end=12628 - _globals['_EXPOSESECRETREQUEST']._serialized_start=12630 - _globals['_EXPOSESECRETREQUEST']._serialized_end=12711 - _globals['_EXPOSESECRETRESPONSE']._serialized_start=12713 - _globals['_EXPOSESECRETRESPONSE']._serialized_end=12808 - _globals['_RECOVERREQUEST']._serialized_start=12810 - _globals['_RECOVERREQUEST']._serialized_end=12845 - _globals['_RECOVERRESPONSE']._serialized_start=12848 - _globals['_RECOVERRESPONSE']._serialized_end=12984 - _globals['_RECOVERRESPONSE_RECOVERRESULT']._serialized_start=12924 - _globals['_RECOVERRESPONSE_RECOVERRESULT']._serialized_end=12973 - _globals['_RECOVERCHANNELREQUEST']._serialized_start=12986 - _globals['_RECOVERCHANNELREQUEST']._serialized_end=13022 - _globals['_RECOVERCHANNELRESPONSE']._serialized_start=13024 - _globals['_RECOVERCHANNELRESPONSE']._serialized_end=13063 - _globals['_INVOICEREQUEST']._serialized_start=13066 - _globals['_INVOICEREQUEST']._serialized_end=13347 - _globals['_INVOICERESPONSE']._serialized_start=13350 - _globals['_INVOICERESPONSE']._serialized_end=13755 - _globals['_INVOICEREQUESTREQUEST']._serialized_start=13758 - _globals['_INVOICEREQUESTREQUEST']._serialized_end=13983 - _globals['_INVOICEREQUESTRESPONSE']._serialized_start=13986 - _globals['_INVOICEREQUESTRESPONSE']._serialized_end=14125 - _globals['_DISABLEINVOICEREQUESTREQUEST']._serialized_start=14127 - _globals['_DISABLEINVOICEREQUESTREQUEST']._serialized_end=14176 - _globals['_DISABLEINVOICEREQUESTRESPONSE']._serialized_start=14179 - _globals['_DISABLEINVOICEREQUESTRESPONSE']._serialized_end=14325 - _globals['_LISTINVOICEREQUESTSREQUEST']._serialized_start=14327 - _globals['_LISTINVOICEREQUESTSREQUEST']._serialized_end=14435 - _globals['_LISTINVOICEREQUESTSRESPONSE']._serialized_start=14437 - _globals['_LISTINVOICEREQUESTSRESPONSE']._serialized_end=14532 - _globals['_LISTINVOICEREQUESTSINVOICEREQUESTS']._serialized_start=14535 - _globals['_LISTINVOICEREQUESTSINVOICEREQUESTS']._serialized_end=14686 - _globals['_LISTDATASTOREREQUEST']._serialized_start=14688 - _globals['_LISTDATASTOREREQUEST']._serialized_end=14723 - _globals['_LISTDATASTORERESPONSE']._serialized_start=14725 - _globals['_LISTDATASTORERESPONSE']._serialized_end=14796 - _globals['_LISTDATASTOREDATASTORE']._serialized_start=14799 - _globals['_LISTDATASTOREDATASTORE']._serialized_end=14934 - _globals['_LISTINVOICESREQUEST']._serialized_start=14937 - _globals['_LISTINVOICESREQUEST']._serialized_end=15287 - _globals['_LISTINVOICESREQUEST_LISTINVOICESINDEX']._serialized_start=15158 - _globals['_LISTINVOICESREQUEST_LISTINVOICESINDEX']._serialized_end=15203 - _globals['_LISTINVOICESRESPONSE']._serialized_start=15289 - _globals['_LISTINVOICESRESPONSE']._serialized_end=15356 - _globals['_LISTINVOICESINVOICES']._serialized_start=15359 - _globals['_LISTINVOICESINVOICES']._serialized_end=16210 - _globals['_LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS']._serialized_start=15926 - _globals['_LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS']._serialized_end=15989 - _globals['_LISTINVOICESINVOICESPAIDOUTPOINT']._serialized_start=16212 - _globals['_LISTINVOICESINVOICESPAIDOUTPOINT']._serialized_end=16276 - _globals['_SENDONIONREQUEST']._serialized_start=16279 - _globals['_SENDONIONREQUEST']._serialized_end=16781 - _globals['_SENDONIONRESPONSE']._serialized_start=16784 - _globals['_SENDONIONRESPONSE']._serialized_end=17399 - _globals['_SENDONIONRESPONSE_SENDONIONSTATUS']._serialized_start=17211 - _globals['_SENDONIONRESPONSE_SENDONIONSTATUS']._serialized_end=17255 - _globals['_SENDONIONFIRSTHOP']._serialized_start=17401 - _globals['_SENDONIONFIRSTHOP']._serialized_end=17481 - _globals['_LISTSENDPAYSREQUEST']._serialized_start=17484 - _globals['_LISTSENDPAYSREQUEST']._serialized_end=17900 - _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS']._serialized_start=17725 - _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS']._serialized_end=17784 - _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSINDEX']._serialized_start=17786 - _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSINDEX']._serialized_end=17831 - _globals['_LISTSENDPAYSRESPONSE']._serialized_start=17902 - _globals['_LISTSENDPAYSRESPONSE']._serialized_end=17969 - _globals['_LISTSENDPAYSPAYMENTS']._serialized_start=17972 - _globals['_LISTSENDPAYSPAYMENTS']._serialized_end=18736 - _globals['_LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS']._serialized_start=18489 - _globals['_LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS']._serialized_end=18556 - _globals['_LISTTRANSACTIONSREQUEST']._serialized_start=18738 - _globals['_LISTTRANSACTIONSREQUEST']._serialized_end=18763 - _globals['_LISTTRANSACTIONSRESPONSE']._serialized_start=18765 - _globals['_LISTTRANSACTIONSRESPONSE']._serialized_end=18848 - _globals['_LISTTRANSACTIONSTRANSACTIONS']._serialized_start=18851 - _globals['_LISTTRANSACTIONSTRANSACTIONS']._serialized_end=19099 - _globals['_LISTTRANSACTIONSTRANSACTIONSINPUTS']._serialized_start=19101 - _globals['_LISTTRANSACTIONSTRANSACTIONSINPUTS']._serialized_end=19184 - _globals['_LISTTRANSACTIONSTRANSACTIONSOUTPUTS']._serialized_start=19186 - _globals['_LISTTRANSACTIONSTRANSACTIONSOUTPUTS']._serialized_end=19294 - _globals['_MAKESECRETREQUEST']._serialized_start=19296 - _globals['_MAKESECRETREQUEST']._serialized_end=19373 - _globals['_MAKESECRETRESPONSE']._serialized_start=19375 - _globals['_MAKESECRETRESPONSE']._serialized_end=19411 - _globals['_PAYREQUEST']._serialized_start=19414 - _globals['_PAYREQUEST']._serialized_end=19945 - _globals['_PAYRESPONSE']._serialized_start=19948 - _globals['_PAYRESPONSE']._serialized_end=20327 - _globals['_PAYRESPONSE_PAYSTATUS']._serialized_start=20230 - _globals['_PAYRESPONSE_PAYSTATUS']._serialized_end=20280 - _globals['_LISTNODESREQUEST']._serialized_start=20329 - _globals['_LISTNODESREQUEST']._serialized_end=20371 - _globals['_LISTNODESRESPONSE']._serialized_start=20373 - _globals['_LISTNODESRESPONSE']._serialized_end=20428 - _globals['_LISTNODESNODES']._serialized_start=20431 - _globals['_LISTNODESNODES']._serialized_end=20743 - _globals['_LISTNODESNODESOPTIONWILLFUND']._serialized_start=20746 - _globals['_LISTNODESNODESOPTIONWILLFUND']._serialized_end=20988 - _globals['_LISTNODESNODESADDRESSES']._serialized_start=20991 - _globals['_LISTNODESNODESADDRESSES']._serialized_end=21223 - _globals['_LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE']._serialized_start=21131 - _globals['_LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE']._serialized_end=21211 - _globals['_WAITANYINVOICEREQUEST']._serialized_start=21225 - _globals['_WAITANYINVOICEREQUEST']._serialized_end=21328 - _globals['_WAITANYINVOICERESPONSE']._serialized_start=21331 - _globals['_WAITANYINVOICERESPONSE']._serialized_end=22054 - _globals['_WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS']._serialized_start=21829 - _globals['_WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS']._serialized_end=21874 - _globals['_WAITANYINVOICEPAIDOUTPOINT']._serialized_start=22056 - _globals['_WAITANYINVOICEPAIDOUTPOINT']._serialized_end=22114 - _globals['_WAITINVOICEREQUEST']._serialized_start=22116 - _globals['_WAITINVOICEREQUEST']._serialized_end=22151 - _globals['_WAITINVOICERESPONSE']._serialized_start=22154 - _globals['_WAITINVOICERESPONSE']._serialized_end=22862 - _globals['_WAITINVOICERESPONSE_WAITINVOICESTATUS']._serialized_start=22640 - _globals['_WAITINVOICERESPONSE_WAITINVOICESTATUS']._serialized_end=22682 - _globals['_WAITINVOICEPAIDOUTPOINT']._serialized_start=22864 - _globals['_WAITINVOICEPAIDOUTPOINT']._serialized_end=22919 - _globals['_WAITSENDPAYREQUEST']._serialized_start=22922 - _globals['_WAITSENDPAYREQUEST']._serialized_end=23064 - _globals['_WAITSENDPAYRESPONSE']._serialized_start=23067 - _globals['_WAITSENDPAYRESPONSE']._serialized_end=23721 - _globals['_WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS']._serialized_start=23527 - _globals['_WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS']._serialized_end=23560 - _globals['_NEWADDRREQUEST']._serialized_start=23724 - _globals['_NEWADDRREQUEST']._serialized_end=23875 - _globals['_NEWADDRREQUEST_NEWADDRADDRESSTYPE']._serialized_start=23808 - _globals['_NEWADDRREQUEST_NEWADDRADDRESSTYPE']._serialized_end=23859 - _globals['_NEWADDRRESPONSE']._serialized_start=23877 - _globals['_NEWADDRRESPONSE']._serialized_end=23954 - _globals['_WITHDRAWREQUEST']._serialized_start=23957 - _globals['_WITHDRAWREQUEST']._serialized_end=24142 - _globals['_WITHDRAWRESPONSE']._serialized_start=24144 - _globals['_WITHDRAWRESPONSE']._serialized_end=24202 - _globals['_KEYSENDREQUEST']._serialized_start=24205 - _globals['_KEYSENDREQUEST']._serialized_end=24636 - _globals['_KEYSENDRESPONSE']._serialized_start=24639 - _globals['_KEYSENDRESPONSE']._serialized_end=25009 - _globals['_KEYSENDRESPONSE_KEYSENDSTATUS']._serialized_start=24933 - _globals['_KEYSENDRESPONSE_KEYSENDSTATUS']._serialized_end=24962 - _globals['_FUNDPSBTREQUEST']._serialized_start=25012 - _globals['_FUNDPSBTREQUEST']._serialized_end=25432 - _globals['_FUNDPSBTRESPONSE']._serialized_start=25435 - _globals['_FUNDPSBTRESPONSE']._serialized_end=25652 - _globals['_FUNDPSBTRESERVATIONS']._serialized_start=25654 - _globals['_FUNDPSBTRESERVATIONS']._serialized_end=25771 - _globals['_SENDPSBTREQUEST']._serialized_start=25773 - _globals['_SENDPSBTREQUEST']._serialized_end=25838 - _globals['_SENDPSBTRESPONSE']._serialized_start=25840 - _globals['_SENDPSBTRESPONSE']._serialized_end=25884 - _globals['_SIGNPSBTREQUEST']._serialized_start=25886 - _globals['_SIGNPSBTREQUEST']._serialized_end=25935 - _globals['_SIGNPSBTRESPONSE']._serialized_start=25937 - _globals['_SIGNPSBTRESPONSE']._serialized_end=25976 - _globals['_UTXOPSBTREQUEST']._serialized_start=25979 - _globals['_UTXOPSBTREQUEST']._serialized_end=26395 - _globals['_UTXOPSBTRESPONSE']._serialized_start=26398 - _globals['_UTXOPSBTRESPONSE']._serialized_end=26615 - _globals['_UTXOPSBTRESERVATIONS']._serialized_start=26617 - _globals['_UTXOPSBTRESERVATIONS']._serialized_end=26734 - _globals['_TXDISCARDREQUEST']._serialized_start=26736 - _globals['_TXDISCARDREQUEST']._serialized_end=26768 - _globals['_TXDISCARDRESPONSE']._serialized_start=26770 - _globals['_TXDISCARDRESPONSE']._serialized_end=26824 - _globals['_TXPREPAREREQUEST']._serialized_start=26827 - _globals['_TXPREPAREREQUEST']._serialized_end=26991 - _globals['_TXPREPARERESPONSE']._serialized_start=26993 - _globals['_TXPREPARERESPONSE']._serialized_end=27061 - _globals['_TXSENDREQUEST']._serialized_start=27063 - _globals['_TXSENDREQUEST']._serialized_end=27092 - _globals['_TXSENDRESPONSE']._serialized_start=27094 - _globals['_TXSENDRESPONSE']._serialized_end=27150 - _globals['_LISTPEERCHANNELSREQUEST']._serialized_start=27152 - _globals['_LISTPEERCHANNELSREQUEST']._serialized_end=27253 - _globals['_LISTPEERCHANNELSRESPONSE']._serialized_start=27255 - _globals['_LISTPEERCHANNELSRESPONSE']._serialized_end=27330 - _globals['_LISTPEERCHANNELSCHANNELS']._serialized_start=27333 - _globals['_LISTPEERCHANNELSCHANNELS']._serialized_end=30649 - _globals['_LISTPEERCHANNELSCHANNELSUPDATES']._serialized_start=30652 - _globals['_LISTPEERCHANNELSCHANNELSUPDATES']._serialized_end=30819 - _globals['_LISTPEERCHANNELSCHANNELSUPDATESLOCAL']._serialized_start=30822 - _globals['_LISTPEERCHANNELSCHANNELSUPDATESLOCAL']._serialized_end=31040 - _globals['_LISTPEERCHANNELSCHANNELSUPDATESREMOTE']._serialized_start=31043 - _globals['_LISTPEERCHANNELSCHANNELSUPDATESREMOTE']._serialized_end=31262 - _globals['_LISTPEERCHANNELSCHANNELSFEERATE']._serialized_start=31264 - _globals['_LISTPEERCHANNELSCHANNELSFEERATE']._serialized_end=31327 - _globals['_LISTPEERCHANNELSCHANNELSINFLIGHT']._serialized_start=31330 - _globals['_LISTPEERCHANNELSCHANNELSINFLIGHT']._serialized_end=31597 - _globals['_LISTPEERCHANNELSCHANNELSFUNDING']._serialized_start=31600 - _globals['_LISTPEERCHANNELSCHANNELSFUNDING']._serialized_end=31949 - _globals['_LISTPEERCHANNELSCHANNELSALIAS']._serialized_start=31951 - _globals['_LISTPEERCHANNELSCHANNELSALIAS']._serialized_end=32044 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS']._serialized_start=32047 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS']._serialized_end=32424 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION']._serialized_start=32338 - _globals['_LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION']._serialized_end=32395 - _globals['_LISTCLOSEDCHANNELSREQUEST']._serialized_start=32426 - _globals['_LISTCLOSEDCHANNELSREQUEST']._serialized_end=32477 - _globals['_LISTCLOSEDCHANNELSRESPONSE']._serialized_start=32479 - _globals['_LISTCLOSEDCHANNELSRESPONSE']._serialized_end=32570 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS']._serialized_start=32573 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS']._serialized_end=33933 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSECAUSE']._serialized_start=33567 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSECAUSE']._serialized_end=33684 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS']._serialized_start=33935 - _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS']._serialized_end=34036 - _globals['_DECODEPAYREQUEST']._serialized_start=34038 - _globals['_DECODEPAYREQUEST']._serialized_end=34114 - _globals['_DECODEPAYRESPONSE']._serialized_start=34117 - _globals['_DECODEPAYRESPONSE']._serialized_end=34700 - _globals['_DECODEPAYFALLBACKS']._serialized_start=34703 - _globals['_DECODEPAYFALLBACKS']._serialized_end=34911 - _globals['_DECODEPAYFALLBACKS_DECODEPAYFALLBACKSTYPE']._serialized_start=34824 - _globals['_DECODEPAYFALLBACKS_DECODEPAYFALLBACKSTYPE']._serialized_end=34902 - _globals['_DECODEPAYEXTRA']._serialized_start=34913 - _globals['_DECODEPAYEXTRA']._serialized_end=34956 - _globals['_DECODEREQUEST']._serialized_start=34958 - _globals['_DECODEREQUEST']._serialized_end=34989 - _globals['_DECODERESPONSE']._serialized_start=34992 - _globals['_DECODERESPONSE']._serialized_end=40124 - _globals['_DECODERESPONSE_DECODETYPE']._serialized_start=38103 - _globals['_DECODERESPONSE_DECODETYPE']._serialized_end=38234 - _globals['_DECODEOFFERPATHS']._serialized_start=40127 - _globals['_DECODEOFFERPATHS']._serialized_end=40363 - _globals['_DECODEOFFERRECURRENCEPAYWINDOW']._serialized_start=40366 - _globals['_DECODEOFFERRECURRENCEPAYWINDOW']._serialized_end=40503 - _globals['_DECODEINVREQPATHS']._serialized_start=40506 - _globals['_DECODEINVREQPATHS']._serialized_end=40785 - _globals['_DECODEINVREQPATHSPATH']._serialized_start=40787 - _globals['_DECODEINVREQPATHSPATH']._serialized_end=40869 - _globals['_DECODEINVREQBIP353NAME']._serialized_start=40871 - _globals['_DECODEINVREQBIP353NAME']._serialized_end=40955 - _globals['_DECODEINVOICEPATHSPATH']._serialized_start=40957 - _globals['_DECODEINVOICEPATHSPATH']._serialized_end=41040 - _globals['_DECODEINVOICEFALLBACKS']._serialized_start=41042 - _globals['_DECODEINVOICEFALLBACKS']._serialized_end=41130 - _globals['_DECODEFALLBACKS']._serialized_start=41133 - _globals['_DECODEFALLBACKS']._serialized_end=41431 - _globals['_DECODEFALLBACKS_DECODEFALLBACKSTYPE']._serialized_start=41301 - _globals['_DECODEFALLBACKS_DECODEFALLBACKSTYPE']._serialized_end=41376 - _globals['_DECODEEXTRA']._serialized_start=41433 - _globals['_DECODEEXTRA']._serialized_end=41473 - _globals['_DECODERESTRICTIONS']._serialized_start=41475 - _globals['_DECODERESTRICTIONS']._serialized_end=41534 - _globals['_DELPAYREQUEST']._serialized_start=41537 - _globals['_DELPAYREQUEST']._serialized_end=41731 - _globals['_DELPAYREQUEST_DELPAYSTATUS']._serialized_start=41668 - _globals['_DELPAYREQUEST_DELPAYSTATUS']._serialized_end=41708 - _globals['_DELPAYRESPONSE']._serialized_start=41733 - _globals['_DELPAYRESPONSE']._serialized_end=41788 - _globals['_DELPAYPAYMENTS']._serialized_start=41791 - _globals['_DELPAYPAYMENTS']._serialized_end=42506 - _globals['_DELPAYPAYMENTS_DELPAYPAYMENTSSTATUS']._serialized_start=42269 - _globals['_DELPAYPAYMENTS_DELPAYPAYMENTSSTATUS']._serialized_end=42330 - _globals['_DELFORWARDREQUEST']._serialized_start=42509 - _globals['_DELFORWARDREQUEST']._serialized_end=42688 - _globals['_DELFORWARDREQUEST_DELFORWARDSTATUS']._serialized_start=42627 - _globals['_DELFORWARDREQUEST_DELFORWARDSTATUS']._serialized_end=42688 - _globals['_DELFORWARDRESPONSE']._serialized_start=42690 - _globals['_DELFORWARDRESPONSE']._serialized_end=42710 - _globals['_DISABLEOFFERREQUEST']._serialized_start=42712 - _globals['_DISABLEOFFERREQUEST']._serialized_end=42751 - _globals['_DISABLEOFFERRESPONSE']._serialized_start=42754 - _globals['_DISABLEOFFERRESPONSE']._serialized_end=42932 - _globals['_ENABLEOFFERREQUEST']._serialized_start=42934 - _globals['_ENABLEOFFERREQUEST']._serialized_end=42972 - _globals['_ENABLEOFFERRESPONSE']._serialized_start=42975 - _globals['_ENABLEOFFERRESPONSE']._serialized_end=43152 - _globals['_DISCONNECTREQUEST']._serialized_start=43154 - _globals['_DISCONNECTREQUEST']._serialized_end=43215 - _globals['_DISCONNECTRESPONSE']._serialized_start=43217 - _globals['_DISCONNECTRESPONSE']._serialized_end=43237 - _globals['_FEERATESREQUEST']._serialized_start=43239 - _globals['_FEERATESREQUEST']._serialized_end=43346 - _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_start=43309 - _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_end=43346 - _globals['_FEERATESRESPONSE']._serialized_start=43349 - _globals['_FEERATESRESPONSE']._serialized_end=43631 - _globals['_FEERATESPERKB']._serialized_start=43634 - _globals['_FEERATESPERKB']._serialized_end=44101 - _globals['_FEERATESPERKBESTIMATES']._serialized_start=44103 - _globals['_FEERATESPERKBESTIMATES']._serialized_end=44190 - _globals['_FEERATESPERKW']._serialized_start=44193 - _globals['_FEERATESPERKW']._serialized_end=44660 - _globals['_FEERATESPERKWESTIMATES']._serialized_start=44662 - _globals['_FEERATESPERKWESTIMATES']._serialized_end=44749 - _globals['_FEERATESONCHAINFEEESTIMATES']._serialized_start=44752 - _globals['_FEERATESONCHAINFEEESTIMATES']._serialized_end=45033 - _globals['_FETCHBIP353REQUEST']._serialized_start=45035 - _globals['_FETCHBIP353REQUEST']._serialized_end=45072 - _globals['_FETCHBIP353RESPONSE']._serialized_start=45074 - _globals['_FETCHBIP353RESPONSE']._serialized_end=45162 - _globals['_FETCHBIP353INSTRUCTIONS']._serialized_start=45165 - _globals['_FETCHBIP353INSTRUCTIONS']._serialized_end=45412 - _globals['_FETCHINVOICEREQUEST']._serialized_start=45415 - _globals['_FETCHINVOICEREQUEST']._serialized_end=45856 - _globals['_FETCHINVOICERESPONSE']._serialized_start=45859 - _globals['_FETCHINVOICERESPONSE']._serialized_end=46012 - _globals['_FETCHINVOICECHANGES']._serialized_start=46015 - _globals['_FETCHINVOICECHANGES']._serialized_end=46273 - _globals['_FETCHINVOICENEXTPERIOD']._serialized_start=46275 - _globals['_FETCHINVOICENEXTPERIOD']._serialized_end=46400 - _globals['_CANCELRECURRINGINVOICEREQUEST']._serialized_start=46403 - _globals['_CANCELRECURRINGINVOICEREQUEST']._serialized_end=46627 - _globals['_CANCELRECURRINGINVOICERESPONSE']._serialized_start=46629 - _globals['_CANCELRECURRINGINVOICERESPONSE']._serialized_end=46677 - _globals['_FUNDCHANNELCANCELREQUEST']._serialized_start=46679 - _globals['_FUNDCHANNELCANCELREQUEST']._serialized_end=46717 - _globals['_FUNDCHANNELCANCELRESPONSE']._serialized_start=46719 - _globals['_FUNDCHANNELCANCELRESPONSE']._serialized_end=46765 - _globals['_FUNDCHANNELCOMPLETEREQUEST']._serialized_start=46767 - _globals['_FUNDCHANNELCOMPLETEREQUEST']._serialized_end=46857 - _globals['_FUNDCHANNELCOMPLETERESPONSE']._serialized_start=46859 - _globals['_FUNDCHANNELCOMPLETERESPONSE']._serialized_end=46937 - _globals['_FUNDCHANNELREQUEST']._serialized_start=46940 - _globals['_FUNDCHANNELREQUEST']._serialized_end=47447 - _globals['_FUNDCHANNELRESPONSE']._serialized_start=47450 - _globals['_FUNDCHANNELRESPONSE']._serialized_end=47678 - _globals['_FUNDCHANNELCHANNELTYPE']._serialized_start=47680 - _globals['_FUNDCHANNELCHANNELTYPE']._serialized_end=47755 - _globals['_FUNDCHANNELSTARTREQUEST']._serialized_start=47758 - _globals['_FUNDCHANNELSTARTREQUEST']._serialized_end=48100 - _globals['_FUNDCHANNELSTARTRESPONSE']._serialized_start=48103 - _globals['_FUNDCHANNELSTARTRESPONSE']._serialized_end=48349 - _globals['_FUNDCHANNELSTARTCHANNELTYPE']._serialized_start=48351 - _globals['_FUNDCHANNELSTARTCHANNELTYPE']._serialized_end=48431 - _globals['_GETLOGREQUEST']._serialized_start=48434 - _globals['_GETLOGREQUEST']._serialized_end=48591 - _globals['_GETLOGREQUEST_GETLOGLEVEL']._serialized_start=48503 - _globals['_GETLOGREQUEST_GETLOGLEVEL']._serialized_end=48581 - _globals['_GETLOGRESPONSE']._serialized_start=48593 - _globals['_GETLOGRESPONSE']._serialized_end=48697 - _globals['_GETLOGLOG']._serialized_start=48700 - _globals['_GETLOGLOG']._serialized_end=49060 - _globals['_GETLOGLOG_GETLOGLOGTYPE']._serialized_start=48887 - _globals['_GETLOGLOG_GETLOGLOGTYPE']._serialized_end=48995 - _globals['_FUNDERUPDATEREQUEST']._serialized_start=49063 - _globals['_FUNDERUPDATEREQUEST']._serialized_end=50176 - _globals['_FUNDERUPDATEREQUEST_FUNDERUPDATEPOLICY']._serialized_start=49757 - _globals['_FUNDERUPDATEREQUEST_FUNDERUPDATEPOLICY']._serialized_end=49814 - _globals['_FUNDERUPDATERESPONSE']._serialized_start=50179 - _globals['_FUNDERUPDATERESPONSE']._serialized_end=51042 - _globals['_FUNDERUPDATERESPONSE_FUNDERUPDATEPOLICY']._serialized_start=49757 - _globals['_FUNDERUPDATERESPONSE_FUNDERUPDATEPOLICY']._serialized_end=49814 - _globals['_GETROUTEREQUEST']._serialized_start=51045 - _globals['_GETROUTEREQUEST']._serialized_end=51281 - _globals['_GETROUTERESPONSE']._serialized_start=51283 - _globals['_GETROUTERESPONSE']._serialized_end=51336 - _globals['_GETROUTEROUTE']._serialized_start=51339 - _globals['_GETROUTEROUTE']._serialized_end=51536 - _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_start=51507 - _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_end=51536 - _globals['_LISTADDRESSESREQUEST']._serialized_start=51538 - _globals['_LISTADDRESSESREQUEST']._serialized_end=51654 - _globals['_LISTADDRESSESRESPONSE']._serialized_start=51656 - _globals['_LISTADDRESSESRESPONSE']._serialized_end=51727 - _globals['_LISTADDRESSESADDRESSES']._serialized_start=51729 - _globals['_LISTADDRESSESADDRESSES']._serialized_end=51829 - _globals['_LISTFORWARDSREQUEST']._serialized_start=51832 - _globals['_LISTFORWARDSREQUEST']._serialized_end=52271 - _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_start=52076 - _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_end=52152 - _globals['_LISTFORWARDSREQUEST_LISTFORWARDSINDEX']._serialized_start=52154 - _globals['_LISTFORWARDSREQUEST_LISTFORWARDSINDEX']._serialized_end=52199 - _globals['_LISTFORWARDSRESPONSE']._serialized_start=52273 - _globals['_LISTFORWARDSRESPONSE']._serialized_end=52340 - _globals['_LISTFORWARDSFORWARDS']._serialized_start=52343 - _globals['_LISTFORWARDSFORWARDS']._serialized_end=53163 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_start=52864 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_end=52948 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_start=52950 - _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_end=52998 - _globals['_LISTOFFERSREQUEST']._serialized_start=53165 - _globals['_LISTOFFERSREQUEST']._serialized_end=53262 - _globals['_LISTOFFERSRESPONSE']._serialized_start=53264 - _globals['_LISTOFFERSRESPONSE']._serialized_end=53323 - _globals['_LISTOFFERSOFFERS']._serialized_start=53326 - _globals['_LISTOFFERSOFFERS']._serialized_end=53500 - _globals['_LISTPAYSREQUEST']._serialized_start=53503 - _globals['_LISTPAYSREQUEST']._serialized_end=53891 - _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_start=53724 - _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_end=53779 - _globals['_LISTPAYSREQUEST_LISTPAYSINDEX']._serialized_start=53781 - _globals['_LISTPAYSREQUEST_LISTPAYSINDEX']._serialized_end=53822 - _globals['_LISTPAYSRESPONSE']._serialized_start=53893 - _globals['_LISTPAYSRESPONSE']._serialized_end=53944 - _globals['_LISTPAYSPAYS']._serialized_start=53947 - _globals['_LISTPAYSPAYS']._serialized_end=54678 - _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_start=54417 - _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_end=54476 - _globals['_LISTHTLCSREQUEST']._serialized_start=54681 - _globals['_LISTHTLCSREQUEST']._serialized_end=54895 - _globals['_LISTHTLCSREQUEST_LISTHTLCSINDEX']._serialized_start=54816 - _globals['_LISTHTLCSREQUEST_LISTHTLCSINDEX']._serialized_end=54858 - _globals['_LISTHTLCSRESPONSE']._serialized_start=54897 - _globals['_LISTHTLCSRESPONSE']._serialized_end=54952 - _globals['_LISTHTLCSHTLCS']._serialized_start=54955 - _globals['_LISTHTLCSHTLCS']._serialized_end=55312 - _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_start=55234 - _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_end=55276 - _globals['_MULTIFUNDCHANNELREQUEST']._serialized_start=55315 - _globals['_MULTIFUNDCHANNELREQUEST']._serialized_end=55621 - _globals['_MULTIFUNDCHANNELRESPONSE']._serialized_start=55624 - _globals['_MULTIFUNDCHANNELRESPONSE']._serialized_end=55775 - _globals['_MULTIFUNDCHANNELDESTINATIONS']._serialized_start=55778 - _globals['_MULTIFUNDCHANNELDESTINATIONS']._serialized_end=56161 - _globals['_MULTIFUNDCHANNELCHANNELIDS']._serialized_start=56164 - _globals['_MULTIFUNDCHANNELCHANNELIDS']._serialized_end=56364 - _globals['_MULTIFUNDCHANNELCHANNELIDSCHANNELTYPE']._serialized_start=56366 - _globals['_MULTIFUNDCHANNELCHANNELIDSCHANNELTYPE']._serialized_end=56456 - _globals['_MULTIFUNDCHANNELFAILED']._serialized_start=56459 - _globals['_MULTIFUNDCHANNELFAILED']._serialized_end=56734 - _globals['_MULTIFUNDCHANNELFAILED_MULTIFUNDCHANNELFAILEDMETHOD']._serialized_start=56620 - _globals['_MULTIFUNDCHANNELFAILED_MULTIFUNDCHANNELFAILEDMETHOD']._serialized_end=56734 - _globals['_MULTIFUNDCHANNELFAILEDERROR']._serialized_start=56736 - _globals['_MULTIFUNDCHANNELFAILEDERROR']._serialized_end=56796 - _globals['_MULTIWITHDRAWREQUEST']._serialized_start=56799 - _globals['_MULTIWITHDRAWREQUEST']._serialized_end=56967 - _globals['_MULTIWITHDRAWRESPONSE']._serialized_start=56969 - _globals['_MULTIWITHDRAWRESPONSE']._serialized_end=57018 - _globals['_OFFERREQUEST']._serialized_start=57021 - _globals['_OFFERREQUEST']._serialized_end=57607 - _globals['_OFFERRESPONSE']._serialized_start=57610 - _globals['_OFFERRESPONSE']._serialized_end=57756 - _globals['_OPENCHANNELABORTREQUEST']._serialized_start=57758 - _globals['_OPENCHANNELABORTREQUEST']._serialized_end=57803 - _globals['_OPENCHANNELABORTRESPONSE']._serialized_start=57805 - _globals['_OPENCHANNELABORTRESPONSE']._serialized_end=57893 - _globals['_OPENCHANNELBUMPREQUEST']._serialized_start=57896 - _globals['_OPENCHANNELBUMPREQUEST']._serialized_end=58054 - _globals['_OPENCHANNELBUMPRESPONSE']._serialized_start=58057 - _globals['_OPENCHANNELBUMPRESPONSE']._serialized_end=58316 - _globals['_OPENCHANNELBUMPCHANNELTYPE']._serialized_start=58318 - _globals['_OPENCHANNELBUMPCHANNELTYPE']._serialized_end=58397 - _globals['_OPENCHANNELINITREQUEST']._serialized_start=58400 - _globals['_OPENCHANNELINITREQUEST']._serialized_end=58815 - _globals['_OPENCHANNELINITRESPONSE']._serialized_start=58818 - _globals['_OPENCHANNELINITRESPONSE']._serialized_end=59077 - _globals['_OPENCHANNELINITCHANNELTYPE']._serialized_start=59079 - _globals['_OPENCHANNELINITCHANNELTYPE']._serialized_end=59158 - _globals['_OPENCHANNELSIGNEDREQUEST']._serialized_start=59160 - _globals['_OPENCHANNELSIGNEDREQUEST']._serialized_end=59227 - _globals['_OPENCHANNELSIGNEDRESPONSE']._serialized_start=59229 - _globals['_OPENCHANNELSIGNEDRESPONSE']._serialized_end=59302 - _globals['_OPENCHANNELUPDATEREQUEST']._serialized_start=59304 - _globals['_OPENCHANNELUPDATEREQUEST']._serialized_end=59364 - _globals['_OPENCHANNELUPDATERESPONSE']._serialized_start=59367 - _globals['_OPENCHANNELUPDATERESPONSE']._serialized_end=59666 - _globals['_OPENCHANNELUPDATECHANNELTYPE']._serialized_start=59668 - _globals['_OPENCHANNELUPDATECHANNELTYPE']._serialized_end=59749 - _globals['_PINGREQUEST']._serialized_start=59751 - _globals['_PINGREQUEST']._serialized_end=59840 - _globals['_PINGRESPONSE']._serialized_start=59842 - _globals['_PINGRESPONSE']._serialized_end=59872 - _globals['_PLUGINREQUEST']._serialized_start=59875 - _globals['_PLUGINREQUEST']._serialized_end=60020 - _globals['_PLUGINRESPONSE']._serialized_start=60022 - _globals['_PLUGINRESPONSE']._serialized_end=60147 - _globals['_PLUGINPLUGINS']._serialized_start=60149 - _globals['_PLUGINPLUGINS']._serialized_end=60211 - _globals['_RENEPAYSTATUSREQUEST']._serialized_start=60213 - _globals['_RENEPAYSTATUSREQUEST']._serialized_end=60273 - _globals['_RENEPAYSTATUSRESPONSE']._serialized_start=60275 - _globals['_RENEPAYSTATUSRESPONSE']._serialized_end=60346 - _globals['_RENEPAYSTATUSPAYSTATUS']._serialized_start=60349 - _globals['_RENEPAYSTATUSPAYSTATUS']._serialized_end=60831 - _globals['_RENEPAYSTATUSPAYSTATUS_RENEPAYSTATUSPAYSTATUSSTATUS']._serialized_start=60694 - _globals['_RENEPAYSTATUSPAYSTATUS_RENEPAYSTATUSPAYSTATUSSTATUS']._serialized_end=60763 - _globals['_RENEPAYREQUEST']._serialized_start=60834 - _globals['_RENEPAYREQUEST']._serialized_end=61180 - _globals['_RENEPAYRESPONSE']._serialized_start=61183 - _globals['_RENEPAYRESPONSE']._serialized_end=61604 - _globals['_RENEPAYRESPONSE_RENEPAYSTATUS']._serialized_start=61500 - _globals['_RENEPAYRESPONSE_RENEPAYSTATUS']._serialized_end=61554 - _globals['_RESERVEINPUTSREQUEST']._serialized_start=61606 - _globals['_RESERVEINPUTSREQUEST']._serialized_end=61714 - _globals['_RESERVEINPUTSRESPONSE']._serialized_start=61716 - _globals['_RESERVEINPUTSRESPONSE']._serialized_end=61793 - _globals['_RESERVEINPUTSRESERVATIONS']._serialized_start=61795 - _globals['_RESERVEINPUTSRESERVATIONS']._serialized_end=61917 - _globals['_SENDCUSTOMMSGREQUEST']._serialized_start=61919 - _globals['_SENDCUSTOMMSGREQUEST']._serialized_end=61971 - _globals['_SENDCUSTOMMSGRESPONSE']._serialized_start=61973 - _globals['_SENDCUSTOMMSGRESPONSE']._serialized_end=62012 - _globals['_SENDINVOICEREQUEST']._serialized_start=62015 - _globals['_SENDINVOICEREQUEST']._serialized_end=62191 - _globals['_SENDINVOICERESPONSE']._serialized_start=62194 - _globals['_SENDINVOICERESPONSE']._serialized_end=62785 - _globals['_SENDINVOICERESPONSE_SENDINVOICESTATUS']._serialized_start=62596 - _globals['_SENDINVOICERESPONSE_SENDINVOICESTATUS']._serialized_end=62650 - _globals['_SETCHANNELREQUEST']._serialized_start=62788 - _globals['_SETCHANNELREQUEST']._serialized_end=63086 - _globals['_SETCHANNELRESPONSE']._serialized_start=63088 - _globals['_SETCHANNELRESPONSE']._serialized_end=63151 - _globals['_SETCHANNELCHANNELS']._serialized_start=63154 - _globals['_SETCHANNELCHANNELS']._serialized_end=63612 - _globals['_SETCONFIGREQUEST']._serialized_start=63614 - _globals['_SETCONFIGREQUEST']._serialized_end=63712 - _globals['_SETCONFIGRESPONSE']._serialized_start=63714 - _globals['_SETCONFIGRESPONSE']._serialized_end=63771 - _globals['_SETCONFIGCONFIG']._serialized_start=63774 - _globals['_SETCONFIGCONFIG']._serialized_end=64067 - _globals['_SETPSBTVERSIONREQUEST']._serialized_start=64069 - _globals['_SETPSBTVERSIONREQUEST']._serialized_end=64123 - _globals['_SETPSBTVERSIONRESPONSE']._serialized_start=64125 - _globals['_SETPSBTVERSIONRESPONSE']._serialized_end=64163 - _globals['_SIGNINVOICEREQUEST']._serialized_start=64165 - _globals['_SIGNINVOICEREQUEST']._serialized_end=64204 - _globals['_SIGNINVOICERESPONSE']._serialized_start=64206 - _globals['_SIGNINVOICERESPONSE']._serialized_end=64243 - _globals['_SIGNMESSAGEREQUEST']._serialized_start=64245 - _globals['_SIGNMESSAGEREQUEST']._serialized_end=64282 - _globals['_SIGNMESSAGERESPONSE']._serialized_start=64284 - _globals['_SIGNMESSAGERESPONSE']._serialized_end=64354 - _globals['_SPLICEINITREQUEST']._serialized_start=64357 - _globals['_SPLICEINITREQUEST']._serialized_end=64557 - _globals['_SPLICEINITRESPONSE']._serialized_start=64559 - _globals['_SPLICEINITRESPONSE']._serialized_end=64593 - _globals['_SPLICESIGNEDREQUEST']._serialized_start=64595 - _globals['_SPLICESIGNEDREQUEST']._serialized_end=64690 - _globals['_SPLICESIGNEDRESPONSE']._serialized_start=64692 - _globals['_SPLICESIGNEDRESPONSE']._serialized_end=64786 - _globals['_SPLICEUPDATEREQUEST']._serialized_start=64788 - _globals['_SPLICEUPDATEREQUEST']._serialized_end=64843 - _globals['_SPLICEUPDATERESPONSE']._serialized_start=64845 - _globals['_SPLICEUPDATERESPONSE']._serialized_end=64966 - _globals['_DEVSPLICEREQUEST']._serialized_start=64969 - _globals['_DEVSPLICEREQUEST']._serialized_end=65167 - _globals['_DEVSPLICERESPONSE']._serialized_start=65170 - _globals['_DEVSPLICERESPONSE']._serialized_end=65298 - _globals['_UNRESERVEINPUTSREQUEST']._serialized_start=65300 - _globals['_UNRESERVEINPUTSREQUEST']._serialized_end=65372 - _globals['_UNRESERVEINPUTSRESPONSE']._serialized_start=65374 - _globals['_UNRESERVEINPUTSRESPONSE']._serialized_end=65455 - _globals['_UNRESERVEINPUTSRESERVATIONS']._serialized_start=65458 - _globals['_UNRESERVEINPUTSRESERVATIONS']._serialized_end=65609 - _globals['_UPGRADEWALLETREQUEST']._serialized_start=65611 - _globals['_UPGRADEWALLETREQUEST']._serialized_end=65721 - _globals['_UPGRADEWALLETRESPONSE']._serialized_start=65724 - _globals['_UPGRADEWALLETRESPONSE']._serialized_end=65873 - _globals['_WAITBLOCKHEIGHTREQUEST']._serialized_start=65875 - _globals['_WAITBLOCKHEIGHTREQUEST']._serialized_end=65954 - _globals['_WAITBLOCKHEIGHTRESPONSE']._serialized_start=65956 - _globals['_WAITBLOCKHEIGHTRESPONSE']._serialized_end=66002 - _globals['_WAITREQUEST']._serialized_start=66005 - _globals['_WAITREQUEST']._serialized_end=66318 - _globals['_WAITREQUEST_WAITSUBSYSTEM']._serialized_start=66141 - _globals['_WAITREQUEST_WAITSUBSYSTEM']._serialized_end=66262 - _globals['_WAITREQUEST_WAITINDEXNAME']._serialized_start=66264 - _globals['_WAITREQUEST_WAITINDEXNAME']._serialized_end=66318 - _globals['_WAITRESPONSE']._serialized_start=66321 - _globals['_WAITRESPONSE']._serialized_end=67073 - _globals['_WAITRESPONSE_WAITSUBSYSTEM']._serialized_start=66141 - _globals['_WAITRESPONSE_WAITSUBSYSTEM']._serialized_end=66262 - _globals['_WAITFORWARDS']._serialized_start=67076 - _globals['_WAITFORWARDS']._serialized_end=67407 - _globals['_WAITFORWARDS_WAITFORWARDSSTATUS']._serialized_start=67262 - _globals['_WAITFORWARDS_WAITFORWARDSSTATUS']._serialized_end=67338 - _globals['_WAITINVOICES']._serialized_start=67410 - _globals['_WAITINVOICES']._serialized_end=67687 - _globals['_WAITINVOICES_WAITINVOICESSTATUS']._serialized_start=67573 - _globals['_WAITINVOICES_WAITINVOICESSTATUS']._serialized_end=67628 - _globals['_WAITSENDPAYS']._serialized_start=67690 - _globals['_WAITSENDPAYS']._serialized_end=67945 - _globals['_WAITSENDPAYS_WAITSENDPAYSSTATUS']._serialized_start=67835 - _globals['_WAITSENDPAYS_WAITSENDPAYSSTATUS']._serialized_end=67894 - _globals['_WAITHTLCS']._serialized_start=67948 - _globals['_WAITHTLCS']._serialized_end=68344 - _globals['_WAITHTLCS_WAITHTLCSDIRECTION']._serialized_start=68201 - _globals['_WAITHTLCS_WAITHTLCSDIRECTION']._serialized_end=68238 - _globals['_WAITCHAINMOVES']._serialized_start=68346 - _globals['_WAITCHAINMOVES']._serialized_end=68446 - _globals['_WAITCHANNELMOVES']._serialized_start=68448 - _globals['_WAITCHANNELMOVES']._serialized_end=68550 - _globals['_WAITNETWORKEVENTS']._serialized_start=68553 - _globals['_WAITNETWORKEVENTS']._serialized_end=68818 - _globals['_WAITNETWORKEVENTS_WAITNETWORKEVENTSTYPE']._serialized_start=68694 - _globals['_WAITNETWORKEVENTS_WAITNETWORKEVENTSTYPE']._serialized_end=68774 - _globals['_WAITDETAILS']._serialized_start=68821 - _globals['_WAITDETAILS']._serialized_end=69457 - _globals['_WAITDETAILS_WAITDETAILSSTATUS']._serialized_start=69163 - _globals['_WAITDETAILS_WAITDETAILSSTATUS']._serialized_end=69300 - _globals['_LISTCONFIGSREQUEST']._serialized_start=69459 - _globals['_LISTCONFIGSREQUEST']._serialized_end=69511 - _globals['_LISTCONFIGSRESPONSE']._serialized_start=69513 - _globals['_LISTCONFIGSRESPONSE']._serialized_end=69593 - _globals['_LISTCONFIGSCONFIGS']._serialized_start=69596 - _globals['_LISTCONFIGSCONFIGS']._serialized_end=75589 - _globals['_LISTCONFIGSCONFIGSCONF']._serialized_start=75592 - _globals['_LISTCONFIGSCONFIGSCONF']._serialized_end=75754 - _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_start=75711 - _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_end=75754 - _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_start=75756 - _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_end=75814 - _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_start=75816 - _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_end=75877 - _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_start=75879 - _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_end=75970 - _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_start=75972 - _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_end=76028 - _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_start=76030 - _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_end=76086 - _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_start=76088 - _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_end=76143 - _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_start=76145 - _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_end=76201 - _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_start=76203 - _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_end=76275 - _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_start=76277 - _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_end=76340 - _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_start=76342 - _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_end=76408 - _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_start=76410 - _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_end=76477 - _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_start=76479 - _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_end=76541 - _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_start=76543 - _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_end=76618 - _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_start=76620 - _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_end=76682 - _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_start=76684 - _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_end=76754 - _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_start=76756 - _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_end=76826 - _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_start=76828 - _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_end=76883 - _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_start=76885 - _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_end=76946 - _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_start=76948 - _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_end=77010 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_start=77012 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_end=77081 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_start=77083 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_end=77152 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_start=77154 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_end=77228 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_start=77230 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_end=77297 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_start=77299 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_end=77380 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_start=77382 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_end=77454 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_start=77456 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_end=77524 - _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_start=77526 - _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_end=77597 - _globals['_LISTCONFIGSCONFIGSRGB']._serialized_start=77599 - _globals['_LISTCONFIGSCONFIGSRGB']._serialized_end=77657 - _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_start=77659 - _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_end=77719 - _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_start=77721 - _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_end=77783 - _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_start=77785 - _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_end=77856 - _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_start=77858 - _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_end=77928 - _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_start=77930 - _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_end=78002 - _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_start=78004 - _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_end=78074 - _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_start=78076 - _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_end=78140 - _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_start=78142 - _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_end=78206 - _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_start=78208 - _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_end=78273 - _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_start=78275 - _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_end=78337 - _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_start=78339 - _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_end=78400 - _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_start=78402 - _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_end=78470 - _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_start=78472 - _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_end=78545 - _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_start=78547 - _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_end=78631 - _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_start=78633 - _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_end=78717 - _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_start=78719 - _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_end=78811 - _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_start=78813 - _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_end=78916 - _globals['_LISTCONFIGSCONFIGSADDR']._serialized_start=78918 - _globals['_LISTCONFIGSCONFIGSADDR']._serialized_end=78979 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_start=78981 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_end=79050 - _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_start=79052 - _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_end=79117 - _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_start=79119 - _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_end=79175 - _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_start=79177 - _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_end=79243 - _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_start=79245 - _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_end=79305 - _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_start=79307 - _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_end=79366 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_start=79369 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_end=79625 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_start=79544 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_end=79625 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_start=79627 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_end=79708 - _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_start=79710 - _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_end=79771 - _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_start=79773 - _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_end=79839 - _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_start=79841 - _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_end=79904 - _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_start=79906 - _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_end=79970 - _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_start=79972 - _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_end=80036 - _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_start=80038 - _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_end=80107 - _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_start=80109 - _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_end=80177 - _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_start=80179 - _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_end=80245 - _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_start=80247 - _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_end=80349 - _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_start=80351 - _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_end=80424 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_start=80426 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_end=80497 - _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_start=80499 - _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_end=80577 - _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_start=80579 - _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_end=80643 - _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_start=80645 - _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_end=80719 - _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_start=80721 - _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_end=80798 - _globals['_STOPREQUEST']._serialized_start=80800 - _globals['_STOPREQUEST']._serialized_end=80813 - _globals['_STOPRESPONSE']._serialized_start=80815 - _globals['_STOPRESPONSE']._serialized_end=80928 - _globals['_STOPRESPONSE_STOPRESULT']._serialized_start=80882 - _globals['_STOPRESPONSE_STOPRESULT']._serialized_end=80917 - _globals['_HELPREQUEST']._serialized_start=80930 - _globals['_HELPREQUEST']._serialized_end=80977 - _globals['_HELPRESPONSE']._serialized_start=80980 - _globals['_HELPRESPONSE']._serialized_end=81129 - _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_start=81085 - _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_end=81113 - _globals['_HELPHELP']._serialized_start=81131 - _globals['_HELPHELP']._serialized_end=81158 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_start=81160 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_end=81263 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_start=81265 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_end=81292 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_start=81294 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_end=81336 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_start=81338 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_end=81365 - _globals['_STATICBACKUPREQUEST']._serialized_start=81367 - _globals['_STATICBACKUPREQUEST']._serialized_end=81388 - _globals['_STATICBACKUPRESPONSE']._serialized_start=81390 - _globals['_STATICBACKUPRESPONSE']._serialized_end=81425 - _globals['_BKPRCHANNELSAPYREQUEST']._serialized_start=81427 - _globals['_BKPRCHANNELSAPYREQUEST']._serialized_end=81527 - _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_start=81529 - _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_end=81609 - _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_start=81612 - _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_end=82501 - _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_start=82504 - _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_end=82714 - _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_start=82717 - _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_end=82929 - _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_start=82843 - _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_end=82929 - _globals['_BKPRINSPECTREQUEST']._serialized_start=82931 - _globals['_BKPRINSPECTREQUEST']._serialized_end=82968 - _globals['_BKPRINSPECTRESPONSE']._serialized_start=82970 - _globals['_BKPRINSPECTRESPONSE']._serialized_end=83025 - _globals['_BKPRINSPECTTXS']._serialized_start=83028 - _globals['_BKPRINSPECTTXS']._serialized_end=83182 - _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_start=83185 - _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_end=83629 - _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_start=83631 - _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_end=83735 - _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_start=83737 - _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_end=83818 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_start=83821 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_end=84494 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_start=84297 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_end=84371 - _globals['_BKPRLISTBALANCESREQUEST']._serialized_start=84496 - _globals['_BKPRLISTBALANCESREQUEST']._serialized_end=84521 - _globals['_BKPRLISTBALANCESRESPONSE']._serialized_start=84523 - _globals['_BKPRLISTBALANCESRESPONSE']._serialized_end=84598 - _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_start=84601 - _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_end=84927 - _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_start=84929 - _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_end=85017 - _globals['_BKPRLISTINCOMEREQUEST']._serialized_start=85020 - _globals['_BKPRLISTINCOMEREQUEST']._serialized_end=85171 - _globals['_BKPRLISTINCOMERESPONSE']._serialized_start=85173 - _globals['_BKPRLISTINCOMERESPONSE']._serialized_end=85253 - _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_start=85256 - _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_end=85564 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_start=85566 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_end=85646 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_start=85648 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_end=85749 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_start=85752 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_end=86427 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_start=86253 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_end=86320 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_start=86429 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_end=86506 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_start=86508 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_end=86607 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_start=86610 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_end=87281 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_start=87108 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_end=87174 - _globals['_BLACKLISTRUNEREQUEST']._serialized_start=87283 - _globals['_BLACKLISTRUNEREQUEST']._serialized_end=87393 - _globals['_BLACKLISTRUNERESPONSE']._serialized_start=87395 - _globals['_BLACKLISTRUNERESPONSE']._serialized_end=87466 - _globals['_BLACKLISTRUNEBLACKLIST']._serialized_start=87468 - _globals['_BLACKLISTRUNEBLACKLIST']._serialized_end=87520 - _globals['_CHECKRUNEREQUEST']._serialized_start=87522 - _globals['_CHECKRUNEREQUEST']._serialized_end=87634 - _globals['_CHECKRUNERESPONSE']._serialized_start=87636 - _globals['_CHECKRUNERESPONSE']._serialized_end=87670 - _globals['_CREATERUNEREQUEST']._serialized_start=87672 - _globals['_CREATERUNEREQUEST']._serialized_end=87741 - _globals['_CREATERUNERESPONSE']._serialized_start=87743 - _globals['_CREATERUNERESPONSE']._serialized_end=87866 - _globals['_SHOWRUNESREQUEST']._serialized_start=87868 - _globals['_SHOWRUNESREQUEST']._serialized_end=87914 - _globals['_SHOWRUNESRESPONSE']._serialized_start=87916 - _globals['_SHOWRUNESRESPONSE']._serialized_end=87971 - _globals['_SHOWRUNESRUNES']._serialized_start=87974 - _globals['_SHOWRUNESRUNES']._serialized_end=88259 - _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_start=88261 - _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_end=88373 - _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_start=88375 - _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_end=88485 - _globals['_ASKRENEUNRESERVEREQUEST']._serialized_start=88487 - _globals['_ASKRENEUNRESERVEREQUEST']._serialized_end=88553 - _globals['_ASKRENEUNRESERVERESPONSE']._serialized_start=88555 - _globals['_ASKRENEUNRESERVERESPONSE']._serialized_end=88581 - _globals['_ASKRENEUNRESERVEPATH']._serialized_start=88584 - _globals['_ASKRENEUNRESERVEPATH']._serialized_end=88730 - _globals['_ASKRENELISTLAYERSREQUEST']._serialized_start=88732 - _globals['_ASKRENELISTLAYERSREQUEST']._serialized_end=88788 - _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_start=88790 - _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_end=88863 - _globals['_ASKRENELISTLAYERSLAYERS']._serialized_start=88866 - _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=89312 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=89315 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=89454 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=89457 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=89881 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=89884 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=90132 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=90135 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=90290 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=90293 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=90438 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=90440 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=90522 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=90524 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=90599 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=90602 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=91034 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=91037 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=91177 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=91180 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=91517 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=91520 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=91716 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=91719 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=91875 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=91878 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=92024 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=92026 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=92068 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=92070 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=92098 - _globals['_ASKRENERESERVEREQUEST']._serialized_start=92100 - _globals['_ASKRENERESERVEREQUEST']._serialized_end=92162 - _globals['_ASKRENERESERVERESPONSE']._serialized_start=92164 - _globals['_ASKRENERESERVERESPONSE']._serialized_end=92188 - _globals['_ASKRENERESERVEPATH']._serialized_start=92191 - _globals['_ASKRENERESERVEPATH']._serialized_end=92335 - _globals['_ASKRENEAGEREQUEST']._serialized_start=92337 - _globals['_ASKRENEAGEREQUEST']._serialized_end=92387 - _globals['_ASKRENEAGERESPONSE']._serialized_start=92389 - _globals['_ASKRENEAGERESPONSE']._serialized_end=92445 - _globals['_GETROUTESREQUEST']._serialized_start=92448 - _globals['_GETROUTESREQUEST']._serialized_end=92699 - _globals['_GETROUTESRESPONSE']._serialized_start=92701 - _globals['_GETROUTESRESPONSE']._serialized_end=92783 - _globals['_GETROUTESROUTES']._serialized_start=92786 - _globals['_GETROUTESROUTES']._serialized_end=92942 - _globals['_GETROUTESROUTESPATH']._serialized_start=92945 - _globals['_GETROUTESROUTESPATH']._serialized_end=93097 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=93099 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=93155 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=93157 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=93185 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=93188 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=93521 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=93390 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=93469 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=93523 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=93612 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=93615 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=93826 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=93829 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=93972 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=93974 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=94004 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=94007 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=94436 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=94438 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=94468 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=94471 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=94635 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=94637 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=94712 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=94715 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=94880 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=94883 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=95047 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=95049 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=95127 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=95130 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=95282 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=95284 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=95316 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=95318 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=95415 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=95418 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=95563 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=95566 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=95897 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=95899 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=96018 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=96020 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=96082 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=96084 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=96112 - _globals['_XPAYREQUEST']._serialized_start=96115 - _globals['_XPAYREQUEST']._serialized_end=96434 - _globals['_XPAYRESPONSE']._serialized_start=96437 - _globals['_XPAYRESPONSE']._serialized_end=96598 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=96600 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=96661 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=96663 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=96759 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=96762 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=96967 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=96901 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=96937 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=96969 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=97052 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=97055 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=97608 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=97416 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=97566 - _globals['_LISTCHAINMOVESREQUEST']._serialized_start=97611 - _globals['_LISTCHAINMOVESREQUEST']._serialized_end=97808 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=97744 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=97778 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=97810 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=97885 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=97888 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=98740 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=98375 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=98652 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=98743 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=98976 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=98902 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=98939 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=98978 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=99065 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=99068 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=99310 - _globals['_DELNETWORKEVENTREQUEST']._serialized_start=99312 - _globals['_DELNETWORKEVENTREQUEST']._serialized_end=99359 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=99361 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=99386 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=99388 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=99413 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=99415 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=99469 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=99471 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=99503 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=99505 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=99556 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=99558 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=99586 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=99588 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=99707 - _globals['_STREAMCONNECTREQUEST']._serialized_start=99709 - _globals['_STREAMCONNECTREQUEST']._serialized_end=99731 - _globals['_PEERCONNECTNOTIFICATION']._serialized_start=99734 - _globals['_PEERCONNECTNOTIFICATION']._serialized_end=99924 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=99885 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=99924 - _globals['_PEERCONNECTADDRESS']._serialized_start=99927 - _globals['_PEERCONNECTADDRESS']._serialized_end=100209 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=100078 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=100177 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=100211 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=100235 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=100237 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=100294 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=100296 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=100330 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=100333 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=100782 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=100636 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=100735 - _globals['_NODE']._serialized_start=100785 - _globals['_NODE']._serialized_end=111637 + _globals['_CLOSERESPONSE']._serialized_end=8691 + _globals['_CLOSERESPONSE_CLOSETYPE']._serialized_start=8638 + _globals['_CLOSERESPONSE_CLOSETYPE']._serialized_end=8691 + _globals['_CONNECTREQUEST']._serialized_start=8693 + _globals['_CONNECTREQUEST']._serialized_end=8777 + _globals['_CONNECTRESPONSE']._serialized_start=8780 + _globals['_CONNECTRESPONSE']._serialized_end=8960 + _globals['_CONNECTRESPONSE_CONNECTDIRECTION']._serialized_start=8925 + _globals['_CONNECTRESPONSE_CONNECTDIRECTION']._serialized_end=8960 + _globals['_CONNECTADDRESS']._serialized_start=8963 + _globals['_CONNECTADDRESS']._serialized_end=9214 + _globals['_CONNECTADDRESS_CONNECTADDRESSTYPE']._serialized_start=9102 + _globals['_CONNECTADDRESS_CONNECTADDRESSTYPE']._serialized_end=9182 + _globals['_CREATEINVOICEREQUEST']._serialized_start=9216 + _globals['_CREATEINVOICEREQUEST']._serialized_end=9290 + _globals['_CREATEINVOICERESPONSE']._serialized_start=9293 + _globals['_CREATEINVOICERESPONSE']._serialized_end=10058 + _globals['_CREATEINVOICERESPONSE_CREATEINVOICESTATUS']._serialized_start=9815 + _globals['_CREATEINVOICERESPONSE_CREATEINVOICESTATUS']._serialized_end=9871 + _globals['_CREATEINVOICEPAIDOUTPOINT']._serialized_start=10060 + _globals['_CREATEINVOICEPAIDOUTPOINT']._serialized_end=10117 + _globals['_DATASTOREREQUEST']._serialized_start=10120 + _globals['_DATASTOREREQUEST']._serialized_end=10428 + _globals['_DATASTOREREQUEST_DATASTOREMODE']._serialized_start=10273 + _globals['_DATASTOREREQUEST_DATASTOREMODE']._serialized_end=10385 + _globals['_DATASTORERESPONSE']._serialized_start=10431 + _globals['_DATASTORERESPONSE']._serialized_end=10561 + _globals['_DATASTOREUSAGEREQUEST']._serialized_start=10563 + _globals['_DATASTOREUSAGEREQUEST']._serialized_end=10599 + _globals['_DATASTOREUSAGERESPONSE']._serialized_start=10601 + _globals['_DATASTOREUSAGERESPONSE']._serialized_end=10684 + _globals['_DATASTOREUSAGEDATASTOREUSAGE']._serialized_start=10686 + _globals['_DATASTOREUSAGEDATASTOREUSAGE']._serialized_end=10750 + _globals['_CREATEONIONREQUEST']._serialized_start=10753 + _globals['_CREATEONIONREQUEST']._serialized_end=10910 + _globals['_CREATEONIONRESPONSE']._serialized_start=10912 + _globals['_CREATEONIONRESPONSE']._serialized_end=10972 + _globals['_CREATEONIONHOPS']._serialized_start=10974 + _globals['_CREATEONIONHOPS']._serialized_end=11024 + _globals['_DELDATASTOREREQUEST']._serialized_start=11026 + _globals['_DELDATASTOREREQUEST']._serialized_end=11100 + _globals['_DELDATASTORERESPONSE']._serialized_start=11103 + _globals['_DELDATASTORERESPONSE']._serialized_end=11236 + _globals['_DELINVOICEREQUEST']._serialized_start=11239 + _globals['_DELINVOICEREQUEST']._serialized_end=11421 + _globals['_DELINVOICEREQUEST_DELINVOICESTATUS']._serialized_start=11355 + _globals['_DELINVOICEREQUEST_DELINVOICESTATUS']._serialized_end=11408 + _globals['_DELINVOICERESPONSE']._serialized_start=11424 + _globals['_DELINVOICERESPONSE']._serialized_end=12166 + _globals['_DELINVOICERESPONSE_DELINVOICESTATUS']._serialized_start=11355 + _globals['_DELINVOICERESPONSE_DELINVOICESTATUS']._serialized_end=11408 + _globals['_DEVFORGETCHANNELREQUEST']._serialized_start=12169 + _globals['_DEVFORGETCHANNELREQUEST']._serialized_end=12328 + _globals['_DEVFORGETCHANNELRESPONSE']._serialized_start=12330 + _globals['_DEVFORGETCHANNELRESPONSE']._serialized_end=12419 + _globals['_EMERGENCYRECOVERREQUEST']._serialized_start=12421 + _globals['_EMERGENCYRECOVERREQUEST']._serialized_end=12446 + _globals['_EMERGENCYRECOVERRESPONSE']._serialized_start=12448 + _globals['_EMERGENCYRECOVERRESPONSE']._serialized_end=12489 + _globals['_GETEMERGENCYRECOVERDATAREQUEST']._serialized_start=12491 + _globals['_GETEMERGENCYRECOVERDATAREQUEST']._serialized_end=12523 + _globals['_GETEMERGENCYRECOVERDATARESPONSE']._serialized_start=12525 + _globals['_GETEMERGENCYRECOVERDATARESPONSE']._serialized_end=12576 + _globals['_EXPOSESECRETREQUEST']._serialized_start=12578 + _globals['_EXPOSESECRETREQUEST']._serialized_end=12659 + _globals['_EXPOSESECRETRESPONSE']._serialized_start=12661 + _globals['_EXPOSESECRETRESPONSE']._serialized_end=12756 + _globals['_RECOVERREQUEST']._serialized_start=12758 + _globals['_RECOVERREQUEST']._serialized_end=12793 + _globals['_RECOVERRESPONSE']._serialized_start=12796 + _globals['_RECOVERRESPONSE']._serialized_end=12932 + _globals['_RECOVERRESPONSE_RECOVERRESULT']._serialized_start=12872 + _globals['_RECOVERRESPONSE_RECOVERRESULT']._serialized_end=12921 + _globals['_RECOVERCHANNELREQUEST']._serialized_start=12934 + _globals['_RECOVERCHANNELREQUEST']._serialized_end=12970 + _globals['_RECOVERCHANNELRESPONSE']._serialized_start=12972 + _globals['_RECOVERCHANNELRESPONSE']._serialized_end=13011 + _globals['_INVOICEREQUEST']._serialized_start=13014 + _globals['_INVOICEREQUEST']._serialized_end=13295 + _globals['_INVOICERESPONSE']._serialized_start=13298 + _globals['_INVOICERESPONSE']._serialized_end=13703 + _globals['_INVOICEREQUESTREQUEST']._serialized_start=13706 + _globals['_INVOICEREQUESTREQUEST']._serialized_end=13931 + _globals['_INVOICEREQUESTRESPONSE']._serialized_start=13934 + _globals['_INVOICEREQUESTRESPONSE']._serialized_end=14073 + _globals['_DISABLEINVOICEREQUESTREQUEST']._serialized_start=14075 + _globals['_DISABLEINVOICEREQUESTREQUEST']._serialized_end=14124 + _globals['_DISABLEINVOICEREQUESTRESPONSE']._serialized_start=14127 + _globals['_DISABLEINVOICEREQUESTRESPONSE']._serialized_end=14273 + _globals['_LISTINVOICEREQUESTSREQUEST']._serialized_start=14275 + _globals['_LISTINVOICEREQUESTSREQUEST']._serialized_end=14383 + _globals['_LISTINVOICEREQUESTSRESPONSE']._serialized_start=14385 + _globals['_LISTINVOICEREQUESTSRESPONSE']._serialized_end=14480 + _globals['_LISTINVOICEREQUESTSINVOICEREQUESTS']._serialized_start=14483 + _globals['_LISTINVOICEREQUESTSINVOICEREQUESTS']._serialized_end=14634 + _globals['_LISTDATASTOREREQUEST']._serialized_start=14636 + _globals['_LISTDATASTOREREQUEST']._serialized_end=14671 + _globals['_LISTDATASTORERESPONSE']._serialized_start=14673 + _globals['_LISTDATASTORERESPONSE']._serialized_end=14744 + _globals['_LISTDATASTOREDATASTORE']._serialized_start=14747 + _globals['_LISTDATASTOREDATASTORE']._serialized_end=14882 + _globals['_LISTINVOICESREQUEST']._serialized_start=14885 + _globals['_LISTINVOICESREQUEST']._serialized_end=15235 + _globals['_LISTINVOICESREQUEST_LISTINVOICESINDEX']._serialized_start=15106 + _globals['_LISTINVOICESREQUEST_LISTINVOICESINDEX']._serialized_end=15151 + _globals['_LISTINVOICESRESPONSE']._serialized_start=15237 + _globals['_LISTINVOICESRESPONSE']._serialized_end=15304 + _globals['_LISTINVOICESINVOICES']._serialized_start=15307 + _globals['_LISTINVOICESINVOICES']._serialized_end=16158 + _globals['_LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS']._serialized_start=15874 + _globals['_LISTINVOICESINVOICES_LISTINVOICESINVOICESSTATUS']._serialized_end=15937 + _globals['_LISTINVOICESINVOICESPAIDOUTPOINT']._serialized_start=16160 + _globals['_LISTINVOICESINVOICESPAIDOUTPOINT']._serialized_end=16224 + _globals['_SENDONIONREQUEST']._serialized_start=16227 + _globals['_SENDONIONREQUEST']._serialized_end=16729 + _globals['_SENDONIONRESPONSE']._serialized_start=16732 + _globals['_SENDONIONRESPONSE']._serialized_end=17347 + _globals['_SENDONIONRESPONSE_SENDONIONSTATUS']._serialized_start=17159 + _globals['_SENDONIONRESPONSE_SENDONIONSTATUS']._serialized_end=17203 + _globals['_SENDONIONFIRSTHOP']._serialized_start=17349 + _globals['_SENDONIONFIRSTHOP']._serialized_end=17429 + _globals['_LISTSENDPAYSREQUEST']._serialized_start=17432 + _globals['_LISTSENDPAYSREQUEST']._serialized_end=17848 + _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS']._serialized_start=17673 + _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSSTATUS']._serialized_end=17732 + _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSINDEX']._serialized_start=17734 + _globals['_LISTSENDPAYSREQUEST_LISTSENDPAYSINDEX']._serialized_end=17779 + _globals['_LISTSENDPAYSRESPONSE']._serialized_start=17850 + _globals['_LISTSENDPAYSRESPONSE']._serialized_end=17917 + _globals['_LISTSENDPAYSPAYMENTS']._serialized_start=17920 + _globals['_LISTSENDPAYSPAYMENTS']._serialized_end=18684 + _globals['_LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS']._serialized_start=18437 + _globals['_LISTSENDPAYSPAYMENTS_LISTSENDPAYSPAYMENTSSTATUS']._serialized_end=18504 + _globals['_LISTTRANSACTIONSREQUEST']._serialized_start=18686 + _globals['_LISTTRANSACTIONSREQUEST']._serialized_end=18711 + _globals['_LISTTRANSACTIONSRESPONSE']._serialized_start=18713 + _globals['_LISTTRANSACTIONSRESPONSE']._serialized_end=18796 + _globals['_LISTTRANSACTIONSTRANSACTIONS']._serialized_start=18799 + _globals['_LISTTRANSACTIONSTRANSACTIONS']._serialized_end=19047 + _globals['_LISTTRANSACTIONSTRANSACTIONSINPUTS']._serialized_start=19049 + _globals['_LISTTRANSACTIONSTRANSACTIONSINPUTS']._serialized_end=19132 + _globals['_LISTTRANSACTIONSTRANSACTIONSOUTPUTS']._serialized_start=19134 + _globals['_LISTTRANSACTIONSTRANSACTIONSOUTPUTS']._serialized_end=19242 + _globals['_MAKESECRETREQUEST']._serialized_start=19244 + _globals['_MAKESECRETREQUEST']._serialized_end=19321 + _globals['_MAKESECRETRESPONSE']._serialized_start=19323 + _globals['_MAKESECRETRESPONSE']._serialized_end=19359 + _globals['_PAYREQUEST']._serialized_start=19362 + _globals['_PAYREQUEST']._serialized_end=19893 + _globals['_PAYRESPONSE']._serialized_start=19896 + _globals['_PAYRESPONSE']._serialized_end=20275 + _globals['_PAYRESPONSE_PAYSTATUS']._serialized_start=20178 + _globals['_PAYRESPONSE_PAYSTATUS']._serialized_end=20228 + _globals['_LISTNODESREQUEST']._serialized_start=20277 + _globals['_LISTNODESREQUEST']._serialized_end=20319 + _globals['_LISTNODESRESPONSE']._serialized_start=20321 + _globals['_LISTNODESRESPONSE']._serialized_end=20376 + _globals['_LISTNODESNODES']._serialized_start=20379 + _globals['_LISTNODESNODES']._serialized_end=20691 + _globals['_LISTNODESNODESOPTIONWILLFUND']._serialized_start=20694 + _globals['_LISTNODESNODESOPTIONWILLFUND']._serialized_end=20936 + _globals['_LISTNODESNODESADDRESSES']._serialized_start=20939 + _globals['_LISTNODESNODESADDRESSES']._serialized_end=21171 + _globals['_LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE']._serialized_start=21079 + _globals['_LISTNODESNODESADDRESSES_LISTNODESNODESADDRESSESTYPE']._serialized_end=21159 + _globals['_WAITANYINVOICEREQUEST']._serialized_start=21173 + _globals['_WAITANYINVOICEREQUEST']._serialized_end=21276 + _globals['_WAITANYINVOICERESPONSE']._serialized_start=21279 + _globals['_WAITANYINVOICERESPONSE']._serialized_end=22002 + _globals['_WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS']._serialized_start=21777 + _globals['_WAITANYINVOICERESPONSE_WAITANYINVOICESTATUS']._serialized_end=21822 + _globals['_WAITANYINVOICEPAIDOUTPOINT']._serialized_start=22004 + _globals['_WAITANYINVOICEPAIDOUTPOINT']._serialized_end=22062 + _globals['_WAITINVOICEREQUEST']._serialized_start=22064 + _globals['_WAITINVOICEREQUEST']._serialized_end=22099 + _globals['_WAITINVOICERESPONSE']._serialized_start=22102 + _globals['_WAITINVOICERESPONSE']._serialized_end=22810 + _globals['_WAITINVOICERESPONSE_WAITINVOICESTATUS']._serialized_start=22588 + _globals['_WAITINVOICERESPONSE_WAITINVOICESTATUS']._serialized_end=22630 + _globals['_WAITINVOICEPAIDOUTPOINT']._serialized_start=22812 + _globals['_WAITINVOICEPAIDOUTPOINT']._serialized_end=22867 + _globals['_WAITSENDPAYREQUEST']._serialized_start=22870 + _globals['_WAITSENDPAYREQUEST']._serialized_end=23012 + _globals['_WAITSENDPAYRESPONSE']._serialized_start=23015 + _globals['_WAITSENDPAYRESPONSE']._serialized_end=23669 + _globals['_WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS']._serialized_start=23475 + _globals['_WAITSENDPAYRESPONSE_WAITSENDPAYSTATUS']._serialized_end=23508 + _globals['_NEWADDRREQUEST']._serialized_start=23672 + _globals['_NEWADDRREQUEST']._serialized_end=23823 + _globals['_NEWADDRREQUEST_NEWADDRADDRESSTYPE']._serialized_start=23756 + _globals['_NEWADDRREQUEST_NEWADDRADDRESSTYPE']._serialized_end=23807 + _globals['_NEWADDRRESPONSE']._serialized_start=23825 + _globals['_NEWADDRRESPONSE']._serialized_end=23902 + _globals['_WITHDRAWREQUEST']._serialized_start=23905 + _globals['_WITHDRAWREQUEST']._serialized_end=24090 + _globals['_WITHDRAWRESPONSE']._serialized_start=24092 + _globals['_WITHDRAWRESPONSE']._serialized_end=24150 + _globals['_KEYSENDREQUEST']._serialized_start=24153 + _globals['_KEYSENDREQUEST']._serialized_end=24584 + _globals['_KEYSENDRESPONSE']._serialized_start=24587 + _globals['_KEYSENDRESPONSE']._serialized_end=24957 + _globals['_KEYSENDRESPONSE_KEYSENDSTATUS']._serialized_start=24881 + _globals['_KEYSENDRESPONSE_KEYSENDSTATUS']._serialized_end=24910 + _globals['_FUNDPSBTREQUEST']._serialized_start=24960 + _globals['_FUNDPSBTREQUEST']._serialized_end=25380 + _globals['_FUNDPSBTRESPONSE']._serialized_start=25383 + _globals['_FUNDPSBTRESPONSE']._serialized_end=25600 + _globals['_FUNDPSBTRESERVATIONS']._serialized_start=25602 + _globals['_FUNDPSBTRESERVATIONS']._serialized_end=25719 + _globals['_SENDPSBTREQUEST']._serialized_start=25721 + _globals['_SENDPSBTREQUEST']._serialized_end=25786 + _globals['_SENDPSBTRESPONSE']._serialized_start=25788 + _globals['_SENDPSBTRESPONSE']._serialized_end=25832 + _globals['_SIGNPSBTREQUEST']._serialized_start=25834 + _globals['_SIGNPSBTREQUEST']._serialized_end=25883 + _globals['_SIGNPSBTRESPONSE']._serialized_start=25885 + _globals['_SIGNPSBTRESPONSE']._serialized_end=25924 + _globals['_UTXOPSBTREQUEST']._serialized_start=25927 + _globals['_UTXOPSBTREQUEST']._serialized_end=26343 + _globals['_UTXOPSBTRESPONSE']._serialized_start=26346 + _globals['_UTXOPSBTRESPONSE']._serialized_end=26563 + _globals['_UTXOPSBTRESERVATIONS']._serialized_start=26565 + _globals['_UTXOPSBTRESERVATIONS']._serialized_end=26682 + _globals['_TXDISCARDREQUEST']._serialized_start=26684 + _globals['_TXDISCARDREQUEST']._serialized_end=26716 + _globals['_TXDISCARDRESPONSE']._serialized_start=26718 + _globals['_TXDISCARDRESPONSE']._serialized_end=26772 + _globals['_TXPREPAREREQUEST']._serialized_start=26775 + _globals['_TXPREPAREREQUEST']._serialized_end=26939 + _globals['_TXPREPARERESPONSE']._serialized_start=26941 + _globals['_TXPREPARERESPONSE']._serialized_end=27009 + _globals['_TXSENDREQUEST']._serialized_start=27011 + _globals['_TXSENDREQUEST']._serialized_end=27040 + _globals['_TXSENDRESPONSE']._serialized_start=27042 + _globals['_TXSENDRESPONSE']._serialized_end=27098 + _globals['_LISTPEERCHANNELSREQUEST']._serialized_start=27101 + _globals['_LISTPEERCHANNELSREQUEST']._serialized_end=27242 + _globals['_LISTPEERCHANNELSRESPONSE']._serialized_start=27244 + _globals['_LISTPEERCHANNELSRESPONSE']._serialized_end=27319 + _globals['_LISTPEERCHANNELSCHANNELS']._serialized_start=27322 + _globals['_LISTPEERCHANNELSCHANNELS']._serialized_end=30638 + _globals['_LISTPEERCHANNELSCHANNELSUPDATES']._serialized_start=30641 + _globals['_LISTPEERCHANNELSCHANNELSUPDATES']._serialized_end=30808 + _globals['_LISTPEERCHANNELSCHANNELSUPDATESLOCAL']._serialized_start=30811 + _globals['_LISTPEERCHANNELSCHANNELSUPDATESLOCAL']._serialized_end=31029 + _globals['_LISTPEERCHANNELSCHANNELSUPDATESREMOTE']._serialized_start=31032 + _globals['_LISTPEERCHANNELSCHANNELSUPDATESREMOTE']._serialized_end=31251 + _globals['_LISTPEERCHANNELSCHANNELSFEERATE']._serialized_start=31253 + _globals['_LISTPEERCHANNELSCHANNELSFEERATE']._serialized_end=31316 + _globals['_LISTPEERCHANNELSCHANNELSINFLIGHT']._serialized_start=31319 + _globals['_LISTPEERCHANNELSCHANNELSINFLIGHT']._serialized_end=31586 + _globals['_LISTPEERCHANNELSCHANNELSFUNDING']._serialized_start=31589 + _globals['_LISTPEERCHANNELSCHANNELSFUNDING']._serialized_end=31938 + _globals['_LISTPEERCHANNELSCHANNELSALIAS']._serialized_start=31940 + _globals['_LISTPEERCHANNELSCHANNELSALIAS']._serialized_end=32033 + _globals['_LISTPEERCHANNELSCHANNELSHTLCS']._serialized_start=32036 + _globals['_LISTPEERCHANNELSCHANNELSHTLCS']._serialized_end=32413 + _globals['_LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION']._serialized_start=32327 + _globals['_LISTPEERCHANNELSCHANNELSHTLCS_LISTPEERCHANNELSCHANNELSHTLCSDIRECTION']._serialized_end=32384 + _globals['_LISTCLOSEDCHANNELSREQUEST']._serialized_start=32415 + _globals['_LISTCLOSEDCHANNELSREQUEST']._serialized_end=32466 + _globals['_LISTCLOSEDCHANNELSRESPONSE']._serialized_start=32468 + _globals['_LISTCLOSEDCHANNELSRESPONSE']._serialized_end=32559 + _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS']._serialized_start=32562 + _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS']._serialized_end=33922 + _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSECAUSE']._serialized_start=33556 + _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELS_LISTCLOSEDCHANNELSCLOSEDCHANNELSCLOSECAUSE']._serialized_end=33673 + _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS']._serialized_start=33924 + _globals['_LISTCLOSEDCHANNELSCLOSEDCHANNELSALIAS']._serialized_end=34025 + _globals['_DECODEREQUEST']._serialized_start=34027 + _globals['_DECODEREQUEST']._serialized_end=34058 + _globals['_DECODERESPONSE']._serialized_start=34061 + _globals['_DECODERESPONSE']._serialized_end=39193 + _globals['_DECODERESPONSE_DECODETYPE']._serialized_start=37172 + _globals['_DECODERESPONSE_DECODETYPE']._serialized_end=37303 + _globals['_DECODEOFFERPATHS']._serialized_start=39196 + _globals['_DECODEOFFERPATHS']._serialized_end=39432 + _globals['_DECODEOFFERRECURRENCEPAYWINDOW']._serialized_start=39435 + _globals['_DECODEOFFERRECURRENCEPAYWINDOW']._serialized_end=39572 + _globals['_DECODEINVREQPATHS']._serialized_start=39575 + _globals['_DECODEINVREQPATHS']._serialized_end=39854 + _globals['_DECODEINVREQPATHSPATH']._serialized_start=39856 + _globals['_DECODEINVREQPATHSPATH']._serialized_end=39938 + _globals['_DECODEINVREQBIP353NAME']._serialized_start=39940 + _globals['_DECODEINVREQBIP353NAME']._serialized_end=40024 + _globals['_DECODEINVOICEPATHSPATH']._serialized_start=40026 + _globals['_DECODEINVOICEPATHSPATH']._serialized_end=40109 + _globals['_DECODEINVOICEFALLBACKS']._serialized_start=40111 + _globals['_DECODEINVOICEFALLBACKS']._serialized_end=40199 + _globals['_DECODEFALLBACKS']._serialized_start=40202 + _globals['_DECODEFALLBACKS']._serialized_end=40500 + _globals['_DECODEFALLBACKS_DECODEFALLBACKSTYPE']._serialized_start=40370 + _globals['_DECODEFALLBACKS_DECODEFALLBACKSTYPE']._serialized_end=40445 + _globals['_DECODEEXTRA']._serialized_start=40502 + _globals['_DECODEEXTRA']._serialized_end=40542 + _globals['_DECODERESTRICTIONS']._serialized_start=40544 + _globals['_DECODERESTRICTIONS']._serialized_end=40603 + _globals['_DELPAYREQUEST']._serialized_start=40606 + _globals['_DELPAYREQUEST']._serialized_end=40800 + _globals['_DELPAYREQUEST_DELPAYSTATUS']._serialized_start=40737 + _globals['_DELPAYREQUEST_DELPAYSTATUS']._serialized_end=40777 + _globals['_DELPAYRESPONSE']._serialized_start=40802 + _globals['_DELPAYRESPONSE']._serialized_end=40857 + _globals['_DELPAYPAYMENTS']._serialized_start=40860 + _globals['_DELPAYPAYMENTS']._serialized_end=41575 + _globals['_DELPAYPAYMENTS_DELPAYPAYMENTSSTATUS']._serialized_start=41338 + _globals['_DELPAYPAYMENTS_DELPAYPAYMENTSSTATUS']._serialized_end=41399 + _globals['_DELFORWARDREQUEST']._serialized_start=41578 + _globals['_DELFORWARDREQUEST']._serialized_end=41757 + _globals['_DELFORWARDREQUEST_DELFORWARDSTATUS']._serialized_start=41696 + _globals['_DELFORWARDREQUEST_DELFORWARDSTATUS']._serialized_end=41757 + _globals['_DELFORWARDRESPONSE']._serialized_start=41759 + _globals['_DELFORWARDRESPONSE']._serialized_end=41779 + _globals['_DISABLEOFFERREQUEST']._serialized_start=41781 + _globals['_DISABLEOFFERREQUEST']._serialized_end=41820 + _globals['_DISABLEOFFERRESPONSE']._serialized_start=41823 + _globals['_DISABLEOFFERRESPONSE']._serialized_end=42001 + _globals['_ENABLEOFFERREQUEST']._serialized_start=42003 + _globals['_ENABLEOFFERREQUEST']._serialized_end=42041 + _globals['_ENABLEOFFERRESPONSE']._serialized_start=42044 + _globals['_ENABLEOFFERRESPONSE']._serialized_end=42221 + _globals['_DISCONNECTREQUEST']._serialized_start=42223 + _globals['_DISCONNECTREQUEST']._serialized_end=42284 + _globals['_DISCONNECTRESPONSE']._serialized_start=42286 + _globals['_DISCONNECTRESPONSE']._serialized_end=42306 + _globals['_FEERATESREQUEST']._serialized_start=42308 + _globals['_FEERATESREQUEST']._serialized_end=42415 + _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_start=42378 + _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_end=42415 + _globals['_FEERATESRESPONSE']._serialized_start=42418 + _globals['_FEERATESRESPONSE']._serialized_end=42700 + _globals['_FEERATESPERKB']._serialized_start=42703 + _globals['_FEERATESPERKB']._serialized_end=43170 + _globals['_FEERATESPERKBESTIMATES']._serialized_start=43172 + _globals['_FEERATESPERKBESTIMATES']._serialized_end=43259 + _globals['_FEERATESPERKW']._serialized_start=43262 + _globals['_FEERATESPERKW']._serialized_end=43729 + _globals['_FEERATESPERKWESTIMATES']._serialized_start=43731 + _globals['_FEERATESPERKWESTIMATES']._serialized_end=43818 + _globals['_FEERATESONCHAINFEEESTIMATES']._serialized_start=43821 + _globals['_FEERATESONCHAINFEEESTIMATES']._serialized_end=44102 + _globals['_FETCHBIP353REQUEST']._serialized_start=44104 + _globals['_FETCHBIP353REQUEST']._serialized_end=44141 + _globals['_FETCHBIP353RESPONSE']._serialized_start=44143 + _globals['_FETCHBIP353RESPONSE']._serialized_end=44231 + _globals['_FETCHBIP353INSTRUCTIONS']._serialized_start=44234 + _globals['_FETCHBIP353INSTRUCTIONS']._serialized_end=44481 + _globals['_FETCHINVOICEREQUEST']._serialized_start=44484 + _globals['_FETCHINVOICEREQUEST']._serialized_end=44925 + _globals['_FETCHINVOICERESPONSE']._serialized_start=44928 + _globals['_FETCHINVOICERESPONSE']._serialized_end=45081 + _globals['_FETCHINVOICECHANGES']._serialized_start=45084 + _globals['_FETCHINVOICECHANGES']._serialized_end=45342 + _globals['_FETCHINVOICENEXTPERIOD']._serialized_start=45344 + _globals['_FETCHINVOICENEXTPERIOD']._serialized_end=45469 + _globals['_CANCELRECURRINGINVOICEREQUEST']._serialized_start=45472 + _globals['_CANCELRECURRINGINVOICEREQUEST']._serialized_end=45696 + _globals['_CANCELRECURRINGINVOICERESPONSE']._serialized_start=45698 + _globals['_CANCELRECURRINGINVOICERESPONSE']._serialized_end=45746 + _globals['_FUNDCHANNELCANCELREQUEST']._serialized_start=45748 + _globals['_FUNDCHANNELCANCELREQUEST']._serialized_end=45786 + _globals['_FUNDCHANNELCANCELRESPONSE']._serialized_start=45788 + _globals['_FUNDCHANNELCANCELRESPONSE']._serialized_end=45834 + _globals['_FUNDCHANNELCOMPLETEREQUEST']._serialized_start=45836 + _globals['_FUNDCHANNELCOMPLETEREQUEST']._serialized_end=45926 + _globals['_FUNDCHANNELCOMPLETERESPONSE']._serialized_start=45928 + _globals['_FUNDCHANNELCOMPLETERESPONSE']._serialized_end=46006 + _globals['_FUNDCHANNELREQUEST']._serialized_start=46009 + _globals['_FUNDCHANNELREQUEST']._serialized_end=46516 + _globals['_FUNDCHANNELRESPONSE']._serialized_start=46519 + _globals['_FUNDCHANNELRESPONSE']._serialized_end=46747 + _globals['_FUNDCHANNELCHANNELTYPE']._serialized_start=46749 + _globals['_FUNDCHANNELCHANNELTYPE']._serialized_end=46824 + _globals['_FUNDCHANNELSTARTREQUEST']._serialized_start=46827 + _globals['_FUNDCHANNELSTARTREQUEST']._serialized_end=47169 + _globals['_FUNDCHANNELSTARTRESPONSE']._serialized_start=47172 + _globals['_FUNDCHANNELSTARTRESPONSE']._serialized_end=47418 + _globals['_FUNDCHANNELSTARTCHANNELTYPE']._serialized_start=47420 + _globals['_FUNDCHANNELSTARTCHANNELTYPE']._serialized_end=47500 + _globals['_GETLOGREQUEST']._serialized_start=47503 + _globals['_GETLOGREQUEST']._serialized_end=47660 + _globals['_GETLOGREQUEST_GETLOGLEVEL']._serialized_start=47572 + _globals['_GETLOGREQUEST_GETLOGLEVEL']._serialized_end=47650 + _globals['_GETLOGRESPONSE']._serialized_start=47662 + _globals['_GETLOGRESPONSE']._serialized_end=47766 + _globals['_GETLOGLOG']._serialized_start=47769 + _globals['_GETLOGLOG']._serialized_end=48129 + _globals['_GETLOGLOG_GETLOGLOGTYPE']._serialized_start=47956 + _globals['_GETLOGLOG_GETLOGLOGTYPE']._serialized_end=48064 + _globals['_FUNDERUPDATEREQUEST']._serialized_start=48132 + _globals['_FUNDERUPDATEREQUEST']._serialized_end=49245 + _globals['_FUNDERUPDATEREQUEST_FUNDERUPDATEPOLICY']._serialized_start=48826 + _globals['_FUNDERUPDATEREQUEST_FUNDERUPDATEPOLICY']._serialized_end=48883 + _globals['_FUNDERUPDATERESPONSE']._serialized_start=49248 + _globals['_FUNDERUPDATERESPONSE']._serialized_end=50111 + _globals['_FUNDERUPDATERESPONSE_FUNDERUPDATEPOLICY']._serialized_start=48826 + _globals['_FUNDERUPDATERESPONSE_FUNDERUPDATEPOLICY']._serialized_end=48883 + _globals['_GETROUTEREQUEST']._serialized_start=50114 + _globals['_GETROUTEREQUEST']._serialized_end=50350 + _globals['_GETROUTERESPONSE']._serialized_start=50352 + _globals['_GETROUTERESPONSE']._serialized_end=50405 + _globals['_GETROUTEROUTE']._serialized_start=50408 + _globals['_GETROUTEROUTE']._serialized_end=50605 + _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_start=50576 + _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_end=50605 + _globals['_LISTADDRESSESREQUEST']._serialized_start=50607 + _globals['_LISTADDRESSESREQUEST']._serialized_end=50723 + _globals['_LISTADDRESSESRESPONSE']._serialized_start=50725 + _globals['_LISTADDRESSESRESPONSE']._serialized_end=50796 + _globals['_LISTADDRESSESADDRESSES']._serialized_start=50798 + _globals['_LISTADDRESSESADDRESSES']._serialized_end=50898 + _globals['_LISTFORWARDSREQUEST']._serialized_start=50901 + _globals['_LISTFORWARDSREQUEST']._serialized_end=51340 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_start=51145 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_end=51221 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSINDEX']._serialized_start=51223 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSINDEX']._serialized_end=51268 + _globals['_LISTFORWARDSRESPONSE']._serialized_start=51342 + _globals['_LISTFORWARDSRESPONSE']._serialized_end=51409 + _globals['_LISTFORWARDSFORWARDS']._serialized_start=51412 + _globals['_LISTFORWARDSFORWARDS']._serialized_end=52232 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_start=51933 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_end=52017 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_start=52019 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_end=52067 + _globals['_LISTOFFERSREQUEST']._serialized_start=52234 + _globals['_LISTOFFERSREQUEST']._serialized_end=52331 + _globals['_LISTOFFERSRESPONSE']._serialized_start=52333 + _globals['_LISTOFFERSRESPONSE']._serialized_end=52392 + _globals['_LISTOFFERSOFFERS']._serialized_start=52395 + _globals['_LISTOFFERSOFFERS']._serialized_end=52569 + _globals['_LISTPAYSREQUEST']._serialized_start=52572 + _globals['_LISTPAYSREQUEST']._serialized_end=52960 + _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_start=52793 + _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_end=52848 + _globals['_LISTPAYSREQUEST_LISTPAYSINDEX']._serialized_start=52850 + _globals['_LISTPAYSREQUEST_LISTPAYSINDEX']._serialized_end=52891 + _globals['_LISTPAYSRESPONSE']._serialized_start=52962 + _globals['_LISTPAYSRESPONSE']._serialized_end=53013 + _globals['_LISTPAYSPAYS']._serialized_start=53016 + _globals['_LISTPAYSPAYS']._serialized_end=53747 + _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_start=53486 + _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_end=53545 + _globals['_LISTHTLCSREQUEST']._serialized_start=53750 + _globals['_LISTHTLCSREQUEST']._serialized_end=53964 + _globals['_LISTHTLCSREQUEST_LISTHTLCSINDEX']._serialized_start=53885 + _globals['_LISTHTLCSREQUEST_LISTHTLCSINDEX']._serialized_end=53927 + _globals['_LISTHTLCSRESPONSE']._serialized_start=53966 + _globals['_LISTHTLCSRESPONSE']._serialized_end=54021 + _globals['_LISTHTLCSHTLCS']._serialized_start=54024 + _globals['_LISTHTLCSHTLCS']._serialized_end=54381 + _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_start=54303 + _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_end=54345 + _globals['_MULTIFUNDCHANNELREQUEST']._serialized_start=54384 + _globals['_MULTIFUNDCHANNELREQUEST']._serialized_end=54690 + _globals['_MULTIFUNDCHANNELRESPONSE']._serialized_start=54693 + _globals['_MULTIFUNDCHANNELRESPONSE']._serialized_end=54844 + _globals['_MULTIFUNDCHANNELDESTINATIONS']._serialized_start=54847 + _globals['_MULTIFUNDCHANNELDESTINATIONS']._serialized_end=55230 + _globals['_MULTIFUNDCHANNELCHANNELIDS']._serialized_start=55233 + _globals['_MULTIFUNDCHANNELCHANNELIDS']._serialized_end=55433 + _globals['_MULTIFUNDCHANNELCHANNELIDSCHANNELTYPE']._serialized_start=55435 + _globals['_MULTIFUNDCHANNELCHANNELIDSCHANNELTYPE']._serialized_end=55525 + _globals['_MULTIFUNDCHANNELFAILED']._serialized_start=55528 + _globals['_MULTIFUNDCHANNELFAILED']._serialized_end=55803 + _globals['_MULTIFUNDCHANNELFAILED_MULTIFUNDCHANNELFAILEDMETHOD']._serialized_start=55689 + _globals['_MULTIFUNDCHANNELFAILED_MULTIFUNDCHANNELFAILEDMETHOD']._serialized_end=55803 + _globals['_MULTIFUNDCHANNELFAILEDERROR']._serialized_start=55805 + _globals['_MULTIFUNDCHANNELFAILEDERROR']._serialized_end=55865 + _globals['_MULTIWITHDRAWREQUEST']._serialized_start=55868 + _globals['_MULTIWITHDRAWREQUEST']._serialized_end=56036 + _globals['_MULTIWITHDRAWRESPONSE']._serialized_start=56038 + _globals['_MULTIWITHDRAWRESPONSE']._serialized_end=56087 + _globals['_OFFERREQUEST']._serialized_start=56090 + _globals['_OFFERREQUEST']._serialized_end=56700 + _globals['_OFFERRESPONSE']._serialized_start=56703 + _globals['_OFFERRESPONSE']._serialized_end=56849 + _globals['_OPENCHANNELABORTREQUEST']._serialized_start=56851 + _globals['_OPENCHANNELABORTREQUEST']._serialized_end=56896 + _globals['_OPENCHANNELABORTRESPONSE']._serialized_start=56898 + _globals['_OPENCHANNELABORTRESPONSE']._serialized_end=56986 + _globals['_OPENCHANNELBUMPREQUEST']._serialized_start=56989 + _globals['_OPENCHANNELBUMPREQUEST']._serialized_end=57147 + _globals['_OPENCHANNELBUMPRESPONSE']._serialized_start=57150 + _globals['_OPENCHANNELBUMPRESPONSE']._serialized_end=57409 + _globals['_OPENCHANNELBUMPCHANNELTYPE']._serialized_start=57411 + _globals['_OPENCHANNELBUMPCHANNELTYPE']._serialized_end=57490 + _globals['_OPENCHANNELINITREQUEST']._serialized_start=57493 + _globals['_OPENCHANNELINITREQUEST']._serialized_end=57908 + _globals['_OPENCHANNELINITRESPONSE']._serialized_start=57911 + _globals['_OPENCHANNELINITRESPONSE']._serialized_end=58170 + _globals['_OPENCHANNELINITCHANNELTYPE']._serialized_start=58172 + _globals['_OPENCHANNELINITCHANNELTYPE']._serialized_end=58251 + _globals['_OPENCHANNELSIGNEDREQUEST']._serialized_start=58253 + _globals['_OPENCHANNELSIGNEDREQUEST']._serialized_end=58320 + _globals['_OPENCHANNELSIGNEDRESPONSE']._serialized_start=58322 + _globals['_OPENCHANNELSIGNEDRESPONSE']._serialized_end=58395 + _globals['_OPENCHANNELUPDATEREQUEST']._serialized_start=58397 + _globals['_OPENCHANNELUPDATEREQUEST']._serialized_end=58457 + _globals['_OPENCHANNELUPDATERESPONSE']._serialized_start=58460 + _globals['_OPENCHANNELUPDATERESPONSE']._serialized_end=58759 + _globals['_OPENCHANNELUPDATECHANNELTYPE']._serialized_start=58761 + _globals['_OPENCHANNELUPDATECHANNELTYPE']._serialized_end=58842 + _globals['_PINGREQUEST']._serialized_start=58844 + _globals['_PINGREQUEST']._serialized_end=58933 + _globals['_PINGRESPONSE']._serialized_start=58935 + _globals['_PINGRESPONSE']._serialized_end=58965 + _globals['_PLUGINREQUEST']._serialized_start=58968 + _globals['_PLUGINREQUEST']._serialized_end=59113 + _globals['_PLUGINRESPONSE']._serialized_start=59115 + _globals['_PLUGINRESPONSE']._serialized_end=59240 + _globals['_PLUGINPLUGINS']._serialized_start=59242 + _globals['_PLUGINPLUGINS']._serialized_end=59304 + _globals['_RENEPAYSTATUSREQUEST']._serialized_start=59306 + _globals['_RENEPAYSTATUSREQUEST']._serialized_end=59366 + _globals['_RENEPAYSTATUSRESPONSE']._serialized_start=59368 + _globals['_RENEPAYSTATUSRESPONSE']._serialized_end=59439 + _globals['_RENEPAYSTATUSPAYSTATUS']._serialized_start=59442 + _globals['_RENEPAYSTATUSPAYSTATUS']._serialized_end=59924 + _globals['_RENEPAYSTATUSPAYSTATUS_RENEPAYSTATUSPAYSTATUSSTATUS']._serialized_start=59787 + _globals['_RENEPAYSTATUSPAYSTATUS_RENEPAYSTATUSPAYSTATUSSTATUS']._serialized_end=59856 + _globals['_RENEPAYREQUEST']._serialized_start=59927 + _globals['_RENEPAYREQUEST']._serialized_end=60273 + _globals['_RENEPAYRESPONSE']._serialized_start=60276 + _globals['_RENEPAYRESPONSE']._serialized_end=60697 + _globals['_RENEPAYRESPONSE_RENEPAYSTATUS']._serialized_start=60593 + _globals['_RENEPAYRESPONSE_RENEPAYSTATUS']._serialized_end=60647 + _globals['_RESERVEINPUTSREQUEST']._serialized_start=60699 + _globals['_RESERVEINPUTSREQUEST']._serialized_end=60807 + _globals['_RESERVEINPUTSRESPONSE']._serialized_start=60809 + _globals['_RESERVEINPUTSRESPONSE']._serialized_end=60886 + _globals['_RESERVEINPUTSRESERVATIONS']._serialized_start=60888 + _globals['_RESERVEINPUTSRESERVATIONS']._serialized_end=61010 + _globals['_SENDCUSTOMMSGREQUEST']._serialized_start=61012 + _globals['_SENDCUSTOMMSGREQUEST']._serialized_end=61064 + _globals['_SENDCUSTOMMSGRESPONSE']._serialized_start=61066 + _globals['_SENDCUSTOMMSGRESPONSE']._serialized_end=61105 + _globals['_SENDINVOICEREQUEST']._serialized_start=61108 + _globals['_SENDINVOICEREQUEST']._serialized_end=61284 + _globals['_SENDINVOICERESPONSE']._serialized_start=61287 + _globals['_SENDINVOICERESPONSE']._serialized_end=61878 + _globals['_SENDINVOICERESPONSE_SENDINVOICESTATUS']._serialized_start=61689 + _globals['_SENDINVOICERESPONSE_SENDINVOICESTATUS']._serialized_end=61743 + _globals['_SETCHANNELREQUEST']._serialized_start=61881 + _globals['_SETCHANNELREQUEST']._serialized_end=62179 + _globals['_SETCHANNELRESPONSE']._serialized_start=62181 + _globals['_SETCHANNELRESPONSE']._serialized_end=62244 + _globals['_SETCHANNELCHANNELS']._serialized_start=62247 + _globals['_SETCHANNELCHANNELS']._serialized_end=62705 + _globals['_SETCONFIGREQUEST']._serialized_start=62707 + _globals['_SETCONFIGREQUEST']._serialized_end=62805 + _globals['_SETCONFIGRESPONSE']._serialized_start=62807 + _globals['_SETCONFIGRESPONSE']._serialized_end=62864 + _globals['_SETCONFIGCONFIG']._serialized_start=62867 + _globals['_SETCONFIGCONFIG']._serialized_end=63160 + _globals['_SETPSBTVERSIONREQUEST']._serialized_start=63162 + _globals['_SETPSBTVERSIONREQUEST']._serialized_end=63216 + _globals['_SETPSBTVERSIONRESPONSE']._serialized_start=63218 + _globals['_SETPSBTVERSIONRESPONSE']._serialized_end=63256 + _globals['_SIGNINVOICEREQUEST']._serialized_start=63258 + _globals['_SIGNINVOICEREQUEST']._serialized_end=63297 + _globals['_SIGNINVOICERESPONSE']._serialized_start=63299 + _globals['_SIGNINVOICERESPONSE']._serialized_end=63336 + _globals['_SIGNMESSAGEREQUEST']._serialized_start=63338 + _globals['_SIGNMESSAGEREQUEST']._serialized_end=63375 + _globals['_SIGNMESSAGERESPONSE']._serialized_start=63377 + _globals['_SIGNMESSAGERESPONSE']._serialized_end=63447 + _globals['_SPLICEINITREQUEST']._serialized_start=63450 + _globals['_SPLICEINITREQUEST']._serialized_end=63650 + _globals['_SPLICEINITRESPONSE']._serialized_start=63652 + _globals['_SPLICEINITRESPONSE']._serialized_end=63686 + _globals['_SPLICESIGNEDREQUEST']._serialized_start=63688 + _globals['_SPLICESIGNEDREQUEST']._serialized_end=63783 + _globals['_SPLICESIGNEDRESPONSE']._serialized_start=63785 + _globals['_SPLICESIGNEDRESPONSE']._serialized_end=63879 + _globals['_SPLICEUPDATEREQUEST']._serialized_start=63881 + _globals['_SPLICEUPDATEREQUEST']._serialized_end=63936 + _globals['_SPLICEUPDATERESPONSE']._serialized_start=63938 + _globals['_SPLICEUPDATERESPONSE']._serialized_end=64059 + _globals['_DEVSPLICEREQUEST']._serialized_start=64062 + _globals['_DEVSPLICEREQUEST']._serialized_end=64260 + _globals['_DEVSPLICERESPONSE']._serialized_start=64263 + _globals['_DEVSPLICERESPONSE']._serialized_end=64391 + _globals['_UNRESERVEINPUTSREQUEST']._serialized_start=64393 + _globals['_UNRESERVEINPUTSREQUEST']._serialized_end=64465 + _globals['_UNRESERVEINPUTSRESPONSE']._serialized_start=64467 + _globals['_UNRESERVEINPUTSRESPONSE']._serialized_end=64548 + _globals['_UNRESERVEINPUTSRESERVATIONS']._serialized_start=64551 + _globals['_UNRESERVEINPUTSRESERVATIONS']._serialized_end=64702 + _globals['_UPGRADEWALLETREQUEST']._serialized_start=64704 + _globals['_UPGRADEWALLETREQUEST']._serialized_end=64814 + _globals['_UPGRADEWALLETRESPONSE']._serialized_start=64817 + _globals['_UPGRADEWALLETRESPONSE']._serialized_end=64966 + _globals['_WAITBLOCKHEIGHTREQUEST']._serialized_start=64968 + _globals['_WAITBLOCKHEIGHTREQUEST']._serialized_end=65047 + _globals['_WAITBLOCKHEIGHTRESPONSE']._serialized_start=65049 + _globals['_WAITBLOCKHEIGHTRESPONSE']._serialized_end=65095 + _globals['_WAITREQUEST']._serialized_start=65098 + _globals['_WAITREQUEST']._serialized_end=65411 + _globals['_WAITREQUEST_WAITSUBSYSTEM']._serialized_start=65234 + _globals['_WAITREQUEST_WAITSUBSYSTEM']._serialized_end=65355 + _globals['_WAITREQUEST_WAITINDEXNAME']._serialized_start=65357 + _globals['_WAITREQUEST_WAITINDEXNAME']._serialized_end=65411 + _globals['_WAITRESPONSE']._serialized_start=65414 + _globals['_WAITRESPONSE']._serialized_end=66166 + _globals['_WAITRESPONSE_WAITSUBSYSTEM']._serialized_start=65234 + _globals['_WAITRESPONSE_WAITSUBSYSTEM']._serialized_end=65355 + _globals['_WAITFORWARDS']._serialized_start=66169 + _globals['_WAITFORWARDS']._serialized_end=66500 + _globals['_WAITFORWARDS_WAITFORWARDSSTATUS']._serialized_start=66355 + _globals['_WAITFORWARDS_WAITFORWARDSSTATUS']._serialized_end=66431 + _globals['_WAITINVOICES']._serialized_start=66503 + _globals['_WAITINVOICES']._serialized_end=66780 + _globals['_WAITINVOICES_WAITINVOICESSTATUS']._serialized_start=66666 + _globals['_WAITINVOICES_WAITINVOICESSTATUS']._serialized_end=66721 + _globals['_WAITSENDPAYS']._serialized_start=66783 + _globals['_WAITSENDPAYS']._serialized_end=67038 + _globals['_WAITSENDPAYS_WAITSENDPAYSSTATUS']._serialized_start=66928 + _globals['_WAITSENDPAYS_WAITSENDPAYSSTATUS']._serialized_end=66987 + _globals['_WAITHTLCS']._serialized_start=67041 + _globals['_WAITHTLCS']._serialized_end=67437 + _globals['_WAITHTLCS_WAITHTLCSDIRECTION']._serialized_start=67294 + _globals['_WAITHTLCS_WAITHTLCSDIRECTION']._serialized_end=67331 + _globals['_WAITCHAINMOVES']._serialized_start=67439 + _globals['_WAITCHAINMOVES']._serialized_end=67539 + _globals['_WAITCHANNELMOVES']._serialized_start=67541 + _globals['_WAITCHANNELMOVES']._serialized_end=67643 + _globals['_WAITNETWORKEVENTS']._serialized_start=67646 + _globals['_WAITNETWORKEVENTS']._serialized_end=67911 + _globals['_WAITNETWORKEVENTS_WAITNETWORKEVENTSTYPE']._serialized_start=67787 + _globals['_WAITNETWORKEVENTS_WAITNETWORKEVENTSTYPE']._serialized_end=67867 + _globals['_WAITDETAILS']._serialized_start=67914 + _globals['_WAITDETAILS']._serialized_end=68550 + _globals['_WAITDETAILS_WAITDETAILSSTATUS']._serialized_start=68256 + _globals['_WAITDETAILS_WAITDETAILSSTATUS']._serialized_end=68393 + _globals['_LISTCONFIGSREQUEST']._serialized_start=68552 + _globals['_LISTCONFIGSREQUEST']._serialized_end=68604 + _globals['_LISTCONFIGSRESPONSE']._serialized_start=68606 + _globals['_LISTCONFIGSRESPONSE']._serialized_end=68686 + _globals['_LISTCONFIGSCONFIGS']._serialized_start=68689 + _globals['_LISTCONFIGSCONFIGS']._serialized_end=74918 + _globals['_LISTCONFIGSCONFIGSCONF']._serialized_start=74921 + _globals['_LISTCONFIGSCONFIGSCONF']._serialized_end=75083 + _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_start=75040 + _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_end=75083 + _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_start=75085 + _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_end=75143 + _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_start=75145 + _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_end=75206 + _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_start=75208 + _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_end=75299 + _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_start=75301 + _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_end=75357 + _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_start=75359 + _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_end=75415 + _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_start=75417 + _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_end=75472 + _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_start=75474 + _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_end=75530 + _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_start=75532 + _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_end=75604 + _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_start=75606 + _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_end=75669 + _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_start=75671 + _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_end=75737 + _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_start=75739 + _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_end=75806 + _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_start=75808 + _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_end=75870 + _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_start=75872 + _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_end=75947 + _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_start=75949 + _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_end=76011 + _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_start=76013 + _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_end=76083 + _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_start=76085 + _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_end=76155 + _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_start=76157 + _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_end=76212 + _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_start=76214 + _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_end=76275 + _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_start=76277 + _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_end=76339 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_start=76341 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_end=76410 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_start=76412 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_end=76481 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_start=76483 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_end=76557 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_start=76559 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_end=76626 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_start=76628 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_end=76709 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_start=76711 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_end=76783 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_start=76785 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_end=76853 + _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_start=76855 + _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_end=76926 + _globals['_LISTCONFIGSCONFIGSRGB']._serialized_start=76928 + _globals['_LISTCONFIGSCONFIGSRGB']._serialized_end=76986 + _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_start=76988 + _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_end=77048 + _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_start=77050 + _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_end=77112 + _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_start=77114 + _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_end=77185 + _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_start=77187 + _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_end=77257 + _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_start=77259 + _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_end=77331 + _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_start=77333 + _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_end=77403 + _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_start=77405 + _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_end=77469 + _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_start=77471 + _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_end=77535 + _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_start=77537 + _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_end=77602 + _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_start=77604 + _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_end=77666 + _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_start=77668 + _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_end=77729 + _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_start=77731 + _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_end=77799 + _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_start=77801 + _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_end=77874 + _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_start=77876 + _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_end=77960 + _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_start=77962 + _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_end=78046 + _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_start=78048 + _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_end=78140 + _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_start=78142 + _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_end=78245 + _globals['_LISTCONFIGSCONFIGSADDR']._serialized_start=78247 + _globals['_LISTCONFIGSCONFIGSADDR']._serialized_end=78308 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_start=78310 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_end=78379 + _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_start=78381 + _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_end=78446 + _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_start=78448 + _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_end=78504 + _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_start=78506 + _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_end=78572 + _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_start=78574 + _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_end=78634 + _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_start=78636 + _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_end=78695 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_start=78698 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_end=78954 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_start=78873 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_end=78954 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_start=78956 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_end=79037 + _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_start=79039 + _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_end=79100 + _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_start=79102 + _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_end=79168 + _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_start=79170 + _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_end=79233 + _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_start=79235 + _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_end=79299 + _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_start=79301 + _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_end=79365 + _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_start=79367 + _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_end=79436 + _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_start=79438 + _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_end=79506 + _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_start=79508 + _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_end=79574 + _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_start=79576 + _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_end=79678 + _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_start=79680 + _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_end=79753 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_start=79755 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_end=79826 + _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_start=79828 + _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_end=79906 + _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_start=79908 + _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_end=79972 + _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_start=79974 + _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_end=80048 + _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_start=80050 + _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_end=80127 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEADDSOURCE']._serialized_start=80129 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEADDSOURCE']._serialized_end=80239 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEDISABLESOURCE']._serialized_start=80241 + _globals['_LISTCONFIGSCONFIGSCURRENCYRATEDISABLESOURCE']._serialized_end=80355 + _globals['_STOPREQUEST']._serialized_start=80357 + _globals['_STOPREQUEST']._serialized_end=80370 + _globals['_STOPRESPONSE']._serialized_start=80372 + _globals['_STOPRESPONSE']._serialized_end=80485 + _globals['_STOPRESPONSE_STOPRESULT']._serialized_start=80439 + _globals['_STOPRESPONSE_STOPRESULT']._serialized_end=80474 + _globals['_HELPREQUEST']._serialized_start=80487 + _globals['_HELPREQUEST']._serialized_end=80534 + _globals['_HELPRESPONSE']._serialized_start=80537 + _globals['_HELPRESPONSE']._serialized_end=80686 + _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_start=80642 + _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_end=80670 + _globals['_HELPHELP']._serialized_start=80688 + _globals['_HELPHELP']._serialized_end=80715 + _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_start=80717 + _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_end=80820 + _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_start=80822 + _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_end=80849 + _globals['_PREAPPROVEINVOICEREQUEST']._serialized_start=80851 + _globals['_PREAPPROVEINVOICEREQUEST']._serialized_end=80893 + _globals['_PREAPPROVEINVOICERESPONSE']._serialized_start=80895 + _globals['_PREAPPROVEINVOICERESPONSE']._serialized_end=80922 + _globals['_STATICBACKUPREQUEST']._serialized_start=80924 + _globals['_STATICBACKUPREQUEST']._serialized_end=80945 + _globals['_STATICBACKUPRESPONSE']._serialized_start=80947 + _globals['_STATICBACKUPRESPONSE']._serialized_end=80982 + _globals['_BKPRCHANNELSAPYREQUEST']._serialized_start=80984 + _globals['_BKPRCHANNELSAPYREQUEST']._serialized_end=81084 + _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_start=81086 + _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_end=81166 + _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_start=81169 + _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_end=82058 + _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_start=82061 + _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_end=82271 + _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_start=82274 + _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_end=82486 + _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_start=82400 + _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_end=82486 + _globals['_BKPRINSPECTREQUEST']._serialized_start=82488 + _globals['_BKPRINSPECTREQUEST']._serialized_end=82525 + _globals['_BKPRINSPECTRESPONSE']._serialized_start=82527 + _globals['_BKPRINSPECTRESPONSE']._serialized_end=82582 + _globals['_BKPRINSPECTTXS']._serialized_start=82585 + _globals['_BKPRINSPECTTXS']._serialized_end=82739 + _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_start=82742 + _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_end=83186 + _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_start=83188 + _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_end=83292 + _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_start=83294 + _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_end=83375 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_start=83378 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_end=84051 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_start=83854 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_end=83928 + _globals['_BKPRLISTBALANCESREQUEST']._serialized_start=84053 + _globals['_BKPRLISTBALANCESREQUEST']._serialized_end=84078 + _globals['_BKPRLISTBALANCESRESPONSE']._serialized_start=84080 + _globals['_BKPRLISTBALANCESRESPONSE']._serialized_end=84155 + _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_start=84158 + _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_end=84484 + _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_start=84486 + _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_end=84574 + _globals['_BKPRLISTINCOMEREQUEST']._serialized_start=84577 + _globals['_BKPRLISTINCOMEREQUEST']._serialized_end=84728 + _globals['_BKPRLISTINCOMERESPONSE']._serialized_start=84730 + _globals['_BKPRLISTINCOMERESPONSE']._serialized_end=84810 + _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_start=84813 + _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_end=85121 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_start=85123 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_end=85203 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_start=85205 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_end=85306 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_start=85309 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_end=85984 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_start=85810 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_end=85877 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_start=85986 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_end=86063 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_start=86065 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_end=86164 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_start=86167 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_end=86838 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_start=86665 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_end=86731 + _globals['_BLACKLISTRUNEREQUEST']._serialized_start=86840 + _globals['_BLACKLISTRUNEREQUEST']._serialized_end=86950 + _globals['_BLACKLISTRUNERESPONSE']._serialized_start=86952 + _globals['_BLACKLISTRUNERESPONSE']._serialized_end=87023 + _globals['_BLACKLISTRUNEBLACKLIST']._serialized_start=87025 + _globals['_BLACKLISTRUNEBLACKLIST']._serialized_end=87077 + _globals['_CHECKRUNEREQUEST']._serialized_start=87079 + _globals['_CHECKRUNEREQUEST']._serialized_end=87191 + _globals['_CHECKRUNERESPONSE']._serialized_start=87193 + _globals['_CHECKRUNERESPONSE']._serialized_end=87227 + _globals['_CREATERUNEREQUEST']._serialized_start=87229 + _globals['_CREATERUNEREQUEST']._serialized_end=87298 + _globals['_CREATERUNERESPONSE']._serialized_start=87300 + _globals['_CREATERUNERESPONSE']._serialized_end=87423 + _globals['_SHOWRUNESREQUEST']._serialized_start=87425 + _globals['_SHOWRUNESREQUEST']._serialized_end=87471 + _globals['_SHOWRUNESRESPONSE']._serialized_start=87473 + _globals['_SHOWRUNESRESPONSE']._serialized_end=87528 + _globals['_SHOWRUNESRUNES']._serialized_start=87531 + _globals['_SHOWRUNESRUNES']._serialized_end=87816 + _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_start=87818 + _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_end=87930 + _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_start=87932 + _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_end=88042 + _globals['_ASKRENEUNRESERVEREQUEST']._serialized_start=88044 + _globals['_ASKRENEUNRESERVEREQUEST']._serialized_end=88110 + _globals['_ASKRENEUNRESERVERESPONSE']._serialized_start=88112 + _globals['_ASKRENEUNRESERVERESPONSE']._serialized_end=88138 + _globals['_ASKRENEUNRESERVEPATH']._serialized_start=88141 + _globals['_ASKRENEUNRESERVEPATH']._serialized_end=88287 + _globals['_ASKRENELISTLAYERSREQUEST']._serialized_start=88289 + _globals['_ASKRENELISTLAYERSREQUEST']._serialized_end=88345 + _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_start=88347 + _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_end=88420 + _globals['_ASKRENELISTLAYERSLAYERS']._serialized_start=88423 + _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=88869 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=88872 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=89011 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=89014 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=89438 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=89441 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=89689 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=89692 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=89847 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=89850 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=89995 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=89997 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=90079 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=90081 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=90156 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=90159 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=90591 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=90594 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=90734 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=90737 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=91074 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=91077 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=91273 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=91276 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=91432 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=91435 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=91581 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=91583 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=91625 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=91627 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=91655 + _globals['_ASKRENERESERVEREQUEST']._serialized_start=91657 + _globals['_ASKRENERESERVEREQUEST']._serialized_end=91719 + _globals['_ASKRENERESERVERESPONSE']._serialized_start=91721 + _globals['_ASKRENERESERVERESPONSE']._serialized_end=91745 + _globals['_ASKRENERESERVEPATH']._serialized_start=91748 + _globals['_ASKRENERESERVEPATH']._serialized_end=91892 + _globals['_ASKRENEAGEREQUEST']._serialized_start=91894 + _globals['_ASKRENEAGEREQUEST']._serialized_end=91944 + _globals['_ASKRENEAGERESPONSE']._serialized_start=91946 + _globals['_ASKRENEAGERESPONSE']._serialized_end=92002 + _globals['_GETROUTESREQUEST']._serialized_start=92005 + _globals['_GETROUTESREQUEST']._serialized_end=92256 + _globals['_GETROUTESRESPONSE']._serialized_start=92258 + _globals['_GETROUTESRESPONSE']._serialized_end=92340 + _globals['_GETROUTESROUTES']._serialized_start=92343 + _globals['_GETROUTESROUTES']._serialized_end=92499 + _globals['_GETROUTESROUTESPATH']._serialized_start=92502 + _globals['_GETROUTESROUTESPATH']._serialized_end=92654 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=92656 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=92712 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=92714 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=92742 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=92745 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=93078 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=92947 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=93026 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=93080 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=93169 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=93172 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=93383 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=93386 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=93529 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=93531 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=93561 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=93564 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=93993 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=93995 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=94025 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=94028 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=94192 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=94194 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=94269 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=94272 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=94437 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=94440 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=94604 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=94606 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=94684 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=94687 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=94839 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=94841 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=94873 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=94875 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=94972 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=94975 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=95120 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=95123 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=95454 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=95456 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=95575 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=95577 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=95639 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=95641 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=95669 + _globals['_XPAYREQUEST']._serialized_start=95672 + _globals['_XPAYREQUEST']._serialized_end=95991 + _globals['_XPAYRESPONSE']._serialized_start=95994 + _globals['_XPAYRESPONSE']._serialized_end=96155 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=96157 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=96218 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=96220 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=96316 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=96319 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=96524 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=96458 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=96494 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=96526 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=96609 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=96612 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=97165 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=96973 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=97123 + _globals['_LISTCHAINMOVESREQUEST']._serialized_start=97168 + _globals['_LISTCHAINMOVESREQUEST']._serialized_end=97365 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=97301 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=97335 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=97367 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=97442 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=97445 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=98297 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=97932 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=98209 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=98300 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=98533 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=98459 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=98496 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=98535 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=98622 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=98625 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=98867 + _globals['_DELNETWORKEVENTREQUEST']._serialized_start=98869 + _globals['_DELNETWORKEVENTREQUEST']._serialized_end=98916 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=98918 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=98943 + _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_start=98946 + _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_end=99192 + _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_start=99194 + _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_end=99223 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_start=99226 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_end=99444 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_start=99377 + _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_end=99422 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=99446 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=99471 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=99473 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=99527 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=99529 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=99561 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=99563 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=99614 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=99616 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=99644 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=99646 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=99765 + _globals['_STREAMCONNECTREQUEST']._serialized_start=99767 + _globals['_STREAMCONNECTREQUEST']._serialized_end=99789 + _globals['_PEERCONNECTNOTIFICATION']._serialized_start=99792 + _globals['_PEERCONNECTNOTIFICATION']._serialized_end=99982 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=99943 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=99982 + _globals['_PEERCONNECTADDRESS']._serialized_start=99985 + _globals['_PEERCONNECTADDRESS']._serialized_end=100267 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=100136 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=100235 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=100269 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=100293 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=100295 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=100352 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=100354 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=100388 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=100391 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=100840 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=100694 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=100793 + _globals['_NODE']._serialized_start=100843 + _globals['_NODE']._serialized_end=111725 # @@protoc_insertion_point(module_scope) diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py index 887eee54648c..0e686ba0dc29 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py @@ -289,11 +289,6 @@ def __init__(self, channel): request_serializer=node__pb2.ListclosedchannelsRequest.SerializeToString, response_deserializer=node__pb2.ListclosedchannelsResponse.FromString, _registered_method=True) - self.DecodePay = channel.unary_unary( - '/cln.Node/DecodePay', - request_serializer=node__pb2.DecodepayRequest.SerializeToString, - response_deserializer=node__pb2.DecodepayResponse.FromString, - _registered_method=True) self.Decode = channel.unary_unary( '/cln.Node/Decode', request_serializer=node__pb2.DecodeRequest.SerializeToString, @@ -744,6 +739,11 @@ def __init__(self, channel): request_serializer=node__pb2.DelnetworkeventRequest.SerializeToString, response_deserializer=node__pb2.DelnetworkeventResponse.FromString, _registered_method=True) + self.ClnrestRegisterPath = channel.unary_unary( + '/cln.Node/ClnrestRegisterPath', + request_serializer=node__pb2.ClnrestregisterpathRequest.SerializeToString, + response_deserializer=node__pb2.ClnrestregisterpathResponse.FromString, + _registered_method=True) self.SubscribeBlockAdded = channel.unary_stream( '/cln.Node/SubscribeBlockAdded', request_serializer=node__pb2.StreamBlockAddedRequest.SerializeToString, @@ -1085,12 +1085,6 @@ def ListClosedChannels(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def DecodePay(self, request, context): - """Missing associated documentation comment in .proto file.""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') - def Decode(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -1631,6 +1625,12 @@ def DelNetworkEvent(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ClnrestRegisterPath(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def SubscribeBlockAdded(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -1925,11 +1925,6 @@ def add_NodeServicer_to_server(servicer, server): request_deserializer=node__pb2.ListclosedchannelsRequest.FromString, response_serializer=node__pb2.ListclosedchannelsResponse.SerializeToString, ), - 'DecodePay': grpc.unary_unary_rpc_method_handler( - servicer.DecodePay, - request_deserializer=node__pb2.DecodepayRequest.FromString, - response_serializer=node__pb2.DecodepayResponse.SerializeToString, - ), 'Decode': grpc.unary_unary_rpc_method_handler( servicer.Decode, request_deserializer=node__pb2.DecodeRequest.FromString, @@ -2380,6 +2375,11 @@ def add_NodeServicer_to_server(servicer, server): request_deserializer=node__pb2.DelnetworkeventRequest.FromString, response_serializer=node__pb2.DelnetworkeventResponse.SerializeToString, ), + 'ClnrestRegisterPath': grpc.unary_unary_rpc_method_handler( + servicer.ClnrestRegisterPath, + request_deserializer=node__pb2.ClnrestregisterpathRequest.FromString, + response_serializer=node__pb2.ClnrestregisterpathResponse.SerializeToString, + ), 'SubscribeBlockAdded': grpc.unary_stream_rpc_method_handler( servicer.SubscribeBlockAdded, request_deserializer=node__pb2.StreamBlockAddedRequest.FromString, @@ -3798,33 +3798,6 @@ def ListClosedChannels(request, metadata, _registered_method=True) - @staticmethod - def DecodePay(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/cln.Node/DecodePay', - node__pb2.DecodepayRequest.SerializeToString, - node__pb2.DecodepayResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) - @staticmethod def Decode(request, target, @@ -6255,6 +6228,33 @@ def DelNetworkEvent(request, metadata, _registered_method=True) + @staticmethod + def ClnrestRegisterPath(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/cln.Node/ClnrestRegisterPath', + node__pb2.ClnrestregisterpathRequest.SerializeToString, + node__pb2.ClnrestregisterpathResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + @staticmethod def SubscribeBlockAdded(request, target, diff --git a/contrib/pyln-testing/pyln/testing/fixtures.py b/contrib/pyln-testing/pyln/testing/fixtures.py index db4206a1279c..e04d6d8e7929 100644 --- a/contrib/pyln-testing/pyln/testing/fixtures.py +++ b/contrib/pyln-testing/pyln/testing/fixtures.py @@ -1,6 +1,6 @@ from concurrent import futures from pyln.testing.db import SqliteDbProvider, PostgresDbProvider -from pyln.testing.utils import NodeFactory, BitcoinD, ElementsD, env, LightningNode, TEST_DEBUG, TEST_NETWORK +from pyln.testing.utils import NodeFactory, BitcoinD, ElementsD, env, LightningNode, TEST_DEBUG, TEST_NETWORK, SLOW_MACHINE, VALGRIND from pyln.client import Millisatoshi from typing import Dict from pathlib import Path @@ -59,6 +59,9 @@ def setup_logging(): if TEST_DEBUG: logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) + if env("TEST_LOG_IGNORE_ERRORS", "0") == "1": + logging.raiseExceptions = False + yield loggers = [logging.getLogger()] + list(logging.Logger.manager.loggerDict.values()) @@ -411,6 +414,17 @@ def is_currency(checker, instance): return True return False + def is_string_map(checker, instance): + """key, value map with strings""" + if not checker.is_type(instance, "object"): + return False + for k, v in instance.items(): + if not checker.is_type(k, "string"): + return False + if not checker.is_type(v, "string"): + return False + return True + # "msat" for request can be many forms if is_request: is_msat = is_msat_request @@ -439,6 +453,7 @@ def is_currency(checker, instance): "outpoint": is_outpoint, "feerate": is_feerate, "outputdesc": is_outputdesc, + "string_map": is_string_map, }) return jsonschema.validators.extend(jsonschema.Draft7Validator, @@ -498,7 +513,7 @@ def map_node_error(nodes, f, msg): map_node_error(nf.nodes, printValgrindErrors, "reported valgrind errors") map_node_error(nf.nodes, printCrashLog, "had crash.log files") - map_node_error(nf.nodes, checkBroken, "had BROKEN messages") + map_node_error(nf.nodes, checkBroken, "had BROKEN or That's weird messages") map_node_error(nf.nodes, lambda n: not n.allow_warning and n.daemon.is_in_log(r' WARNING:'), "had warning messages") map_node_error(nf.nodes, checkReconnect, "had unexpected reconnections") map_node_error(nf.nodes, checkPluginJSON, "had malformed hooks/notifications") @@ -620,6 +635,10 @@ def checkBroken(node): if node.broken_log: ex = re.compile(node.broken_log) broken_lines = [l for l in broken_lines if not ex.search(l)] + # Valgrind under CI can be really slow, so we get spurious alerts + if SLOW_MACHINE and VALGRIND: + slowreq = re.compile("That's weird: Request .* took [0-9]* milliseconds") + broken_lines = [l for l in broken_lines if not slowreq.search(l)] if broken_lines: print(broken_lines) return 1 diff --git a/contrib/pyln-testing/pyln/testing/grpc2py.py b/contrib/pyln-testing/pyln/testing/grpc2py.py index 2a8feab854db..7439ed7e9d9b 100644 --- a/contrib/pyln-testing/pyln/testing/grpc2py.py +++ b/contrib/pyln-testing/pyln/testing/grpc2py.py @@ -335,8 +335,6 @@ def close2py(m): "txids": [hexlify(m.txids) for i in hexlify(m.txids)], # ArrayField[primitive] in generate_composite "txs": [hexlify(m.txs) for i in hexlify(m.txs)], # ArrayField[primitive] in generate_composite "type": str(m.item_type), # EnumField in generate_composite - "tx": hexlify(m.tx), # PrimitiveField in generate_composite - "txid": hexlify(m.txid), # PrimitiveField in generate_composite }) @@ -1116,42 +1114,6 @@ def listclosedchannels2py(m): }) -def decodepay_extra2py(m): - return remove_default({ - "data": m.data, # PrimitiveField in generate_composite - "tag": m.tag, # PrimitiveField in generate_composite - }) - - -def decodepay_fallbacks2py(m): - return remove_default({ - "type": str(m.item_type), # EnumField in generate_composite - "addr": m.addr, # PrimitiveField in generate_composite - "hex": hexlify(m.hex), # PrimitiveField in generate_composite - }) - - -def decodepay2py(m): - return remove_default({ - "extra": [decodepay_extra2py(i) for i in m.extra], # ArrayField[composite] in generate_composite - "fallbacks": [decodepay_fallbacks2py(i) for i in m.fallbacks], # ArrayField[composite] in generate_composite - "amount_msat": amount2msat(m.amount_msat), # PrimitiveField in generate_composite - "created_at": m.created_at, # PrimitiveField in generate_composite - "currency": m.currency, # PrimitiveField in generate_composite - "description": m.description, # PrimitiveField in generate_composite - "description_hash": hexlify(m.description_hash), # PrimitiveField in generate_composite - "expiry": m.expiry, # PrimitiveField in generate_composite - "features": hexlify(m.features), # PrimitiveField in generate_composite - "min_final_cltv_expiry": m.min_final_cltv_expiry, # PrimitiveField in generate_composite - "payee": hexlify(m.payee), # PrimitiveField in generate_composite - "payment_hash": hexlify(m.payment_hash), # PrimitiveField in generate_composite - "payment_metadata": hexlify(m.payment_metadata), # PrimitiveField in generate_composite - "payment_secret": hexlify(m.payment_secret), # PrimitiveField in generate_composite - "routes": [[decodepay_routes2py(i) for i in routehints] for routehints in m.routes], # OverrideField in DecodeRoutehintList - "signature": hexlify(m.signature), # PrimitiveField in generate_composite - }) - - def decode_extra2py(m): return remove_default({ "data": m.data, # PrimitiveField in generate_composite @@ -2342,6 +2304,22 @@ def listconfigs_configs_conf2py(m): }) +def listconfigs_configs_currencyrate_add_source2py(m): + return remove_default({ + "sources": [m.sources for i in m.sources], # ArrayField[primitive] in generate_composite + "values_str": [m.values_str for i in m.values_str], # ArrayField[primitive] in generate_composite + "plugin": m.plugin, # PrimitiveField in generate_composite + }) + + +def listconfigs_configs_currencyrate_disable_source2py(m): + return remove_default({ + "sources": [m.sources for i in m.sources], # ArrayField[primitive] in generate_composite + "values_str": [m.values_str for i in m.values_str], # ArrayField[primitive] in generate_composite + "plugin": m.plugin, # PrimitiveField in generate_composite + }) + + def listconfigs_configs_daemon2py(m): return remove_default({ "set": m.set, # PrimitiveField in generate_composite @@ -3379,6 +3357,11 @@ def delnetworkevent2py(m): }) +def clnrest_register_path2py(m): + return remove_default({ + }) + + def decodekeysend_routes2py(m): # manual override return remove_default({ "expirydelta": m.expirydelta, diff --git a/contrib/pyln-testing/pyln/testing/utils.py b/contrib/pyln-testing/pyln/testing/utils.py index 8607cd9bdf1d..e6b01bf89133 100644 --- a/contrib/pyln-testing/pyln/testing/utils.py +++ b/contrib/pyln-testing/pyln/testing/utils.py @@ -17,6 +17,7 @@ import logging import lzma import math +import mnemonic import os import random import re @@ -291,15 +292,43 @@ def cleanup_files(self): except Exception: pass + def readlines_wait_for_end(self, f, timeout=TIMEOUT): + """Read all complete lines from file object `f`. + + If the last line is incomplete (no trailing newline), wait briefly + for it to complete before returning. + + Returns list of lines including trailing newline. + """ + lines = [] + cur = '' + start = time.time() + + while True: + line = f.readline() + + if not line: + if cur != '': + if time.time() - start > timeout: + raise TimeoutError(f"Incomplete line never finished: {cur}") + time.sleep(0.01) + continue + return lines + + cur += line + if cur.endswith('\n'): + lines.append(cur) + cur = '' + def logs_catchup(self): """Save the latest stdout / stderr contents; return true if we got anything. """ - new_stdout = self.stdout_read.readlines() + new_stdout = self.readlines_wait_for_end(self.stdout_read) if self.verbose: for line in new_stdout: sys.stdout.write("{}: {}".format(self.prefix, line)) self.logs += [l.rstrip() for l in new_stdout] - new_stderr = self.stderr_read.readlines() + new_stderr = self.readlines_wait_for_end(self.stderr_read) if self.verbose: for line in new_stderr: sys.stderr.write("{}-stderr: {}".format(self.prefix, line)) @@ -664,6 +693,14 @@ def getnewaddress(self): return info['unconfidential'] +def mnemonic_from_seed(seed): + m = mnemonic.Mnemonic('english') + mnem = m.to_mnemonic(seed) + if not m.check(mnem): + raise RuntimeError("Generated mnemonic failed BIP39 validation (unexpected).") + return mnem + + class LightningD(TailableProc): def __init__( self, @@ -673,6 +710,7 @@ def __init__( random_hsm=False, node_id=0, executable=None, + old_hsmsecret=None, ): # We handle our own version of verbose, below. TailableProc.__init__(self, lightning_dir, verbose=False) @@ -714,11 +752,24 @@ def __init__( if not os.path.exists(os.path.join(lightning_dir, TEST_NETWORK)): os.makedirs(os.path.join(lightning_dir, TEST_NETWORK)) - # Last 32-bytes of final part of dir -> seed. - seed = (bytes(re.search('([^/]+)/*$', lightning_dir).group(1), encoding='utf-8') + bytes(32))[:32] + # Default: use newfangled hsm_secret, except old versions. + if old_hsmsecret is None: + # BIP 39 secrets were only added in v25.12. + old_hsmsecret = (self.cln_version < "v25.12") + if not random_hsm: + # Last 32-bytes of final part of dir -> seed. + seed = (bytes(re.search('([^/]+)/*$', lightning_dir).group(1), encoding='utf-8') + bytes(32))[:32] + # Modern style is 32 zeroes then a 12-word mnemonic phrase. + if not old_hsmsecret: + # Use first 16 bytes (128 bits) for 12-word mnemonic + entropy_128 = seed[:16] + mnemonic_phrase = mnemonic_from_seed(entropy_128) + seed = bytes(32) + bytes(mnemonic_phrase, encoding='utf-8') + with open(os.path.join(lightning_dir, TEST_NETWORK, 'hsm_secret'), 'wb') as f: f.write(seed) + self.opts['dev-fast-gossip'] = None self.opts['dev-bitcoind-poll'] = 1 self.prefix = 'lightningd-%d' % (node_id) @@ -841,7 +892,7 @@ def call(self, method, payload=None, cmdprefix=None, filter=None): class LightningNode(object): - def __init__(self, node_id, lightning_dir, bitcoind, executor, valgrind, may_fail=False, + def __init__(self, node_id, lightning_dir, bitcoind, executor, may_fail=False, may_reconnect=False, broken_log=None, allow_warning=False, @@ -851,6 +902,7 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, valgrind, may_fai valgrind_plugins=True, executable=None, bad_notifications=False, + old_hsmsecret=None, **kwargs): self.bitcoin = bitcoind self.executor = executor @@ -875,6 +927,7 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, valgrind, may_fai lightning_dir, bitcoindproxy=bitcoind.get_proxy(), port=port, random_hsm=random_hsm, node_id=node_id, executable=executable, + old_hsmsecret=old_hsmsecret, ) self.cln_version = self.daemon.cln_version @@ -900,7 +953,7 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, valgrind, may_fai self.daemon.opts["dev-debugger"] = dbgvar if os.getenv("DEBUG_LIGHTNINGD"): self.daemon.opts["dev-debug-self"] = None - if valgrind: + if VALGRIND: self.daemon.env["LIGHTNINGD_DEV_NO_BACKTRACE"] = "1" self.daemon.opts["dev-no-plugin-checksum"] = None else: @@ -926,8 +979,8 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, valgrind, may_fai dsn = db.get_dsn() if dsn is not None: self.daemon.opts['wallet'] = dsn - if valgrind: - trace_skip_pattern = '*python*,*bitcoin-cli*,*elements-cli*,*cln-grpc*,*clnrest*,*wss-proxy*,*cln-bip353*,*reckless' + if VALGRIND: + trace_skip_pattern = '*python*,*bitcoin-cli*,*elements-cli*,*cln-grpc*,*clnrest*,*wss-proxy*,*cln-bip353*,*reckless,*cln-currencyrate*' if not valgrind_plugins: trace_skip_pattern += ',*plugins*' self.daemon.cmd_prefix = [ @@ -1653,10 +1706,6 @@ class NodeFactory(object): """ def __init__(self, request, testname, bitcoind, executor, directory, db_provider, node_cls, jsonschemas): - if request.node.get_closest_marker("slow_test") and SLOW_MACHINE: - self.valgrind = False - else: - self.valgrind = VALGRIND self.testname = testname # Set test name in environment for coverage file organization @@ -1693,6 +1742,7 @@ def split_options(self, opts): 'allow_bad_gossip', 'start', 'gossip_store_file', + 'old_hsmsecret', ] node_opts = {k: v for k, v in opts.items() if k in node_opt_keys} cli_opts = {k: v for k, v in opts.items() if k not in node_opt_keys} @@ -1755,7 +1805,7 @@ def get_node(self, node_id=None, options=None, dbfile=None, db = self.db_provider.get_db(os.path.join(lightning_dir, TEST_NETWORK), self.testname, node_id) db.provider = self.db_provider node = self.node_cls( - node_id, lightning_dir, self.bitcoind, self.executor, self.valgrind, db=db, + node_id, lightning_dir, self.bitcoind, self.executor, db=db, port=port, grpc_port=grpc_port, options=options, may_fail=may_fail or expect_fail, jsonschemas=self.jsonschemas, **kwargs @@ -1872,7 +1922,7 @@ def killall(self, expected_successes): # leak detection upsets VALGRIND by reading uninitialized mem, # and valgrind adds extra fds. # If it's dead, we'll catch it below. - if not self.valgrind: + if not VALGRIND: try: # This also puts leaks in log. leaks = self.nodes[i].rpc.dev_memleak()['leaks'] diff --git a/db/common.h b/db/common.h index 2533d7be1238..c22391e54de7 100644 --- a/db/common.h +++ b/db/common.h @@ -66,6 +66,9 @@ struct db { /* Fatal if we try to write to db */ bool readonly; + + /* Set during migrations to skip STRICT on legacy table creation */ + bool in_migration; }; struct db_query { diff --git a/db/db_sqlite3.c b/db/db_sqlite3.c index ed63989d4f66..d3c6f30f2c84 100644 --- a/db/db_sqlite3.c +++ b/db/db_sqlite3.c @@ -203,7 +203,23 @@ static bool db_sqlite3_setup(struct db *db, bool create) "PRAGMA foreign_keys = ON;", -1, &stmt, NULL); err = sqlite3_step(stmt); sqlite3_finalize(stmt); - return err == SQLITE_DONE; + + if (err != SQLITE_DONE) + return false; + + if (db->developer) { + sqlite3_prepare_v2(conn2sql(db->conn), + "PRAGMA trusted_schema = OFF;", -1, &stmt, NULL); + sqlite3_step(stmt); + sqlite3_finalize(stmt); + + sqlite3_prepare_v2(conn2sql(db->conn), + "PRAGMA cell_size_check = ON;", -1, &stmt, NULL); + sqlite3_step(stmt); + sqlite3_finalize(stmt); + } + + return true; } static bool db_sqlite3_query(struct db_stmt *stmt) @@ -211,8 +227,20 @@ static bool db_sqlite3_query(struct db_stmt *stmt) sqlite3_stmt *s; sqlite3 *conn = conn2sql(stmt->db->conn); int err; + const char *query = stmt->query->query; + char *modified_query = NULL; + + if (stmt->db->developer && + !stmt->db->in_migration && + strncasecmp(query, "CREATE TABLE", 12) == 0 && + !strstr(query, "STRICT")) { + modified_query = tal_fmt(stmt, "%s STRICT", query); + query = modified_query; + } + + err = sqlite3_prepare_v2(conn, query, -1, &s, NULL); - err = sqlite3_prepare_v2(conn, stmt->query->query, -1, &s, NULL); + tal_free(modified_query); for (size_t i=0; iquery->placeholders; i++) { struct db_binding *b = &stmt->bindings[i]; diff --git a/db/utils.c b/db/utils.c index d6234179df5a..2091111089ce 100644 --- a/db/utils.c +++ b/db/utils.c @@ -364,6 +364,7 @@ struct db *db_open_(const tal_t *ctx, const char *filename, db->in_transaction = NULL; db->transaction_started = false; db->changes = NULL; + db->in_migration = false; /* This must be outside a transaction, so catch it */ assert(!db->in_transaction); diff --git a/devtools/Makefile b/devtools/Makefile index b7c4874032e3..3d84e9279ed9 100644 --- a/devtools/Makefile +++ b/devtools/Makefile @@ -20,11 +20,6 @@ $(DEVTOOLS): %: %.o libcommon.a $(DEVTOOLS_TOOL_OBJS): wire/wire.h # Some devtools require extra objects -DEVTOOLS_NEEDS_GOSSIP_STORE := devtools/gossmap-compress devtools/dump-gossipstore devtools/convert-gossmap devtools/create-gossipstore - -$(DEVTOOLS_NEEDS_GOSSIP_STORE): gossipd/gossip_store_wiregen.o -$(DEVTOOLS_NEEDS_GOSSIP_STORE:=.o): gossipd/gossip_store_wiregen.h - devtools/decodemsg: devtools/print_wire.o devtools/decodemsg.o: devtools/print_wire.h diff --git a/devtools/cc-nobuild b/devtools/cc-nobuild new file mode 100755 index 000000000000..118385581f41 --- /dev/null +++ b/devtools/cc-nobuild @@ -0,0 +1,9 @@ +#! /bin/sh +# Version of CC which only supports -dumpmachine (for external/Makefile), and fails otherwise +set -e + +if [ x"$*" = x"-dumpmachine" ]; then + CC="$(grep ^CC= config.vars | cut -d= -f2-)" + exec ${CC:=cc} "$@" +fi +exit 1 diff --git a/devtools/convert-gossmap.c b/devtools/convert-gossmap.c index c5ee23c9dfc9..efc30855cd42 100644 --- a/devtools/convert-gossmap.c +++ b/devtools/convert-gossmap.c @@ -3,8 +3,8 @@ #include #include #include +#include #include -#include #include #include diff --git a/devtools/create-gossipstore.c b/devtools/create-gossipstore.c index 320ad9f37e1a..226324e34f50 100644 --- a/devtools/create-gossipstore.c +++ b/devtools/create-gossipstore.c @@ -4,9 +4,9 @@ #include #include #include +#include #include #include -#include #include #include #include diff --git a/devtools/dump-gossipstore.c b/devtools/dump-gossipstore.c index 2d69b0637040..252edf943efa 100644 --- a/devtools/dump-gossipstore.c +++ b/devtools/dump-gossipstore.c @@ -3,16 +3,86 @@ #include #include #include +#include +#include #include #include -#include +#include #include #include #include /* Current versions we support */ #define GSTORE_MAJOR 0 -#define GSTORE_MINOR 15 +#define GSTORE_MINOR 16 + +/* Ended marker for <= 15 */ +static bool fromwire_gossip_store_ended_obs(const void *p, u64 *equivalent_offset) +{ + const u8 *cursor = p; + size_t plen = tal_count(p); + + if (fromwire_u16(&cursor, &plen) != WIRE_GOSSIP_STORE_ENDED) + return false; + *equivalent_offset = fromwire_u64(&cursor, &plen); + return cursor != NULL; +} + + +static bool is_channel_announce(const u8 *msg, struct short_channel_id **scid) +{ + secp256k1_ecdsa_signature sig; + u8 *features; + struct bitcoin_blkid chain_hash; + struct node_id node; + struct pubkey key; + + if (fromwire_peektype(msg) != WIRE_CHANNEL_ANNOUNCEMENT) + return false; + + *scid = tal(msg, struct short_channel_id); + if (!fromwire_channel_announcement(msg, msg, &sig, &sig, &sig, &sig, &features, + &chain_hash, *scid, &node, &node, &key, &key)) + *scid = tal_free(*scid); + return true; +} + +static bool is_channel_update(const u8 *msg, struct short_channel_id_dir **scidd) +{ + secp256k1_ecdsa_signature sig; + struct bitcoin_blkid chain_hash; + u32 u32val; + u8 message_flags, channel_flags; + u16 cltv_expiry_delta; + struct amount_msat msat; + + if (fromwire_peektype(msg) != WIRE_CHANNEL_UPDATE) + return false; + + *scidd = tal(msg, struct short_channel_id_dir); + if (fromwire_channel_update(msg, &sig, &chain_hash, &(*scidd)->scid, &u32val, &message_flags, &channel_flags, &cltv_expiry_delta, &msat, &u32val, &u32val, &msat)) + (*scidd)->dir = (channel_flags & ROUTING_FLAGS_DIRECTION); + else + *scidd = tal_free(*scidd); + return true; +} + +static bool is_node_announcement(const u8 *msg, struct node_id **node) +{ + secp256k1_ecdsa_signature sig; + u8 *u8arr; + u32 timestamp; + u8 rgb_color[3], alias[32]; + struct tlv_node_ann_tlvs *tlvs; + + if (fromwire_peektype(msg) != WIRE_NODE_ANNOUNCEMENT) + return false; + + *node = tal(msg, struct node_id); + if (!fromwire_node_announcement(msg, msg, &sig, &u8arr, ×tamp, *node, rgb_color, alias, &u8arr, &tlvs)) + *node = tal_free(*node); + return true; +} int main(int argc, char *argv[]) { @@ -23,7 +93,7 @@ int main(int argc, char *argv[]) bool print_deleted = false; bool print_timestamp = false; - setup_locale(); + common_setup(argv[0]); opt_register_noarg("--print-deleted", opt_set_bool, &print_deleted, "Print deleted entries too"); opt_register_noarg("--print-timestamps", opt_set_bool, &print_timestamp, @@ -64,12 +134,16 @@ int main(int argc, char *argv[]) while (read(fd, &hdr, sizeof(hdr)) == sizeof(hdr)) { struct amount_sat sat; - struct short_channel_id scid; + struct short_channel_id scid, *scidptr; + struct short_channel_id_dir *sciddptr; + struct node_id *nodeptr; u16 flags = be16_to_cpu(hdr.flags); u16 msglen = be16_to_cpu(hdr.len); u8 *msg, *inner; bool deleted, dying, complete; u32 blockheight; + u64 offset; + u8 uuid[32]; deleted = (flags & GOSSIP_STORE_DELETED_BIT); dying = (flags & GOSSIP_STORE_DYING_BIT); @@ -95,17 +169,20 @@ int main(int argc, char *argv[]) if (fromwire_gossip_store_channel_amount(msg, &sat)) { printf("channel_amount: %s\n", fmt_amount_sat(tmpctx, sat)); - } else if (fromwire_peektype(msg) == WIRE_CHANNEL_ANNOUNCEMENT) { - printf("t=%u channel_announcement: %s\n", + } else if (is_channel_announce(msg, &scidptr)) { + printf("t=%u channel_announcement(%s): %s\n", be32_to_cpu(hdr.timestamp), + scidptr ? fmt_short_channel_id(tmpctx, *scidptr) : "?", tal_hex(msg, msg)); - } else if (fromwire_peektype(msg) == WIRE_CHANNEL_UPDATE) { - printf("t=%u channel_update: %s\n", + } else if (is_channel_update(msg, &sciddptr)) { + printf("t=%u channel_update(%s): %s\n", be32_to_cpu(hdr.timestamp), + sciddptr ? fmt_short_channel_id_dir(tmpctx, sciddptr) : "?", tal_hex(msg, msg)); - } else if (fromwire_peektype(msg) == WIRE_NODE_ANNOUNCEMENT) { - printf("t=%u node_announcement: %s\n", + } else if (is_node_announcement(msg, &nodeptr)) { + printf("t=%u node_announcement(%s): %s\n", be32_to_cpu(hdr.timestamp), + nodeptr ? fmt_node_id(tmpctx, nodeptr) : "?", tal_hex(msg, msg)); } else if (fromwire_gossip_store_private_channel_obs(msg, msg, &sat, &inner)) { @@ -123,6 +200,14 @@ int main(int argc, char *argv[]) printf("dying channel: %s (deadline %u)\n", fmt_short_channel_id(tmpctx, scid), blockheight); + } else if (fromwire_gossip_store_ended(msg, &offset, uuid)) { + printf("gossip store ended: offset %"PRIu64" in uuid %s\n", + offset, tal_hexstr(tmpctx, uuid, sizeof(uuid))); + } else if (fromwire_gossip_store_ended_obs(msg, &offset)) { + printf("gossip store ended (v <= 15): offset %"PRIu64"\n", + offset); + } else if (fromwire_gossip_store_uuid(msg, uuid)) { + printf("uuid %s\n", tal_hexstr(tmpctx, uuid, sizeof(uuid))); } else { printf("Unknown message %u: %s\n", fromwire_peektype(msg), tal_hex(msg, msg)); @@ -131,5 +216,6 @@ int main(int argc, char *argv[]) off += sizeof(hdr) + msglen; tal_free(msg); } + common_shutdown(); return 0; } diff --git a/devtools/fix-style-errors b/devtools/fix-style-errors new file mode 100755 index 000000000000..628e6812020d --- /dev/null +++ b/devtools/fix-style-errors @@ -0,0 +1,18 @@ +#!/bin/bash + +# Takes a list of files and applies style fixes for Python using `ruff` and C using +# `clang-format`. Also corrects spelling using `codespell`. This tool is an auxiliary to the +# `pre-commit` hooks found in: +# `.pre-commit-config.yaml` +# +# WARNING: Changes are destructive. Ensure a clean working environment before running. +# +# By: @sangbida + +for file in "$@"; do + case "$file" in + *.py) ruff check --fix "$file"; ruff format "$file" ;; + *.c|*.h) clang-format -i "$file" 2>/dev/null ;; + esac + codespell -w "$file" 2>/dev/null +done diff --git a/devtools/gossipwith.c b/devtools/gossipwith.c index 7f85e8eecd1b..c282c9924e52 100644 --- a/devtools/gossipwith.c +++ b/devtools/gossipwith.c @@ -256,16 +256,22 @@ static struct io_plan *handshake_success(struct io_conn *conn, } } else if (pollfd[1].revents & POLLIN) { u8 *pong; + bool is_padding; msg = sync_crypto_read(NULL, peer_fd, cs); if (!msg) err(1, "Reading msg"); - if (handle_pings - && fromwire_peektype(msg) == WIRE_PING - && check_ping_make_pong(tmpctx, msg, &pong) - && pong) { - sync_crypto_write(peer_fd, cs, take(pong)); - } + if (check_ping_make_pong(tmpctx, msg, &pong)) { + if (!pong) + is_padding = true; + else { + is_padding = false; + if (handle_pings) + sync_crypto_write(peer_fd, cs, take(pong)); + } + } else + is_padding = false; + if (!accept_message(msg)) { tal_free(msg); continue; @@ -278,7 +284,9 @@ static struct io_plan *handshake_success(struct io_conn *conn, || !write_all(STDOUT_FILENO, msg, tal_bytelen(msg))) err(1, "Writing out msg"); } - --max_messages; + /* Don't count "padding" pings as real messages */ + if (!is_padding) + --max_messages; tal_free(msg); } } diff --git a/devtools/gossmap-compress.c b/devtools/gossmap-compress.c index ac995f9115ce..5c0be91b5e39 100644 --- a/devtools/gossmap-compress.c +++ b/devtools/gossmap-compress.c @@ -7,12 +7,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -79,7 +79,7 @@ static unsigned int verbose = 0; #define GC_HEADER "GOSSMAP_COMPRESSv1" #define GC_HEADERLEN (sizeof(GC_HEADER)) -#define GOSSIP_STORE_VER ((0 << 5) | 14) +#define GOSSIP_STORE_VER ((0 << 5) | 16) /* Backwards, we want larger first */ static int cmp_node_num_chans(struct gossmap_node *const *a, @@ -295,7 +295,7 @@ static void write_msg_to_gstore(int outfd, const u8 *msg TAKES) { struct gossip_hdr hdr; - hdr.flags = 0; + hdr.flags = CPU_TO_BE16(GOSSIP_STORE_COMPLETED_BIT); hdr.len = cpu_to_be16(tal_bytelen(msg)); hdr.timestamp = 0; hdr.crc = cpu_to_be32(crc32c(0, msg, tal_bytelen(msg))); @@ -353,7 +353,7 @@ static void write_announce(int outfd, node_id_from_pubkey(&nodeid2, &id1); } /* Use i to avoid clashing scids even if two nodes have > 1 channel */ - if (!mk_short_channel_id(&scid, node1, node2, i & 0xFFFF)) + if (!mk_short_channel_id(&scid, i + node1, node2, i & 0xFFFF)) abort(); msg = towire_channel_announcement(NULL, &vals.sig, &vals.sig, &vals.sig, &vals.sig, @@ -406,7 +406,7 @@ static void write_update(int outfd, memset(&vals, 0, sizeof(vals)); /* Use i to avoid clashing scids even if two nodes have > 1 channel */ - if (!mk_short_channel_id(&scid, node1, node2, i & 0xFFFF)) + if (!mk_short_channel_id(&scid, i + node1, node2, i & 0xFFFF)) abort(); /* If node ids are backward, dir is reversed */ @@ -513,6 +513,17 @@ static const char *get_alias(const tal_t *ctx, return tal_strndup(ctx, (const char *)alias, 32); } +static void write_uuid(int outfd) +{ + const u8 uuid[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; + write_msg_to_gstore(outfd, take(towire_gossip_store_uuid(NULL, uuid))); +} + int main(int argc, char *argv[]) { int outfd; @@ -791,6 +802,7 @@ int main(int argc, char *argv[]) /* Now write out gossmap */ if (write(outfd, &version, 1) != 1) err(1, "Failed to write output"); + write_uuid(outfd); for (size_t i = 0; i < channel_count; i++) { write_announce(outfd, chans[i].node1, diff --git a/devtools/include-order-fixer.py b/devtools/include-order-fixer.py new file mode 100755 index 000000000000..bee5541fb482 --- /dev/null +++ b/devtools/include-order-fixer.py @@ -0,0 +1,394 @@ +#!/usr/bin/env python3 +""" +Fix include directive ordering in C source and header files. + +This script analyzes Core Lightning C source and header files, ensuring +include directives are sorted according to the Coding Style Guidelines. + +Includes ending in "_gen.h" or with any leading whitespace are preserved +in their original positions. Comments and blank lines are also preserved. +Includes found more than once are de-duplicated. +""" + +import locale +import os +import re +import subprocess +import sys +import tempfile + +# Set C locale for sorting to match Makefile behavior +locale.setlocale(locale.LC_ALL, "C") + + +def parse_makefile_output(output): + """Parse Makefile output, handling the 'Building version' line.""" + lines = output.splitlines() + # Skip "Building version" line if present + if lines and lines[0].startswith("Building version"): + if len(lines) > 1: + file_list = lines[1] + else: + file_list = "" + else: + file_list = lines[0] if lines else "" + + # Split by spaces and filter out empty strings + files = [f for f in file_list.split() if f] + return files + + +def get_files_to_check(): + """Get lists of C source and header files from Makefile targets.""" + # Get C source files + result = subprocess.run( + ["make", "print-src-to-check"], + capture_output=True, + text=True, + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + ) + if result.returncode != 0: + print( + f"Error running 'make print-src-to-check': {result.stderr}", file=sys.stderr + ) + sys.exit(1) + + src_files = parse_makefile_output(result.stdout) + + # Get header files + result = subprocess.run( + ["make", "print-hdr-to-check"], + capture_output=True, + text=True, + cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + ) + if result.returncode != 0: + print( + f"Error running 'make print-hdr-to-check': {result.stderr}", file=sys.stderr + ) + sys.exit(1) + + hdr_files = parse_makefile_output(result.stdout) + + # Return files with their types + files_with_types = [] + for f in src_files: + files_with_types.append((f, "c")) + for f in hdr_files: + files_with_types.append((f, "h")) + + return files_with_types + + +def extract_includes(content): + """ + Extract include directives from file content, preserving comments and whitespace. + + Returns: + tuple: (main_items, trailing_items, include_start_line, blank_line_index, include_end_line) + main_items: List of (type, line) tuples in main block where type is 'include', 'comment', or 'blank' + trailing_items: List of (type, line) tuples after blank line (to be preserved) + include_start_line: Line number where includes start (0-indexed) + blank_line_index: Line number of blank line separator (None if no blank line) + include_end_line: Line number after last include (0-indexed) + """ + lines = content.splitlines(keepends=True) + main_items = [] + trailing_items = [] + include_start = None + include_end = None + blank_line_index = None + in_trailing_block = False + + # Pattern to match include directives (with optional leading whitespace) + include_pattern = re.compile(r'^\s*#include\s+[<"].*[>"]\s*$') + # Pattern to match comments (single-line or start of multi-line) + comment_pattern = re.compile(r'^\s*/\*|^\s*//') + # Pattern to match continuation lines of multi-line comments + comment_continuation_pattern = re.compile(r'^\s*\*|.*\*/') + + in_multiline_comment = False + + for i, line in enumerate(lines): + # Check if this line is an include + if include_pattern.match(line): + in_multiline_comment = False + if include_start is None: + include_start = i + # Preserve the line as-is (including leading whitespace) + if in_trailing_block: + trailing_items.append(('include', line)) + else: + main_items.append(('include', line)) + include_end = i + 1 + elif include_start is not None: + # We've seen includes, but this line is not an include + if line.strip(): + # Check if it's a comment start or continuation + if comment_pattern.match(line): + # Start of a comment + in_multiline_comment = True + # Check if it's a single-line comment (ends with */) + if '*/' in line: + in_multiline_comment = False + # Preserve comments + if in_trailing_block: + trailing_items.append(('comment', line)) + else: + main_items.append(('comment', line)) + include_end = i + 1 + elif in_multiline_comment and comment_continuation_pattern.match(line): + # Continuation of multi-line comment + if in_trailing_block: + trailing_items.append(('comment', line)) + else: + main_items.append(('comment', line)) + include_end = i + 1 + # Check if this line ends the comment + if '*/' in line: + in_multiline_comment = False + else: + # Non-blank, non-include, non-comment line - stop here + in_multiline_comment = False + break + else: + # Blank line + # Only treat as separator if we haven't seen one yet + # and we'll continue to look for trailing includes + if blank_line_index is None: + blank_line_index = i + in_trailing_block = True + # Add this separator blank line to trailing_items + trailing_items.append(('blank', line)) + include_end = i + 1 + elif in_trailing_block: + # We're in trailing block, preserve blank lines here + trailing_items.append(('blank', line)) + include_end = i + 1 + else: + # Blank line in main block (before separator) - preserve it + main_items.append(('blank', line)) + include_end = i + 1 + # If we haven't started collecting includes yet, continue + + if include_start is None: + # No includes found + return [], [], None, None, None + + # If we marked a blank line as separator but found no trailing includes, + # those blank lines should not be treated as trailing - they're just + # normal blank lines after the includes that should remain in after_lines + if blank_line_index is not None: + # Check if we actually have trailing includes (not just blank lines/comments) + has_trailing_includes = any(item_type == 'include' for item_type, _ in trailing_items) + if not has_trailing_includes: + # No trailing includes found, so blank lines aren't a separator + # Reset to treat them as normal file content + blank_line_index = None + trailing_items = [] + # Recalculate include_end to point to the last include/comment in main_items + # Count how many lines we've processed in main_items + include_end = include_start + len(main_items) + + return ( + main_items, + trailing_items, + include_start, + blank_line_index, + include_end, + ) + + +def sort_includes(items, file_type): + """ + Sort includes according to Core Lightning rules. + + For .c files: all includes in alphabetical order + For .h files: config.h first (if present), then others alphabetically + + Includes ending in "_gen.h" or with any leading whitespace are preserved + in their original positions. Comments and blank lines are also preserved. + """ + if not items: + return items + + # Track includes that should be preserved at their positions + preserved_positions = {} # position -> (type, line) + regular_includes = [] # list of (position, include_line) tuples to sort + + for pos, (item_type, line) in enumerate(items): + if item_type != 'include': + # Preserve comments and blank lines at their positions + preserved_positions[pos] = (item_type, line) + else: + # Check if this include should be preserved + # (has any leading whitespace, or ends in "_gen.h") + stripped = line.lstrip() + has_leading_whitespace = line != stripped + is_gen_h = '_gen.h"' in line or "_gen.h>" in line + + if has_leading_whitespace or is_gen_h: + # Preserve at original position + preserved_positions[pos] = (item_type, line) + else: + # Regular include to be sorted + regular_includes.append((pos, line)) + + # Separate config.h from other regular includes for header files + config_h_pos = None + config_h_include = None + other_regular = [] + + for pos, inc in regular_includes: + if file_type == "h" and '"config.h"' in inc: + config_h_pos = pos + config_h_include = inc + else: + other_regular.append((pos, inc)) + + # Sort other regular includes using C locale (by the include content, not position) + other_regular_sorted = sorted(other_regular, key=lambda x: locale.strxfrm(x[1])) + + # Build sorted list of regular includes + sorted_regular = [] + if config_h_include: + sorted_regular.append((config_h_pos, config_h_include)) + sorted_regular.extend(other_regular_sorted) + + # Build result: preserved items at original positions, sorted regular includes elsewhere + result = [] + regular_idx = 0 + + for pos in range(len(items)): + if pos in preserved_positions: + # Use preserved item at its original position + result.append(preserved_positions[pos]) + else: + # Use next sorted regular include + if regular_idx < len(sorted_regular): + _, sorted_inc = sorted_regular[regular_idx] + result.append(('include', sorted_inc)) + regular_idx += 1 + + return result + + +def dedupe_include_items(items, seen): + """Remove duplicate include lines, keeping the first occurrence. + + Duplicate detection uses a canonical form of include lines (`lstrip()`), + so leading whitespace differences do not prevent matching. + Non-include items (comments/blanks) are always preserved. + """ + deduped = [] + for item_type, line in items: + if item_type != "include": + deduped.append((item_type, line)) + continue + + key = line.lstrip() + if key in seen: + continue + seen.add(key) + deduped.append((item_type, line)) + return deduped + + +def fix_file_includes(filepath, file_type): + """ + Fix include ordering in a file. + + Returns: + bool: True if file was modified, False otherwise + """ + try: + with open(filepath, "r", encoding="utf-8", errors="replace") as f: + content = f.read() + except IOError as e: + print(f"Error reading {filepath}: {e}", file=sys.stderr) + return False + + # Extract includes + main_items, trailing_items, include_start, blank_line_index, include_end = extract_includes( + content + ) + + if include_start is None: + # No includes to sort + return False + + # Sort only the main includes block (preserving comments, blanks, and whitespace-prefixed includes) + sorted_main_items = sort_includes(main_items, file_type) + + # De-duplicate includes across main and trailing blocks, preserving the first occurrence + seen_includes = set() + sorted_main_items = dedupe_include_items(sorted_main_items, seen_includes) + trailing_items = dedupe_include_items(trailing_items, seen_includes) + + # Reconstruct file content + lines = content.splitlines(keepends=True) + before_lines = lines[:include_start] if include_start > 0 else [] + after_lines = lines[include_end:] if include_end < len(lines) else [] + + # Build the include section: main sorted items + trailing items + # Note: blank lines are already included in main_items/trailing_items, and + # blank_line_index is just a marker, so we don't need to add it separately + include_section = "".join(line for _, line in sorted_main_items) + if trailing_items: + # Add trailing items (blank line separator is already in trailing_items if present) + include_section += "".join(line for _, line in trailing_items) + + # Combine: before + include section + after + new_content = "".join(before_lines) + include_section + "".join(after_lines) + + # Check if content actually changed + if new_content == content: + return False + + # Write back atomically using temp file + try: + with tempfile.NamedTemporaryFile( + mode="w", + encoding="utf-8", + dir=os.path.dirname(filepath), + delete=False, + suffix=".tmp", + ) as tmp: + tmp.write(new_content) + tmp_path = tmp.name + + # Atomic rename + os.replace(tmp_path, filepath) + return True + except IOError as e: + print(f"Error writing {filepath}: {e}", file=sys.stderr) + if os.path.exists(tmp_path): + os.unlink(tmp_path) + return False + + +def main(): + """Main entry point.""" + files_with_types = get_files_to_check() + + modified_files = [] + + for filepath, file_type in files_with_types: + if not os.path.exists(filepath): + # File might not exist (generated files, etc.) + continue + + if fix_file_includes(filepath, file_type): + modified_files.append(filepath) + + # Exit with appropriate code + if modified_files: + # Files were modified - exit 1 so pre-commit shows the diff + sys.exit(1) + else: + # No changes needed + sys.exit(0) + + +if __name__ == "__main__": + main() diff --git a/devtools/mkquery.c b/devtools/mkquery.c index 9fe6e69f858c..d75075121f81 100644 --- a/devtools/mkquery.c +++ b/devtools/mkquery.c @@ -17,7 +17,7 @@ int main(int argc, char *argv[]) { struct bitcoin_blkid chainhash; const tal_t *ctx = tal(NULL, char); - const u8 *msg; + const u8 *msg = NULL; setup_locale(); secp256k1_ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY | @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) strtol(argv[3], NULL, 0), strtol(argv[4], NULL, 0)); } else if (streq(argv[1], "query_channel_range")) { - struct tlv_query_channel_range_tlvs *tlvs; + struct tlv_query_channel_range_tlvs *tlvs = NULL; if (argc == 5) tlvs = NULL; else if (argc == 6) { @@ -50,7 +50,7 @@ int main(int argc, char *argv[]) strtol(argv[4], NULL, 0), tlvs); } else if (streq(argv[1], "query_short_channel_ids")) { - struct tlv_query_short_channel_ids_tlvs *tlvs; + struct tlv_query_short_channel_ids_tlvs *tlvs = NULL; u8 *encoded; if (argc == 4) diff --git a/devtools/sql-rewrite.py b/devtools/sql-rewrite.py index 03c358a643c7..4bee77a8714f 100755 --- a/devtools/sql-rewrite.py +++ b/devtools/sql-rewrite.py @@ -45,6 +45,8 @@ def rewrite_single(self, query): r'BIGINT': 'INTEGER', r'BIGINTEGER': 'INTEGER', r'BIGSERIAL': 'INTEGER', + r'VARCHAR(?:\(\d+\))?': 'TEXT', + r'\bINT\b': 'INTEGER', r'CURRENT_TIMESTAMP\(\)': "strftime('%s', 'now')", r'INSERT INTO[ \t]+(.*)[ \t]+ON CONFLICT.*DO NOTHING;': 'INSERT OR IGNORE INTO \\1;', # Rewrite "decode('abcd', 'hex')" to become "x'abcd'" diff --git a/doc/Makefile b/doc/Makefile index 4603bd9c0f56..e99c3ded0808 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -9,16 +9,16 @@ MARKDOWNPAGES := doc/addgossip.7 \ doc/askrene-age.7 \ doc/askrene-bias-channel.7 \ doc/askrene-bias-node.7 \ - doc/askrene-create-layer.7 \ - doc/askrene-remove-layer.7 \ doc/askrene-create-channel.7 \ - doc/askrene-update-channel.7 \ + doc/askrene-create-layer.7 \ doc/askrene-disable-node.7 \ doc/askrene-inform-channel.7 \ doc/askrene-listlayers.7 \ doc/askrene-listreservations.7 \ + doc/askrene-remove-layer.7 \ doc/askrene-reserve.7 \ doc/askrene-unreserve.7 \ + doc/askrene-update-channel.7 \ doc/autoclean-once.7 \ doc/autoclean-status.7 \ doc/batching.7 \ @@ -35,6 +35,7 @@ MARKDOWNPAGES := doc/addgossip.7 \ doc/check.7 \ doc/checkmessage.7 \ doc/checkrune.7 \ + doc/clnrest-register-path.7 \ doc/close.7 \ doc/commando.7 \ doc/connect.7 \ @@ -44,7 +45,6 @@ MARKDOWNPAGES := doc/addgossip.7 \ doc/datastore.7 \ doc/datastoreusage.7 \ doc/decode.7 \ - doc/decodepay.7 \ doc/deldatastore.7 \ doc/delforward.7 \ doc/delinvoice.7 \ @@ -57,7 +57,7 @@ MARKDOWNPAGES := doc/addgossip.7 \ doc/disableoffer.7 \ doc/disconnect.7 \ doc/emergencyrecover.7 \ - doc/enableoffer.7 \ + doc/enableoffer.7 \ doc/exposesecret.7 \ doc/feerates.7 \ doc/fetchbip353.7 \ @@ -133,6 +133,7 @@ MARKDOWNPAGES := doc/addgossip.7 \ doc/showrunes.7 \ doc/signinvoice.7 \ doc/signmessage.7 \ + doc/signmessagewithkey.7 \ doc/signpsbt.7 \ doc/splice_init.7 \ doc/splice_signed.7 \ diff --git a/doc/beginners-guide/backup-and-recovery/hsm-secret.md b/doc/beginners-guide/backup-and-recovery/hsm-secret.md index d23ef5373f57..583134dbed9b 100644 --- a/doc/beginners-guide/backup-and-recovery/hsm-secret.md +++ b/doc/beginners-guide/backup-and-recovery/hsm-secret.md @@ -8,31 +8,71 @@ privacy: --- -## Generate HSM Secret +## Mnemonic-Based HSM Secrets (v25.12+) -If you are deploying a new node that has no funds and channels yet, you can generate BIP39 words using any process, and create the `hsm_secret` using the `lightning-hsmtool generatehsm` command. If you did `make install` then `hsmtool` is installed as [`lightning-hsmtool`](ref:lightning-hsmtool), else you can find it in the `tools/` directory of the build directory. +Starting with Core Lightning v25.12, new nodes are automatically created with a BIP39 12-word mnemonic phrase as their root secret. This provides a more user-friendly backup method compared to the previous 32-byte binary format. + + +### Automatic HSM Secret Creation + +When you first start `lightningd` (v25.12+), it will automatically generate a random BIP39 mnemonic and create the `hsm_secret` file **without a passphrase**. No prompts are shown during this process. + +If you want to add a passphrase for additional security, start `lightningd` with the `--hsm-passphrase` option: + +```shell +lightningd --hsm-passphrase +``` + +This will prompt you to enter a passphrase (and confirm it) before creating the `hsm_secret`. The passphrase becomes part of the BIP39 seed derivation process, providing an additional security factor. If you use a passphrase, you must use `--hsm-passphrase` every time you start `lightningd`. + + +### Creating HSM Secret with Your Own Mnemonic + +If you want to use your own mnemonic (instead of a randomly generated one), create the `hsm_secret` manually using the `lightning-hsmtool generatehsm` command before starting `lightningd`. If you did `make install` then `hsmtool` is installed as [`lightning-hsmtool`](ref:lightning-hsmtool), else you can find it in the `tools/` directory of the build directory. ```shell -lightning-hsmtool generatehsm hsm_secret +lightning-hsmtool generatehsm $LIGHTNINGDIR/hsm_secret ``` -Then enter the BIP39 words, plus an optional passphrase. Then copy the `hsm_secret` to `${LIGHTNINGDIR}` +The command will prompt you interactively in the command line: +1. Enter your BIP39 mnemonic phrase (12 words, separated by spaces) +2. Enter an optional passphrase (you can press Enter to skip adding a passphrase) + +The passphrase provides additional security by adding entropy to the seed derivation process according to BIP39. + +You can regenerate the same `hsm_secret` file using the same BIP39 words and passphrase, which you can back up on paper. **Important:** If you use a passphrase, you must back it up separately along with your mnemonic, as both are required to recover your funds. + + +### Extract Mnemonic for Backup + +If your `hsm_secret` does **not** use a passphrase, you can extract your mnemonic using the `exposesecret` RPC command (requires setting `exposesecret-passphrase` in your config): + +```shell +lightning-cli exposesecret passphrase= +``` + +This returns your mnemonic phrase, which you can then write down and store securely. + +**Important:** `exposesecret` does not work with passphrase-protected `hsm_secret` files. If you used `--hsm-passphrase` when creating your node, you must have backed up your mnemonic during the `generatehsm` step. + + +## Legacy HSM Secret Formats (Pre-v25.12) -You can regenerate the same `hsm_secret` file using the same BIP39 words, which again, you can back up on paper. +For nodes created before v25.12, the `hsm_secret` was stored as a 32-byte binary file. These legacy formats are still supported for backward compatibility. -## Encrypt HSM Secret +### Encrypt Legacy HSM Secret -You can encrypt the `hsm_secret` content (which is used to derive the HD wallet's master key): -- either by passing the `--encrypted-hsm` startup argument +You can encrypt a legacy `hsm_secret` content (which is used to derive the HD wallet's master key): +- either by passing the `--hsm-passphrase` startup argument (this replaced the deprecated `--encrypted-hsm` option in v25.12) - or by using the `encrypt` method from `/tools/lightning-hsmtool`. -If you encrypt your `hsm_secret`, you will have to pass the `--encrypted-hsm` startup option to `lightningd`. Once your `hsm_secret` is encrypted, you **will not** be able to access your funds without your password, so please beware with your password management. Also, beware of not feeling too safe with an encrypted `hsm_secret`: unlike for `bitcoind` where the wallet encryption can restrict the usage of some RPC command, `lightningd` always needs to access keys from the wallet which is thus **not locked** (yet), even with an encrypted BIP32 master seed. +If you encrypt your legacy `hsm_secret`, you will have to pass the `--hsm-passphrase` startup option to `lightningd`. Once your `hsm_secret` is encrypted, you **will not** be able to access your funds without your password, so please beware with your password management. Also, beware of not feeling too safe with an encrypted `hsm_secret`: unlike for `bitcoind` where the wallet encryption can restrict the usage of some RPC command, `lightningd` always needs to access keys from the wallet which is thus **not locked** (yet), even with an encrypted BIP32 master seed. -## Decrypt HSM Secret +### Decrypt Legacy HSM Secret -You can unencrypt an encrypted `hsm_secret` using the `lightning-hsmtool` with the `decrypt` method. +You can unencrypt an encrypted legacy `hsm_secret` using the `lightning-hsmtool` with the `decrypt` method. ```shell lightning-hsmtool decrypt ${LIGHTNINGDIR}/hsm_secret diff --git a/doc/beginners-guide/backup.md b/doc/beginners-guide/backup.md index 9811b9d26a2b..e0c2874691de 100644 --- a/doc/beginners-guide/backup.md +++ b/doc/beginners-guide/backup.md @@ -38,11 +38,92 @@ Core Lightning has an internal bitcoin wallet and you can backup three main comp it is kept in a secure location. -The `hsm_secret` is created when you first create the node, and does not change. Thus, a one-time backup of `hsm_secret` is sufficient. -It should be noted down a few times on a piece of paper, in either hexadecimal or codex32 format, as described below: +The `hsm_secret` is created when you first create the node, and does not change. Thus, a one-time backup of `hsm_secret` is sufficient. -#### Hex Format +#### Mnemonic Format (v25.12+) + +Starting with Core Lightning v25.12, new nodes are created with a BIP39 12-word mnemonic phrase as their root secret. By default, **no passphrase is used**. You can optionally protect your mnemonic with a passphrase for additional security by starting `lightningd` with the `--hsm-passphrase` option. + +**Backing up your mnemonic:** + +The **best way to back up your mnemonic** is to use `lightning-hsmtool getsecret`: + +```shell +lightning-hsmtool getsecret $LIGHTNINGDIR/hsm_secret +``` + +This will output your 12-word mnemonic. Write it down on paper and store it securely. **Important:** If you used a passphrase when creating your node, you must back it up separately along with your mnemonic, as both are required to recover your funds. + +**Alternative: Creating your own mnemonic before first start** + +If you prefer to use your own mnemonic instead of having `lightningd` generate a random one, create the `hsm_secret` manually before starting your node for the first time: + +```shell +lightning-hsmtool generatehsm $LIGHTNINGDIR/hsm_secret +``` + +This will prompt you to enter your mnemonic (12 words) and an optional passphrase. If you choose to use a passphrase, you must start `lightningd` with the `--hsm-passphrase` option to provide it. + +**Alternative: Using `exposesecret`** + +If your node was already created (with a randomly-generated mnemonic) and you did **not** use a passphrase (`--hsm-passphrase`), you can extract the mnemonic using the `exposesecret` RPC command: + +```shell +lightning-cli exposesecret passphrase= +``` + +Note: This requires setting `exposesecret-passphrase` in your config. This is a separate security measure for the `exposesecret` command itself, not related to the HSM passphrase. **`exposesecret` does not work if your `hsm_secret` uses a passphrase** - it only works with non-passphrase-protected secrets. + +**Recovery with mnemonic:** + +For v25.12+ nodes, you can use the `recover` RPC command to recover directly from your mnemonic: + +```shell +lightning-cli recover hsmsecret="word1 word2 word3 ... word12" +``` + +Alternatively, you can manually recreate the `hsm_secret` file using `lightning-hsmtool generatehsm`: + +```shell +lightning-hsmtool generatehsm $LIGHTNINGDIR/hsm_secret +``` + +The command will prompt you to: +1. Enter your backed-up mnemonic words (12 words, separated by spaces) +2. Enter your passphrase (if you used one, or press Enter if you didn't) + +Then start `lightningd` normally (with `--hsm-passphrase` if you used a passphrase). + + +#### Readable Format + +Run `tools/lightning-hsmtool getsecret ` to get the `hsm_secret` in readable format. For v25.12+ nodes, this returns the 12-word mnemonic. For older nodes, you will get a codex32 string instead, and must supply a four-letter id to attach to it, like so: + +Example for newer nodes: `tools/lightning-hsmtool getsecret ~/.lightning/bitcoin/hsm_secret` + +Example for older nodes: `tools/lightning-hsmtool getsecret ~/.lightning/bitcoin/hsm_secret adt0`. + +`hsm/secret/path` in the above command is `$LIGHTNINGDIR/hsm_secret`, and +`id` is any 4 character string used to identify this secret. It **cannot** contain `i`, `o`, or `b`, but **can** contain all digits except `1`. + +**Recovery with codex32 (legacy nodes):** + +Legacy nodes can recover using the `recover` RPC command with a codex32 secret: + +```shell +lightning-cli recover hsmsecret= +``` + +Click [here](doc:hsm-secret) to learn more about other cool hsm methods. + + +#### Legacy Formats (Pre-v25.12) + +For nodes created before v25.12, the `hsm_secret` was stored as a 32-byte binary file. These can be backed up in hexadecimal format: + + +##### Hex Format The secret is just 32 bytes, and can be converted into hexadecimal digits like below: @@ -63,18 +144,6 @@ chmod 0400 hsm_secret ``` -#### Codex32 Format - -Run `tools/lightning-hsmtool getcodexsecret ` to get the `hsm_secret` in codex32 format. - -Example `tools/lightning-hsmtool getcodexsecret ~/.lightning/bitcoin/hsm_secret adt0`. - -`hsm/secret/path` in the above command is `$LIGHTNINGDIR/hsm_secret`, and -`id` is any 4 character string used to identify this secret. It **cannot** contain `i`, `o`, or `b`, but **can** contain all digits except `1`. - -Click [here](doc:hsm-secret) to learn more about other cool hsm methods. - - ### Static Channel Backup diff --git a/doc/beginners-guide/sending-and-receiving-payments.md b/doc/beginners-guide/sending-and-receiving-payments.md index d354d05c7389..2ac43ace9607 100644 --- a/doc/beginners-guide/sending-and-receiving-payments.md +++ b/doc/beginners-guide/sending-and-receiving-payments.md @@ -14,10 +14,10 @@ lightning-cli invoice