diff --git a/.codespellignore b/.codespellignore deleted file mode 100644 index 972d0b2596ab..000000000000 --- a/.codespellignore +++ /dev/null @@ -1,3 +0,0 @@ -connectd -crate -mut diff --git a/.codespellrc b/.codespellrc deleted file mode 100644 index 092dcccfc418..000000000000 --- a/.codespellrc +++ /dev/null @@ -1,4 +0,0 @@ -[codespell] - -count = true -ignore-words = .codespellignore diff --git a/.gitattributes b/.gitattributes index c7a10d30adb3..39273407a78f 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-grpc-proto/pyln/grpc/node_pb2.py -text -diff linguist-generated=true +contrib/pyln-testing/pyln/testing/node_pb2.py -text -diff linguist-generated=true diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 72a9fdee61f6..13b5b99704d8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -11,8 +11,6 @@ concurrency: cancel-in-progress: true env: - # 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: "-vvv --junit-xml=report.xml --timeout=1800 --durations=10" @@ -20,96 +18,10 @@ env: SCCACHE_GHA_ENABLED: "true" jobs: - prebuild: - name: Pre-build checks - runs-on: ubuntu-24.04 - timeout-minutes: 120 - if: | - github.event.action != 'edited' || - contains(github.event.pull_request.body, 'Changelog') - env: - BOLTDIR: bolts - strategy: - fail-fast: true - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - fetch-depth: 0 - - - name: Rebase - # We can't rebase if we're on master already. - if: github.ref != 'refs/heads/master' - run: | - git config user.name github-actions - git config user.email github-actions@github.com - git fetch origin ${{ github.base_ref }} - git rebase origin/${{ github.base_ref }} - - - name: Check changelog - env: - PR_DESCRIPTION: "${{ github.event.pull_request.body || '' }}" - EVENT_NAME: "${{ github.event_name }}" - BASE_REF: "${{ github.base_ref || 'master' }}" - run: | - echo "Event Name: $EVENT_NAME" - echo "Base Ref: $BASE_REF" - echo "PR DESCRIPTION: $PR_DESCRIPTION" - if [ "$EVENT_NAME" = "pull_request" ]; then - if [[ "$PR_DESCRIPTION" != *"Changelog-None"* && \ - -z "$(git log origin/$BASE_REF..HEAD --oneline --grep='Changelog-')" && \ - "$(git rev-parse --abbrev-ref HEAD)" != "$BASE_REF" ]]; then - echo "::error::'Changelog' entry is missing in all commits, and 'Changelog-None' not specified in the PR description" - exit 1 - else - if [[ "$PR_DESCRIPTION" == *"Changelog-None"* ]]; then - echo "Changelog found in PR description" - else - echo "Changelog found in Commit \"$(git log origin/$BASE_REF..HEAD --oneline --grep='Changelog-')\"" - fi - fi - else - echo "Not a PR event." - fi - - - 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 - - - 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 - git clone https://github.com/lightning/bolts.git ../${BOLTDIR} - - name: Configure - run: ./configure --enable-debugbuild --enable-rust - - name: Check source - env: - VALGRIND: 0 - PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} - run: | - 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 - with: - name: pytest-results-prebuild - path: report.xml - if-no-files-found: ignore - compile: name: Compile CLN ${{ matrix.cfg }} runs-on: ubuntu-24.04 timeout-minutes: 30 - needs: - - prebuild strategy: fail-fast: true matrix: @@ -118,28 +30,6 @@ jobs: 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 - 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 @@ -174,250 +64,19 @@ jobs: set -e ./configure ${{ matrix.DEBUG_BUILD }} CC="sccache $COMPILER" ${{ matrix.COPTFLAGS_VAR }} - uv run make -j $(nproc) testpack.tar.gz + uv run make -j $(nproc) testpack.tar.bz2 # Rename now so we don't clash - mv testpack.tar.gz cln-${{ matrix.CFG }}.tar.gz + mv testpack.tar.bz2 cln-${{ matrix.CFG }}.tar.bz2 - uses: actions/upload-artifact@v4 with: - 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 - - - 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 - # on the integration tests), so run them with `valgrind` - name: Run unit tests - runs-on: ubuntu-24.04 - timeout-minutes: 60 - env: - BOLTDIR: bolts - needs: - - compile - strategy: - fail-fast: true - matrix: - include: - - CFG: compile-gcc-O1 - VALGRIND: 1 - - CFG: compile-clang-sanitizers - VALGRIND: 0 - 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 - - - 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 - git clone https://github.com/lightning/bolts.git ../${BOLTDIR} - - - 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 - - # 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: | - 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 - runs-on: ubuntu-24.04 - needs: - - prebuild - 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 - - - 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="sccache clang" - uv run make -j $(nproc) check-fuzz - - check-downgrade: - name: Check we can downgrade the node - runs-on: ubuntu-24.04 - needs: - - check-compiled-source - strategy: - fail-fast: false - matrix: - include: - - CFG: compile-gcc - TEST_DB_PROVIDER: sqlite3 - TEST_NETWORK: regtest - VALGRIND: 1 - - CFG: compile-gcc - TEST_DB_PROVIDER: postgres - TEST_NETWORK: regtest - - CFG: compile-gcc - TEST_DB_PROVIDER: sqlite3 - TEST_NETWORK: liquid-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 - - - 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: Fetch and unpack previous CLN - run: | - 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' }} - run: | - # 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 - 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: old-cln/usr/bin/lightningd - PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} - run: | - env - cat config.vars - 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 - with: - name: pytest-results-check-downgrade-${{ matrix.TEST_DB_PROVIDER }}-${{ matrix.TEST_NETWORK }} - path: report.xml - if-no-files-found: ignore + name: cln-${{ matrix.CFG }}.tar.bz2 + path: cln-${{ matrix.CFG }}.tar.bz2 - # 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: small # Has to match the one in the compile step needs: - compile strategy: @@ -450,14 +109,14 @@ jobs: - name: Download build uses: actions/download-artifact@v4 with: - name: cln-${{ matrix.CFG }}.tar.gz + name: cln-${{ matrix.CFG }}.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 + tar xaf cln-${{ matrix.CFG }}.tar.bz2 - name: Test env: @@ -482,406 +141,3 @@ jobs: 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: - # 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-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-O3 - COMPILER: gcc - TEST_NETWORK: liquid-regtest - TEST_DB_PROVIDER: sqlite3 - # And dual funding! - - NAME: dual-fund - CFG: compile-gcc - TEST_DB_PROVIDER: sqlite3 - COMPILER: gcc - TEST_NETWORK: regtest - EXPERIMENTAL_DUAL_FUND: 1 - # And splicing! - - NAME: splicing - CFG: compile-gcc-O3 - TEST_DB_PROVIDER: sqlite3 - COMPILER: gcc - TEST_NETWORK: regtest - EXPERIMENTAL_SPLICING: 1 - 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 - - - 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: Switch network - if: ${{ matrix.TEST_NETWORK == 'liquid-regtest' }} - run: | - # 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 - - - 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 }} - run: | - env - cat config.vars - 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 - with: - name: pytest-results-integration-${{ matrix.name }} - path: report.xml - if-no-files-found: ignore - - integration-valgrind: - name: Valgrind Test CLN (${{ matrix.GROUP }}/${{ matrix.GROUP_COUNT }}) - runs-on: ubuntu-24.04 - timeout-minutes: 120 - env: - RUST_PROFILE: small # Has to match the one in the compile step - needs: - - check-compiled-source - strategy: - fail-fast: false - matrix: - 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 - - - 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 - - - name: Install dependencies - 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-${{ 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: - SLOW_MACHINE: 1 - TEST_DEBUG: 1 - PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} --test-group-random-seed=42 - run: | - 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 - with: - name: pytest-results-integration-valgrind-${{ matrix.GROUP }} - path: report.xml - if-no-files-found: ignore - - integration-sanitizers: - name: ASan/UBSan (${{ matrix.GROUP }}/${{ matrix.GROUP_COUNT }}) - runs-on: ubuntu-24.04 - timeout-minutes: 120 - env: - RUST_PROFILE: small - SLOW_MACHINE: 1 - TEST_DEBUG: 1 - needs: - - check-compiled-source - strategy: - fail-fast: false - matrix: - CFG: [compile-clang-sanitizers] - GROUP: [1,2,3,4,5,6] - GROUP_COUNT: [6] - 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 - - - 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: - PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} --test-group-random-seed=42 - run: | - 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-integration-sanitizers-${{ matrix.GROUP }} - path: report.xml - if-no-files-found: ignore - - update-docs-examples: - name: Update examples in doc schemas (disabled temporarily!) - if: false - runs-on: ubuntu-24.04 - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - CFG: [compile-gcc] - env: - VALGRIND: 0 - GENERATE_EXAMPLES: 1 - TEST_NETWORK: regtest - needs: - - compile - 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 - - - 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-${{ 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: - PYTEST_OPTS: ${{ env.PYTEST_OPTS_BASE }} - run: | - 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 - with: - name: pytest-results-update-docs-examples - path: report.xml - if-no-files-found: ignore - - min-btc-support: - name: Test minimum supported BTC v${{ matrix.MIN_BTC_VERSION }} with ${{ matrix.NAME }} - runs-on: ubuntu-24.04 - timeout-minutes: 120 - env: - RUST_PROFILE: small # Has to match the one in the compile step - needs: - - compile - strategy: - fail-fast: false - matrix: - include: - - NAME: clang - CFG: compile-clang - TEST_DB_PROVIDER: sqlite3 - COMPILER: clang - TEST_NETWORK: regtest - MIN_BTC_VERSION: "25.0" - 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 - - - name: Install dependencies - env: - TEST_NETWORK: ${{ matrix.TEST_NETWORK }} - run: | - bash -x .github/scripts/setup.sh - - - name: Download Bitcoin Core - run: wget "https://bitcoincore.org/bin/bitcoin-core-${{ matrix.MIN_BTC_VERSION }}/bitcoin-${{ matrix.MIN_BTC_VERSION }}-x86_64-linux-gnu.tar.gz" - - - name: Extract Bitcoin Core - run: tar -xf "bitcoin-${{ matrix.MIN_BTC_VERSION }}-x86_64-linux-gnu.tar.gz" - - - name: Move Bitcoin Core Binaries - run: sudo mv bitcoin-${{ matrix.MIN_BTC_VERSION }}/bin/* /usr/local/bin/ - - - name: Clean Up Downloaded Bitcoin - run: rm -rf "bitcoin-${{ matrix.MIN_BTC_VERSION }}-x86_64-linux-gnu.tar.gz" "bitcoin-${{ matrix.MIN_BTC_VERSION }}" - - - 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 }} - 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 }} - run: | - env - cat config.vars - 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 - with: - name: pytest-results-min-btc-support-${{ matrix.NAME }} - path: report.xml - if-no-files-found: ignore - - - gather: - # A dummy task that depends on the full matrix of tests, and - # signals successful completion. Used for the PR status to pass - # before merging. Needs to run even if they failed! - name: CI completion - runs-on: ubuntu-24.04 - needs: - - 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: "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 - result="${!name}" - echo "$name: $result" - if [[ "$result" != "success" ]]; then - failed="yes" - fi - done - if [[ "$failed" == "yes" ]]; then - echo "One or more required jobs failed" - exit 1 - fi diff --git a/.github/workflows/macos.yaml b/.github/workflows/macos.yaml deleted file mode 100644 index 71ca8e9d235f..000000000000 --- a/.github/workflows/macos.yaml +++ /dev/null @@ -1,73 +0,0 @@ ---- -name: Mac OS pytest -on: - pull_request: -jobs: - smoke-test: - name: Smoke Test macOS - runs-on: macos-14 - timeout-minutes: 120 - strategy: - fail-fast: true - matrix: - bitcoind-version: ["27.1"] - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Download Bitcoin ${{ matrix.bitcoind-version }} & install binaries - run: | - export BITCOIND_VERSION=${{ matrix.bitcoind-version }} - export TARGET_ARCH="arm64-apple-darwin" - - wget https://bitcoincore.org/bin/bitcoin-core-${BITCOIND_VERSION}/bitcoin-${BITCOIND_VERSION}-${TARGET_ARCH}.tar.gz - tar -xzf bitcoin-${BITCOIND_VERSION}-${TARGET_ARCH}.tar.gz - sudo mv bitcoin-${BITCOIND_VERSION}/bin/* /usr/local/bin - rm -rf bitcoin-${BITCOIND_VERSION}-${TARGET_ARCH}.tar.gz bitcoin-${BITCOIND_VERSION} - - - 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 - - - name: Install dependencies - run: | - export PATH="/usr/local/opt:/Users/runner/.local/bin:/opt/homebrew/bin/python3.10/bin:$PATH" - - brew install gnu-sed autoconf automake libtool protobuf openssl lowdown libsodium - - # https://github.com/grpc/grpc/issues/31737#issuecomment-1323796842 - export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 - export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 - uv sync --all-groups - - - name: Build and install CLN - run: | - export CPATH=/opt/homebrew/include - export LIBRARY_PATH=/opt/homebrew/lib - - uv run ./configure --disable-valgrind --disable-compat - uv run make - - - name: Start bitcoind in regtest mode - run: | - bitcoind -regtest -daemon - sleep 5 - - - name: Generate initial block - run: | - bitcoin-cli -regtest createwallet default_wallet - bitcoin-cli -regtest generatetoaddress 1 $(bitcoin-cli -regtest getnewaddress) - sleep 2 - - - name: Start CLN in regtest mode - run: | - lightningd/lightningd --network=regtest --log-file=/tmp/l1.log --daemon - sleep 5 - - - name: Verify CLN is running - run: | - cli/lightning-cli --regtest getinfo diff --git a/.gitignore b/.gitignore index c54cf77954ac..c27168145450 100644 --- a/.gitignore +++ b/.gitignore @@ -24,11 +24,6 @@ gen_*.h wire/gen_*_csv cli/lightning-cli coverage -# Coverage profiling data files -*.profraw -*.profdata -# Generated Python API documentation -docs/python ccan/config.h __pycache__ config.vars @@ -41,8 +36,6 @@ monkeytype.sqlite3 !*/test/exp-run-*.c */*/test/run-* !*/*/test/run-*.c -devtools/check-bolt -tools/lightning-downgrade test/test_protocol test/test_sphinx tests/.pytest.restart diff --git a/.msggen.json b/.msggen.json index a61267a8e0f2..58d8475f5167 100644 --- a/.msggen.json +++ b/.msggen.json @@ -1208,18 +1208,6 @@ "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, @@ -1637,7 +1625,6 @@ "DisableofferResponse": { "DisableOffer.active": 2, "DisableOffer.bolt12": 4, - "DisableOffer.description": 7, "DisableOffer.label": 6, "DisableOffer.offer_id": 1, "DisableOffer.single_use": 3, @@ -1656,7 +1643,6 @@ "EnableofferResponse": { "EnableOffer.active": 2, "EnableOffer.bolt12": 4, - "EnableOffer.description": 7, "EnableOffer.label": 6, "EnableOffer.offer_id": 1, "EnableOffer.single_use": 3, @@ -2873,7 +2859,6 @@ "ListoffersOffers": { "ListOffers.offers[].active": 2, "ListOffers.offers[].bolt12": 4, - "ListOffers.offers[].description": 7, "ListOffers.offers[].label": 6, "ListOffers.offers[].offer_id": 1, "ListOffers.offers[].single_use": 3, @@ -3045,7 +3030,6 @@ "ListPeerChannels.channels[].updates.remote.htlc_minimum_msat": 1 }, "ListpeerchannelsRequest": { - "ListPeerChannels.channel_id": 3, "ListPeerChannels.id": 1, "ListPeerChannels.short_channel_id": 2 }, @@ -3338,7 +3322,6 @@ "Offer.absolute_expiry": 6, "Offer.amount": 1, "Offer.description": 2, - "Offer.fronting_nodes[]": 15, "Offer.issuer": 3, "Offer.label": 4, "Offer.optional_recurrence": 14, @@ -4090,7 +4073,6 @@ "Xpay.maxdelay": 7, "Xpay.maxfee": 3, "Xpay.partial_msat": 6, - "Xpay.payer_note": 8, "Xpay.retry_for": 5 }, "XpayResponse": { @@ -5726,42 +5708,6 @@ "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 @@ -7114,10 +7060,6 @@ "added": "pre-v0.10.1", "deprecated": null }, - "DisableOffer.description": { - "added": "v26.04", - "deprecated": null - }, "DisableOffer.label": { "added": "pre-v0.10.1", "deprecated": null @@ -7166,10 +7108,6 @@ "added": "v24.11", "deprecated": null }, - "EnableOffer.description": { - "added": "v26.04", - "deprecated": null - }, "EnableOffer.label": { "added": "v24.11", "deprecated": null @@ -10630,10 +10568,6 @@ "added": "pre-v0.10.1", "deprecated": null }, - "ListOffers.offers[].description": { - "added": "v26.04", - "deprecated": null - }, "ListOffers.offers[].label": { "added": "pre-v0.10.1", "deprecated": null @@ -10758,10 +10692,6 @@ "added": "v23.02", "deprecated": null }, - "ListPeerChannels.channel_id": { - "added": "v26.03", - "deprecated": null - }, "ListPeerChannels.channels[]": { "added": "v23.02", "deprecated": null @@ -11994,10 +11924,6 @@ "added": "pre-v0.10.1", "deprecated": null }, - "Offer.fronting_nodes[]": { - "added": "v26.04", - "deprecated": null - }, "Offer.issuer": { "added": "pre-v0.10.1", "deprecated": null @@ -14118,10 +14044,6 @@ "added": "v24.11", "deprecated": null }, - "Xpay.payer_note": { - "added": "v26.04", - "deprecated": null - }, "Xpay.payment_preimage": { "added": "v24.11", "deprecated": null diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 65e0f58bec8d..fe1a13e4c102 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,108 +1,13 @@ -default_language_version: - node: system - python: python3 - repos: -- repo: https://github.com/pycqa/flake8 - rev: 7.3.0 +- repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.8.0 hooks: - - id: flake8 - args: [ "--ignore=E501,E731,E741,W503,F541,E275" ] + # 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 ] 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:)|(?/dev/null || \ - pwd | $(SED) -n 's|.*/c\{0,1\}lightning-v\{0,1\}\([0-9a-f.rc\-]*\)$$|v\1|gp') + pwd | sed -n 's|.*/c\{0,1\}lightning-v\{0,1\}\([0-9a-f.rc\-]*\)$$|v\1|gp') $(info Building version $(VERSION)) # Next release. -CLN_NEXT_VERSION := v26.04 +CLN_NEXT_VERSION := v25.12 # Previous release (for downgrade testing) -CLN_PREV_VERSION := v25.12 +CLN_PREV_VERSION := v25.09 # --quiet / -s means quiet, dammit! ifeq ($(findstring s,$(word 1, $(MAKEFLAGS))),s) @@ -21,7 +21,6 @@ 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) @@ -105,7 +104,6 @@ CCAN_OBJS := \ ccan-bitmap.o \ ccan-bitops.o \ ccan-breakpoint.o \ - ccan-cdump.o \ ccan-closefrom.o \ ccan-crc32c.o \ ccan-crypto-hmac.o \ @@ -231,6 +229,8 @@ 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,10 +313,6 @@ 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) @@ -416,7 +412,7 @@ include plugins/Makefile include tests/plugins/Makefile # Only include fuzz tests if OpenSSL >= 3.0, will be disabled on ubuntu focal -OPENSSL_VERSION := $(shell openssl version | $(SED) -n 's/OpenSSL \([0-9]\+\)\..*/\1/p') +OPENSSL_VERSION := $(shell openssl version | sed -n 's/OpenSSL \([0-9]\+\)\..*/\1/p') ifneq ($(shell test $(OPENSSL_VERSION) -ge 3 && echo yes),) include tests/fuzz/Makefile endif @@ -468,7 +464,6 @@ PKGLIBEXEC_PROGRAMS = \ lightningd/lightning_connectd \ lightningd/lightning_dualopend \ lightningd/lightning_gossipd \ - lightningd/lightning_gossip_compactd \ lightningd/lightning_hsmd \ lightningd/lightning_onchaind \ lightningd/lightning_openingd \ @@ -483,17 +478,16 @@ mkdocs.yml: $(MANPAGES:=.md) ) -# 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)) +# Don't delete these intermediaries. +.PRECIOUS: $(ALL_GEN_HEADERS) $(ALL_GEN_SOURCES) $(PYTHON_GENERATED) -# Always make wiregen files before any object file -$(ALL_OBJS): $(WIREGEN_FILES) +# Every single object file. +ALL_OBJS := $(ALL_C_SOURCES:.c=.o) # We always regen wiregen and printgen files, since SHA256STAMP protects against # spurious rebuilds. -$(WIREGEN_FILES): $(FORCE) +$(filter %printgen.h %printgen.c %wiregen.h %wiregen.c, $(ALL_C_HEADERS) $(ALL_C_SOURCES)): $(FORCE) ifneq ($(TEST_GROUP_COUNT),) PYTEST_OPTS += --test-group=$(TEST_GROUP) --test-group-count=$(TEST_GROUP_COUNT) @@ -524,7 +518,7 @@ ifeq ($(PYTEST),) exit 1 else # Explicitly hand VALGRIND so you can override on make cmd line. - PYTHONPATH=$(MY_CHECK_PYTHONPATH) TEST_DEBUG=1 TEST_LOG_IGNORE_ERRORS=1 VALGRIND=$(VALGRIND) uv run $(PYTEST) $(PYTEST_TESTS) $(PYTEST_OPTS) + PYTHONPATH=$(MY_CHECK_PYTHONPATH) TEST_DEBUG=1 VALGRIND=$(VALGRIND) uv run $(PYTEST) $(PYTEST_TESTS) $(PYTEST_OPTS) endif check-fuzz: $(ALL_FUZZ_TARGETS) @@ -552,11 +546,6 @@ 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)) @@ -645,8 +634,10 @@ update-doc-examples: check-doc-examples: update-doc-examples git diff --exit-code HEAD -# 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 +# 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 full-check: check check-source @@ -683,30 +674,6 @@ coverage/coverage.info: check pytest coverage: coverage/coverage.info genhtml coverage/coverage.info --output-directory coverage -# Clang coverage targets (source-based coverage) -coverage-clang-collect: - @./contrib/coverage/collect-coverage.sh "$(CLN_COVERAGE_DIR)" coverage/merged.profdata - -coverage-clang-report: coverage/merged.profdata - @./contrib/coverage/generate-coverage-report.sh coverage/merged.profdata coverage/html - -coverage-clang: coverage-clang-collect coverage-clang-report - @echo "Coverage report: coverage/html/index.html" - -coverage-clang-clean: - rm -rf coverage/ "$(CLN_COVERAGE_DIR)" - -.PHONY: coverage-clang-collect coverage-clang-report coverage-clang coverage-clang-clean - -# Python API documentation targets -python-docs: - @./contrib/api/generate-python-docs.py - -python-docs-clean: - rm -rf docs/python - -.PHONY: python-docs python-docs-clean - # We make libwallycore.la a dependency, so that it gets built normally, without ncc. # Ncc can't handle the libwally source code (yet). ncc: ${TARGET_DIR}/libwally-core-build/src/libwallycore.la @@ -719,7 +686,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 libccan.a +ccan/ccan/cdump/tools/cdump-enumstr: ccan/ccan/cdump/tools/cdump-enumstr.o $(CDUMP_OBJS) $(CCAN_OBJS) ALL_PROGRAMS += ccan/ccan/cdump/tools/cdump-enumstr # Can't add to ALL_OBJS, as that makes a circular dep. @@ -741,9 +708,6 @@ 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)) @@ -965,21 +929,25 @@ install-data: installdirs $(MAN1PAGES) $(MAN5PAGES) $(MAN7PAGES) $(MAN8PAGES) $( install: install-program install-data -# 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) +# 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 # The testpack is used in CI to transfer built artefacts between the -# 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 > $@ +# 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 $@ $^ uninstall: @$(NORMAL_UNINSTALL) @@ -1155,11 +1123,7 @@ 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 $@ $<) -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 +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}'` diff --git a/README.md b/README.md index 5de21964a36f..ca5969bb1785 100644 --- a/README.md +++ b/README.md @@ -88,13 +88,13 @@ will offer specific information on that command. Useful commands: -* [newaddr](https://docs.corelightning.org/reference/newaddr): get a bitcoin address to deposit funds into your lightning node. -* [listfunds](https://docs.corelightning.org/reference/listfunds): see where your funds are. -* [connect](https://docs.corelightning.org/reference/connect): connect to another lightning node. -* [fundchannel](https://docs.corelightning.org/reference/fundchannel): create a channel to another connected node. -* [invoice](https://docs.corelightning.org/reference/invoice): create an invoice to get paid by another node. -* [pay](https://docs.corelightning.org/reference/pay): pay someone else's invoice. -* [plugin](https://docs.corelightning.org/reference/plugin): commands to control extensions. +* [newaddr](doc/lightning-newaddr.7.md): get a bitcoin address to deposit funds into your lightning node. +* [listfunds](doc/lightning-listfunds.7.md): see where your funds are. +* [connect](doc/lightning-connect.7.md): connect to another lightning node. +* [fundchannel](doc/lightning-fundchannel.7.md): create a channel to another connected node. +* [invoice](doc/lightning-invoice.7.md): create an invoice to get paid by another node. +* [pay](doc/lightning-pay.7.md): pay someone else's invoice. +* [plugin](doc/lightning-plugin.7.md): commands to control extensions. ### Care And Feeding Of Your New Lightning Node @@ -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 `decode` command to see what it is, and pay it simply using the `pay` command: +The sender can feed this `bolt11` string to the `decodepay` command to see what it is, and pay it simply using the `pay` command: ```bash lightning-cli pay diff --git a/SECURITY.md b/SECURITY.md index fdb708c18aaa..d52755b96184 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -30,8 +30,7 @@ developers, and to validate signatures on releases: | Shahana Farooqui | `sfarooqui@blockstream.com` | 0CCA 8183 C13A 2389 A9C5 FD29 BFB0 1536 0049 CB56 | | Madeline Paech | `madeline@blockstream.com` | 7169 D262 72B5 0A3F 531A A1C2 A57A FC23 1B58 0804 | | Blockstream CLN Release | `cln@blockstream.com` | 616C 52F9 9D06 12B2 A151 B107 4129 A994 AA7E 9852 | -| Sangbida Chaudhuri | `sangbidac@gmail.com` | 1A37 1C2C 3064 5FAA 91AA 6B7D B643 E612 8422 1961 | -You can import a key by running the following command with that individual’s fingerprint: -`gpg --keyserver hkps://keys.openpgp.org --recv-keys ""`. +You can import a key by running the following command with that individual’s fingerprint: +`gpg --keyserver hkps://keys.openpgp.org --recv-keys ""`. Ensure that you put quotes around fingerprints containing spaces. diff --git a/Taskfile.yml b/Taskfile.yml deleted file mode 100644 index 4c0c8fb7f5d7..000000000000 --- a/Taskfile.yml +++ /dev/null @@ -1,90 +0,0 @@ -version: '3' - -vars: - PYTEST_PAR: 4 - -tasks: - build: - cmds: - - uv run make cln-grpc/proto/node.proto - - uv run make default -j {{ .PYTEST_PAR }} - test: - 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 - - uv run make default -j {{ .PYTEST_PAR }} - - uv run pytest --color=yes --force-flaky -vvv -n {{ .PYTEST_PAR }} tests {{ .CLI_ARGS }} - - clean: - cmds: - - poetry run make distclean - - - tester-docker-image: - cmds: - - docker build --build-arg DOCKER_USER=$(whoami) --build-arg UID=$(id -u) --build-arg GID=$(id -g) --network=host -t cln-tester - =1.8,<2' - - in-docker-test: - # Just the counterpart called by `isotest` to actually initialize, - # build and test CLN. - dir: '/test' - 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 - # not be available in the docker image. - - (cd /repo && git archive --format tar $(git stash create)) | tar -xvf - - # Yes, this is not that smart, but the `Makefile` relies on - # `git` being able to tell us about the version. - - cp -R /repo/.git /test - - git submodule update --init --recursive - - python3 -m pip install poetry - - poetry run make distclean - - poetry install --with=dev - - poetry run ./configure --disable-valgrind CC='clang' - - poetry run make -j 4 - - poetry run pytest --color=yes -vvv -n {{ .PYTEST_PAR }} tests {{ .CLI_ARGS }} - - kill: - cmds: - - killall -v bitcoind || true - - killall -v elementsd || true - - killall -v valgrind.bin || true diff --git a/bitcoin/short_channel_id.h b/bitcoin/short_channel_id.h index 0a49a73fc7d7..3c7cce9036bc 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 hash_scid(struct short_channel_id scid) +static inline size_t short_channel_id_hash(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,12 +46,6 @@ 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 e15812c17108..8b589bc9eaae 100644 --- a/ccan/README +++ b/ccan/README @@ -1,3 +1,3 @@ CCAN imported from http://ccodearchive.net. -CCAN version: init-2608-gb35fabb6 +CCAN version: init-2606-g5f219f03 diff --git a/ccan/ccan/json_out/json_out.c b/ccan/ccan/json_out/json_out.c index 9e371343ac75..53837e67c33a 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; - vsnprintf(dst + quote, fmtlen + 1, fmt, ap2); + vsprintf(dst + quote, fmt, ap2); } #ifdef CCAN_JSON_OUT_DEBUG @@ -294,14 +294,7 @@ bool json_out_addstr(struct json_out *jout, const char *fieldname, const char *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) -{ + size_t len = strlen(str); 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 eab20b7a9075..da8b4ffa7062 100644 --- a/ccan/ccan/json_out/json_out.h +++ b/ccan/ccan/json_out/json_out.h @@ -121,20 +121,6 @@ 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 2fe9cbcfcbd2..f6f9d41ee288 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(struct json_out *jout, const char *expect) +static void json_eq(const struct json_out *jout, const char *expect) { size_t len; const char *p; diff --git a/cln-grpc/proto/node.proto b/cln-grpc/proto/node.proto index 7caf42e6d887..6679ae5e1a33 100644 --- a/cln-grpc/proto/node.proto +++ b/cln-grpc/proto/node.proto @@ -59,6 +59,7 @@ 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) {} @@ -149,7 +150,6 @@ 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,6 +547,8 @@ message CloseResponse { UNOPENED = 2; } CloseType item_type = 1; + optional bytes tx = 2; + optional bytes txid = 3; repeated bytes txs = 4; repeated bytes txids = 5; } @@ -1396,7 +1398,6 @@ message TxsendResponse { message ListpeerchannelsRequest { optional bytes id = 1; optional string short_channel_id = 2; - optional bytes channel_id = 3; } message ListpeerchannelsResponse { @@ -1460,7 +1461,7 @@ message ListpeerchannelsChannels { optional bool lost_state = 57; optional bool reestablished = 58; optional Amount last_tx_fee_msat = 59; - optional sint64 direction = 60; + optional uint32 direction = 60; optional Amount their_max_htlc_value_in_flight_msat = 61; optional Amount our_max_htlc_value_in_flight_msat = 62; } @@ -1583,6 +1584,49 @@ 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; } @@ -1819,7 +1863,6 @@ message DisableofferResponse { string bolt12 = 4; bool used = 5; optional string label = 6; - optional string description = 7; } message EnableofferRequest { @@ -1833,7 +1876,6 @@ message EnableofferResponse { string bolt12 = 4; bool used = 5; optional string label = 6; - optional string description = 7; } message DisconnectRequest { @@ -2257,7 +2299,6 @@ message ListoffersOffers { string bolt12 = 4; bool used = 5; optional string label = 6; - optional string description = 7; } message ListpaysRequest { @@ -2427,7 +2468,6 @@ message OfferRequest { optional bool single_use = 11; optional bool proportional_amount = 13; optional bool optional_recurrence = 14; - repeated bytes fronting_nodes = 15; } message OfferResponse { @@ -4128,7 +4168,6 @@ message XpayRequest { optional uint32 retry_for = 5; optional Amount partial_msat = 6; optional uint32 maxdelay = 7; - optional string payer_note = 8; } message XpayResponse { @@ -4271,23 +4310,6 @@ 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 21199b69b80c..de1cac32008a 100644 --- a/cln-grpc/src/convert.rs +++ b/cln-grpc/src/convert.rs @@ -9,7 +9,6 @@ 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; @@ -449,10 +448,14 @@ impl From for pb::CheckmessageResponse { } } -#[allow(unused_variables)] +#[allow(unused_variables,deprecated)] 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[] @@ -1330,7 +1333,7 @@ impl From for pb::ListpeerchannelsChannels close_to: c.close_to.map(|v| hex::decode(v).unwrap()), // Rule #2 for type hex? close_to_addr: c.close_to_addr, // Rule #2 for type string? closer: c.closer.map(|v| v as i32), - direction: c.direction, // Rule #2 for type integer? + direction: c.direction, // Rule #2 for type u32? dust_limit_msat: c.dust_limit_msat.map(|f| f.into()), // Rule #2 for type msat? fee_base_msat: c.fee_base_msat.map(|f| f.into()), // Rule #2 for type msat? fee_proportional_millionths: c.fee_proportional_millionths, // Rule #2 for type u32? @@ -1456,6 +1459,53 @@ 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 { @@ -1699,7 +1749,6 @@ impl From for pb::DisableofferResponse { Self { active: c.active, // Rule #2 for type boolean bolt12: c.bolt12, // Rule #2 for type string - description: c.description, // Rule #2 for type string? label: c.label, // Rule #2 for type string? offer_id: >::as_ref(&c.offer_id).to_vec(), // Rule #2 for type hash single_use: c.single_use, // Rule #2 for type boolean @@ -1714,7 +1763,6 @@ impl From for pb::EnableofferResponse { Self { active: c.active, // Rule #2 for type boolean bolt12: c.bolt12, // Rule #2 for type string - description: c.description, // Rule #2 for type string? label: c.label, // Rule #2 for type string? offer_id: >::as_ref(&c.offer_id).to_vec(), // Rule #2 for type hash single_use: c.single_use, // Rule #2 for type boolean @@ -2102,7 +2150,6 @@ impl From for pb::ListoffersOffers { Self { active: c.active, // Rule #2 for type boolean bolt12: c.bolt12, // Rule #2 for type string - description: c.description, // Rule #2 for type string? label: c.label, // Rule #2 for type string? offer_id: >::as_ref(&c.offer_id).to_vec(), // Rule #2 for type hash single_use: c.single_use, // Rule #2 for type boolean @@ -4533,14 +4580,6 @@ 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 { @@ -5245,7 +5284,6 @@ 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? } @@ -5261,6 +5299,16 @@ 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 { @@ -5597,8 +5645,6 @@ 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? @@ -6301,7 +6347,6 @@ impl From for pb::XpayRequest { maxdelay: c.maxdelay, // Rule #2 for type u32? maxfee: c.maxfee.map(|f| f.into()), // Rule #2 for type msat? partial_msat: c.partial_msat.map(|f| f.into()), // Rule #2 for type msat? - payer_note: c.payer_note, // Rule #2 for type string? retry_for: c.retry_for, // Rule #2 for type u32? } } @@ -6360,30 +6405,6 @@ 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 { @@ -7040,7 +7061,6 @@ 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? } @@ -7056,6 +7076,16 @@ 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 { @@ -7384,7 +7414,6 @@ 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? @@ -8078,7 +8107,6 @@ impl From for requests::XpayRequest { maxdelay: c.maxdelay, // Rule #1 for type u32? maxfee: c.maxfee.map(|a| a.into()), // Rule #1 for type msat? partial_msat: c.partial_msat.map(|a| a.into()), // Rule #1 for type msat? - payer_note: c.payer_note, // Rule #1 for type string? retry_for: c.retry_for, // Rule #1 for type u32? } } @@ -8137,30 +8165,6 @@ 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 eab35a993a58..cd42a1614ead 100644 --- a/cln-grpc/src/server.rs +++ b/cln-grpc/src/server.rs @@ -1714,6 +1714,38 @@ 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, @@ -4594,38 +4626,6 @@ 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 808dd71cca13..c43467ab0c94 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/model.rs b/cln-rpc/src/model.rs index 6b88dfdcc825..0f5ab0e2f085 100644 --- a/cln-rpc/src/model.rs +++ b/cln-rpc/src/model.rs @@ -70,6 +70,7 @@ pub enum Request { TxSend(requests::TxsendRequest), ListPeerChannels(requests::ListpeerchannelsRequest), ListClosedChannels(requests::ListclosedchannelsRequest), + DecodePay(requests::DecodepayRequest), Decode(requests::DecodeRequest), DelPay(requests::DelpayRequest), DelForward(requests::DelforwardRequest), @@ -193,8 +194,6 @@ 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)] @@ -255,6 +254,7 @@ 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,8 +378,6 @@ pub enum Response { ListChainMoves(responses::ListchainmovesResponse), ListNetworkEvents(responses::ListnetworkeventsResponse), DelNetworkEvent(responses::DelnetworkeventResponse), - #[serde(rename = "clnrest-register-path")] - ClnrestRegisterPath(responses::ClnrestregisterpathResponse), } @@ -402,7 +400,6 @@ 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 { @@ -2009,8 +2006,6 @@ 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")] @@ -2058,6 +2053,30 @@ 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, } @@ -3143,8 +3162,6 @@ 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, } @@ -4821,8 +4838,6 @@ pub mod requests { #[serde(skip_serializing_if = "Option::is_none")] pub partial_msat: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub payer_note: Option, - #[serde(skip_serializing_if = "Option::is_none")] pub retry_for: Option, #[serde(skip_serializing_if = "crate::is_none_or_empty")] pub layers: Option>, @@ -5052,45 +5067,6 @@ 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" - } - } } @@ -5818,6 +5794,12 @@ 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")] @@ -7500,7 +7482,7 @@ pub mod responses { #[serde(skip_serializing_if = "Option::is_none")] pub closer: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub direction: Option, + pub direction: Option, #[serde(skip_serializing_if = "Option::is_none")] pub dust_limit_msat: Option, #[serde(skip_serializing_if = "Option::is_none")] @@ -7735,6 +7717,104 @@ 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")] @@ -8184,8 +8264,6 @@ pub mod responses { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct DisableofferResponse { - #[serde(skip_serializing_if = "Option::is_none")] - pub description: Option, #[serde(skip_serializing_if = "Option::is_none")] pub label: Option, pub active: bool, @@ -8208,8 +8286,6 @@ pub mod responses { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct EnableofferResponse { - #[serde(skip_serializing_if = "Option::is_none")] - pub description: Option, #[serde(skip_serializing_if = "Option::is_none")] pub label: Option, pub active: bool, @@ -8887,8 +8963,6 @@ pub mod responses { #[derive(Clone, Debug, Deserialize, Serialize)] pub struct ListoffersOffers { - #[serde(skip_serializing_if = "Option::is_none")] - pub description: Option, #[serde(skip_serializing_if = "Option::is_none")] pub label: Option, pub active: bool, @@ -12456,20 +12530,5 @@ 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/codecov.yml b/codecov.yml deleted file mode 100644 index de1b505f8010..000000000000 --- a/codecov.yml +++ /dev/null @@ -1,31 +0,0 @@ -coverage: - status: - project: - default: - # Coverage can decrease by up to 1% and still pass - target: auto - threshold: 1% - patch: - default: - # New code should maintain coverage - target: auto - -comment: - # Post coverage comments on PRs (if we add PR coverage later) - behavior: default - layout: "header, diff, files" - require_changes: false - -# Ignore files that shouldn't affect coverage metrics -ignore: - - "external/**" - - "ccan/**" - - "*/test/**" - - "tools/**" - - "contrib/**" - - "doc/**" - - "devtools/**" - -# Don't fail if coverage data is incomplete -codecov: - require_ci_to_pass: false diff --git a/commitlint.config.js b/commitlint.config.js deleted file mode 100644 index f156abd38cc5..000000000000 --- a/commitlint.config.js +++ /dev/null @@ -1,56 +0,0 @@ -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 62ceb252a8ba..333e3321cb6a 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/gossip_store_wiregen.c +COMMON_SRC_GEN := common/status_wiregen.c common/peer_status_wiregen.c common/scb_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/gossip_store_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_HEADERS := $(COMMON_HEADERS_GEN) $(COMMON_HEADERS_NOGEN) COMMON_SRC := $(COMMON_SRC_NOGEN) $(COMMON_SRC_GEN) @@ -157,8 +157,10 @@ 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 > $@ -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/%) +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/%) clean: common-clean diff --git a/common/bolt12.c b/common/bolt12.c index 4621e62f6960..1435b35d854a 100644 --- a/common/bolt12.c +++ b/common/bolt12.c @@ -171,7 +171,6 @@ 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) @@ -222,16 +221,6 @@ 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: @@ -253,46 +242,6 @@ 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 4a3dff39df39..1148f984b24b 100644 --- a/common/configvar.c +++ b/common/configvar.c @@ -4,7 +4,6 @@ #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 94a1e6a8eb7c..3f10dd82b3ce 100644 --- a/common/gossip_store.c +++ b/common/gossip_store.c @@ -1,19 +1,27 @@ #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 gossip_hdr_and_type buf; + struct hdr_and_type buf; int r; - r = pread(gossip_store_fd, &buf, GOSSIP_HDR_AND_TYPE_SIZE, off); - if (r != GOSSIP_HDR_AND_TYPE_SIZE) + r = pread(gossip_store_fd, &buf, HDR_AND_TYPE_SIZE, off); + if (r != 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 de3d86aabbe7..013f8003a2e1 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 == 16. + * As of this writing, major == 0, minor == 15. */ #define GOSSIP_STORE_MAJOR_VERSION_MASK 0xE0 #define GOSSIP_STORE_MINOR_VERSION_MASK 0x1F @@ -50,14 +50,6 @@ 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 @@ -67,8 +59,11 @@ struct gossip_hdr_and_type { * @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, or message - * is incomplete. To iterate, simply add sizeof(gossip_hdr) + *len to off. + * 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. */ bool gossip_store_readhdr(int gossip_store_fd, size_t off, size_t *len, diff --git a/common/gossmap.c b/common/gossmap.c index 78a885fcb231..948ed0b9c4c1 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,7 +29,11 @@ static bool chanidx_eq_id(const ptrint_t *pidx, struct short_channel_id pidxid = chanidx_id(pidx); return short_channel_id_eq(pidxid, scid); } -HTABLE_DEFINE_NODUPS_TYPE(ptrint_t, chanidx_id, hash_scid, chanidx_eq_id, +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, chanidx_htable); static struct node_id nodeidx_id(const ptrint_t *pidx); @@ -38,16 +42,9 @@ 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) { - 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; + return siphash24(siphash_seed(), &id, PUBKEY_CMPR_LEN); } HTABLE_DEFINE_NODUPS_TYPE(ptrint_t, nodeidx_id, nodeid_hash, nodeidx_eq_id, nodeidx_htable); @@ -89,9 +86,6 @@ 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, @@ -323,13 +317,6 @@ 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; @@ -424,8 +411,6 @@ 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) @@ -518,14 +503,16 @@ static struct gossmap_chan *add_channel(struct gossmap *map, return chan; } -/* 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, +/* Does not set hc->nodeidx! */ +static void fill_from_update(struct gossmap *map, struct short_channel_id_dir *scidd, struct half_chan *hc, - u64 cupdate_off) + u64 cupdate_off, + void (*logcb)(void *cbarg, + enum log_level level, + const char *fmt, + ...), + void *cbarg) { /* Note that first two bytes are message type */ const u64 scid_off = cupdate_off + 2 + (64 + 32); @@ -556,15 +543,18 @@ static bool fill_from_update(struct gossmap *map, hc->proportional_fee = proportional_fee; hc->delay = delay; - /* Check they fit: we turn off if not. */ + /* Check they fit: we turn off if not, log (at debug, it happens!). */ if (hc->base_fee != base_fee || hc->proportional_fee != proportional_fee || hc->delay != delay) { hc->htlc_max = 0; hc->enabled = false; - return 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 true; } /* BOLT #7: @@ -582,31 +572,23 @@ static bool fill_from_update(struct gossmap *map, * * [`u32`:`fee_proportional_millionths`] * * [`u64`:`htlc_maximum_msat`] */ -static bool update_channel(struct gossmap *map, u64 cupdate_off) +static void update_channel(struct gossmap *map, u64 cupdate_off) { struct short_channel_id_dir scidd; struct gossmap_chan *chan; struct half_chan hc; - bool ret; - ret = fill_from_update(map, &scidd, &hc, cupdate_off); + fill_from_update(map, &scidd, &hc, cupdate_off, + map->logcb, map->cbarg); chan = gossmap_find_chan(map, &scidd.scid); /* This can happen if channel gets deleted! */ if (!chan) - 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++; + return; /* 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) @@ -656,144 +638,25 @@ 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))) { - /* Did this replace old announcement? If so, that's dead. */ - if (gossmap_node_announced(n)) { - map->num_live--; - map->num_dead++; - } + if ((n = gossmap_find_node(map, &id))) 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) { - 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); + int fd; - map->fd = open(map->fname, O_RDONLY); - if (map->fd < 0) + fd = open(map->fname, O_RDONLY); + if (fd < 0) err(1, "Failed to reopen %s", map->fname); - /* 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; - } - - 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))); - } + /* This tells us the equivalent offset in new map */ + map->map_end = map_be64(map, ended_off + 2); - 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; + close(map->fd); + map->fd = fd; map->generation++; - - /* 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; + return gossmap_refresh(map); } /* Extra sanity check (if it's cheap): does crc match? */ @@ -812,16 +675,9 @@ static bool csum_matches(const struct gossmap *map, } /* Returns false only if must_be_clean is true. */ -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 bool map_catchup(struct gossmap *map, bool must_be_clean, bool *changed) { - size_t reclen, num_bad_cupdates = 0; + size_t reclen; *changed = false; @@ -841,10 +697,8 @@ static bool map_catchup(struct gossmap *map, if (!(flags & GOSSIP_STORE_COMPLETED_BIT)) break; - if (flags & GOSSIP_STORE_DELETED_BIT) { - map->num_dead++; + if (flags & GOSSIP_STORE_DELETED_BIT) continue; - } /* Partial write, should not happen with completed records. */ if (map->map_end + reclen > map->map_size) @@ -894,9 +748,8 @@ static bool map_catchup(struct gossmap *map, break; if (redundant && must_be_clean) return false; - map->num_live++; } else if (type == WIRE_CHANNEL_UPDATE) - num_bad_cupdates += !update_channel(map, off); + update_channel(map, off); else if (type == WIRE_GOSSIP_STORE_DELETE_CHAN) remove_channel_by_deletemsg(map, off); else if (type == WIRE_NODE_ANNOUNCEMENT) @@ -908,13 +761,8 @@ static bool map_catchup(struct gossmap *map, /* 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", @@ -927,22 +775,10 @@ static bool map_catchup(struct gossmap *map, *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, - void (*dyingcb)(struct short_channel_id scid, - u32 blockheight, - u64 offset, - void *cb_arg), - void *cb_arg, - bool must_be_clean) +static bool load_gossip_store(struct gossmap *map, bool must_be_clean) { bool updated; @@ -963,10 +799,25 @@ static bool load_gossip_store(struct gossmap *map, return false; } - init_map_structs(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); map->map_end = 1; - return map_catchup(map, dyingcb, cb_arg, must_be_clean, &updated); + return map_catchup(map, must_be_clean, &updated); } static void destroy_map(struct gossmap *map) @@ -1317,7 +1168,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]); + fill_from_update(map, &scidd, &chan->half[h], chan->cupdate_off[h], NULL, NULL); /* We wrote the right update, correct? */ assert(short_channel_id_eq(scidd.scid, mod->scid)); @@ -1378,7 +1229,7 @@ bool gossmap_refresh(struct gossmap *map) } } - map_catchup(map, NULL, NULL, false, &changed); + map_catchup(map, false, &changed); return changed; } @@ -1405,32 +1256,27 @@ 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) + void *cbarg) { 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 = cb_arg; + map->cbarg = cbarg; tal_add_destructor(map, destroy_map); - if (!load_gossip_store(map, dyingcb, cb_arg, expected_len != 0)) + if (!load_gossip_store(map, expected_len != 0)) return tal_free(map); if (expected_len != 0 && (map->map_size != map->map_end || map->map_size != expected_len)) { - logcb(cb_arg, LOG_BROKEN, + logcb(cbarg, LOG_BROKEN, "gossip_store only processed %"PRIu64 " bytes of %"PRIu64" (expected %"PRIu64")", map->map_end, map->map_size, expected_len); @@ -2025,9 +1871,3 @@ 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 c8bfbf19fb42..1b60a1fdcc00 100644 --- a/common/gossmap.h +++ b/common/gossmap.h @@ -46,21 +46,17 @@ struct gossmap_chan { enum log_level, \ const char *fmt, \ ...), \ - NULL, (cbarg)) + (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, dyingcb, cb_arg) \ +#define gossmap_load_initial(ctx, filename, expected_len, logcb, cbarg) \ gossmap_load_((ctx), (filename), (expected_len), \ - typesafe_cb_postargs(void, void *, (logcb), (cb_arg), \ + typesafe_cb_postargs(void, void *, (logcb), (cbarg), \ enum log_level, \ const char *fmt, \ ...), \ - typesafe_cb_preargs(void, void *, (dyingcb), (cb_arg), \ - struct short_channel_id, \ - u32, \ - u64), \ - (cb_arg)) + (cbarg)) struct gossmap *gossmap_load_(const tal_t *ctx, const char *filename, @@ -69,10 +65,6 @@ 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. */ @@ -308,13 +300,9 @@ 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 253553973cc8..62348627f3d3 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 */ -enum hsm_secret_error validate_mnemonic(const char *mnemonic) +static bool validate_mnemonic(const char *mnemonic, enum hsm_secret_error *err) { struct words *words; bool ok; @@ -44,10 +44,12 @@ enum hsm_secret_error validate_mnemonic(const char *mnemonic) /* Wordlists can persist, so provide a common context! */ tal_wally_end(notleak_with_children(tal(NULL, char))); - if (!ok) - return HSM_SECRET_ERR_INVALID_MNEMONIC; + if (!ok) { + *err = HSM_SECRET_ERR_INVALID_MNEMONIC; + return false; + } - return HSM_SECRET_OK; + return true; } struct secret *get_encryption_key(const tal_t *ctx, const char *passphrase) @@ -312,8 +314,7 @@ static struct hsm_secret *extract_mnemonic_secret(const tal_t *ctx, } /* Validate mnemonic */ - *err = validate_mnemonic(hsms->mnemonic); - if (*err != HSM_SECRET_OK) { + if (!validate_mnemonic(hsms->mnemonic, err)) { return tal_free(hsms); } @@ -463,9 +464,8 @@ const char *read_stdin_mnemonic(const tal_t *ctx, enum hsm_secret_error *err) } /* Validate mnemonic */ - *err = validate_mnemonic(line); - if (*err != HSM_SECRET_OK) { - return tal_free(line); + if (!validate_mnemonic(line, err)) { + return NULL; } *err = HSM_SECRET_OK; diff --git a/common/hsm_secret.h b/common/hsm_secret.h index 1f6314e63248..740f2ebc058e 100644 --- a/common/hsm_secret.h +++ b/common/hsm_secret.h @@ -129,14 +129,6 @@ 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 e894974ce2f1..8b6c54bdfa51 100644 --- a/common/hsm_version.h +++ b/common/hsm_version.h @@ -33,7 +33,6 @@ * 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 52d0edc004d8..75b841d3837e 100644 --- a/common/htlc_state.c +++ b/common/htlc_state.c @@ -138,3 +138,4 @@ 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 a2ea1bf1b2e1..d3fe80d53997 100644 --- a/common/jsonrpc_errors.h +++ b/common/jsonrpc_errors.h @@ -116,7 +116,6 @@ 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 ac1acadce0a7..a570b0d098d7 100644 --- a/common/onion_encode.h +++ b/common/onion_encode.h @@ -7,7 +7,13 @@ 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 5cecf68777b5..6ac128d9a7a1 100644 --- a/common/sphinx.c +++ b/common/sphinx.c @@ -677,13 +677,54 @@ struct route_step *process_onionpacket( /* Any of these could fail, falling thru with cursor == NULL */ payload_size = fromwire_bigsize(&cursor, &max); - /* 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); + /* 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)); + 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 988ef151cb85..ab192ce61dc5 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 \ - common/gossip_store_wiregen.o \ + gossipd/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 8ae7210dc5f3..fd5af5e00163 100644 --- a/common/test/run-gossmap_canned.c +++ b/common/test/run-gossmap_canned.c @@ -19,9 +19,6 @@ 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 0575bcae1131..b425710ac9b8 100644 --- a/common/test/run-gossmap_local.c +++ b/common/test/run-gossmap_local.c @@ -19,9 +19,6 @@ 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-param.c b/common/test/run-param.c index 3287eb27d9d4..2f73a70e5ced 100644 --- a/common/test/run-param.c +++ b/common/test/run-param.c @@ -376,18 +376,9 @@ static void bad_programmer(void) p_req("repeat", param_millionths, &fpval), NULL); assert(paramcheck_assert_failed); - /* UBSan gets upset with doing arith on NULL pointers, inside - * the p_req macro, so we do it raw here */ -#define p_req_raw(name, cbx, arg) \ - name"", \ - PARAM_REQUIRED, \ - NULL, NULL, \ - (param_cbx)(cbx), \ - (arg) - paramcheck_assert_failed = false; param(cmd, j->buffer, j->toks, - p_req_raw("u64", NULL, NULL), NULL); + p_req("u64", (param_cbx) NULL, NULL), NULL); assert(paramcheck_assert_failed); /* Add required param after optional */ diff --git a/common/test/run-route-specific.c b/common/test/run-route-specific.c index 74653e206822..6e73f459d0ee 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 50f3f3b9b07d..53c7359181de 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 0e33ace54de4..b5a30ef72699 100644 --- a/common/test/run-sphinx-xor_cipher_stream.c +++ b/common/test/run-sphinx-xor_cipher_stream.c @@ -108,6 +108,9 @@ 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(); } @@ -133,6 +136,9 @@ 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 e257d445a6d5..7811f68c91dd 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 = 0, b = 0, c = 0, d = 0; + int a, b, c, d; common_setup(argv[0]); diff --git a/common/utils.c b/common/utils.c index 83c8b59416a9..aba4745218d0 100644 --- a/common/utils.c +++ b/common/utils.c @@ -215,15 +215,6 @@ 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 a95da849f7ea..d9b441e4bc2c 100644 --- a/common/utils.h +++ b/common/utils.h @@ -188,15 +188,6 @@ 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 bee8ab193574..eb135239da61 100755 --- a/configure +++ b/configure @@ -152,7 +152,7 @@ default_valgrind_setting() default_rust_setting() { - if cargo --version > /dev/null 2>&1; then + if cargo --version > /dev/null 2>&1 && rustfmt --version >/dev/null 2>&1; then echo 1 else echo 0 @@ -202,6 +202,7 @@ 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)} @@ -212,17 +213,6 @@ 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]" @@ -365,19 +355,10 @@ 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 $LDFLAGS -o $CONFIGURATOR $CONFIGURATOR.c +$CC ${CWARNFLAGS-$BASE_WARNFLAGS} $CDEBUGFLAGS $COPTFLAGS -o $CONFIGURATOR $CONFIGURATOR.c echo "done" if [ "$CLANG_COVERAGE" = "1" ]; then @@ -425,7 +406,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 @@ -128,13 +127,8 @@ static struct peer *new_peer(struct daemon *daemon, peer->cs = *cs; peer->subds = tal_arr(peer, struct subd *, 0); peer->peer_in = NULL; - 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->sent_to_peer = NULL; + peer->urgent = false; peer->draining_state = NOT_DRAINING; peer->peer_in_lastmsg = -1; peer->peer_outq = msg_queue_new(peer, false); @@ -511,23 +505,6 @@ 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 { @@ -660,10 +637,6 @@ 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); @@ -1200,9 +1173,6 @@ 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 @@ -1682,6 +1652,7 @@ 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, @@ -1689,8 +1660,7 @@ 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, - &daemon->dev_keep_nagle)) { + &dev_limit_connections_inflight)) { /* 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); @@ -2255,10 +2225,6 @@ 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 */ @@ -2436,10 +2402,6 @@ 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); @@ -2564,7 +2526,6 @@ 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 ea012f6a2824..1e78834ba650 100644 --- a/connectd/connectd.h +++ b/connectd/connectd.h @@ -3,7 +3,6 @@ #include "config.h" #include #include -#include #include #include #include @@ -80,18 +79,17 @@ 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; - /* 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; + /* Peer sent buffer (for freeing after sending) */ + const u8 *sent_to_peer; /* We stream from the gossip_store for them, when idle */ struct gossip_state gs; @@ -262,7 +260,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, - hash_scid, + short_channel_id_hash, scid_to_node_id_eq_scid, scid_htable); @@ -340,6 +338,9 @@ 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; @@ -371,8 +372,6 @@ 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 d5f6aee33b01..d3af2709d545 100644 --- a/connectd/connectd_wire.csv +++ b/connectd/connectd_wire.csv @@ -18,6 +18,7 @@ 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, @@ -28,7 +29,6 @@ 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,10 +195,6 @@ 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 3c1808f63d9a..60da90f30be6 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,9 +28,8 @@ 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, uuid)) + if (!fromwire_gossip_store_ended(msg, &equivalent_offset)) 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 0c5b0e4f0222..1cbc98f1e90e 100644 --- a/connectd/multiplex.c +++ b/connectd/multiplex.c @@ -22,12 +22,10 @@ #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; @@ -55,7 +53,6 @@ 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); @@ -99,18 +96,10 @@ 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_to_peer_outq(peer, msg); + msg_enqueue(peer->peer_outq, msg); } static void drain_peer(struct peer *peer) @@ -302,24 +291,44 @@ 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: @@ -343,9 +352,17 @@ 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: @@ -358,6 +375,9 @@ 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: @@ -367,15 +387,15 @@ static bool is_urgent(enum peer_wire type) return true; }; - /* plugins can inject other messages. */ - return true; + /* plugins can inject other messages; assume not urgent. */ + return false; } /* 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(const tal_t *ctx, struct peer *peer, const u8 *msg TAKES) +static u8 *process_batch_elements(struct peer *peer, const u8 *msg TAKES) { - u8 *ret = tal_arr(ctx, u8, 0); + u8 *ret = tal_arr(peer, u8, 0); size_t ret_size = 0; const u8 *cursor = msg; size_t plen = tal_count(msg); @@ -434,30 +454,33 @@ static u8 *process_batch_elements(const tal_t *ctx, struct peer *peer, const u8 return ret; } -/* --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) +static struct io_plan *encrypt_and_send(struct peer *peer, const u8 *msg TAKES) { 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); - return NULL; + break; 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); - return NULL; + break; case DEV_DISCONNECT_OUT_NORMAL: - return NULL; + break; case DEV_DISCONNECT_OUT_DROP: - /* Tell them to read again. */ + /* Drop this message and continue */ + if (taken(msg)) + tal_free(msg); + /* Tell them to read again, */ io_wake(&peer->subds); return msg_queue_wait(peer->to_peer, peer->peer_outq, write_to_peer, peer); @@ -465,113 +488,26 @@ static struct io_plan *msg_out_dev_disconnect(struct peer *peer, const u8 *msg) peer->dev_read_enabled = false; peer->dev_writes_enabled = tal(peer, u32); *peer->dev_writes_enabled = 1; - return NULL; + break; } - 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); -} -/* 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; + set_urgent_flag(peer, is_urgent(type)); /* Special message type directing us to process batch items. */ if (type == WIRE_PROTOCOL_BATCH_ELEMENT) { - enc = process_batch_elements(tmpctx, peer, msg); - if (!enc) - return false; - } else { - enc = cryptomsg_encrypt_msg(tmpctx, &peer->cs, msg); + peer->sent_to_peer = process_batch_elements(peer, msg); + if (!peer->sent_to_peer) + return io_close(peer->to_peer); } - enclen = tal_bytelen(enc); - memcpy(membuf_add(&peer->encrypted_peer_out, enclen), - enc, - enclen); - return true; -} - -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(); + else { + peer->sent_to_peer = cryptomsg_encrypt_msg(peer, &peer->cs, msg); + } + /* We free this and the encrypted version in next write_to_peer */ - assert(have_full_encrypted_queue(peer)); - assert(membuf_num_elems(&peer->encrypted_peer_out) % UNIFORM_MESSAGE_SIZE == 0); + return io_write(peer->to_peer, + peer->sent_to_peer, + tal_bytelen(peer->sent_to_peer), + write_to_peer, peer); } /* Kicks off write_to_peer() to look for more gossip to send from store */ @@ -638,7 +574,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_to_peer_outq(peer, take(msgs[i])); + msg_enqueue(peer->peer_outq, take(msgs[i])); } return msgs[0]; } @@ -796,14 +732,6 @@ 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) { @@ -816,7 +744,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. */ - log_peer_io(peer, msg); + status_peer_io(LOG_IO_IN, &peer->id, msg); daemon_conn_send(peer->daemon->gossipd, take(gmsg)); } @@ -920,22 +848,6 @@ 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) { @@ -945,19 +857,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) { - log_peer_io(peer, msg); + status_peer_io(LOG_IO_IN, &peer->id, msg); handle_gossip_timestamp_filter_in(peer, msg); return true; } else if (type == WIRE_PING) { - log_peer_io(peer, msg); + status_peer_io(LOG_IO_IN, &peer->id, msg); handle_ping_in(peer, msg); return true; } else if (type == WIRE_PONG) { - log_peer_io(peer, msg); + status_peer_io(LOG_IO_IN, &peer->id, msg); handle_pong_in(peer, msg); return true; } else if (type == WIRE_ONION_MESSAGE) { - log_peer_io(peer, msg); + status_peer_io(LOG_IO_IN, &peer->id, msg); handle_onion_message(peer->daemon, peer, msg); return true; } else if (type == WIRE_QUERY_CHANNEL_RANGE) { @@ -1149,122 +1061,55 @@ static void maybe_update_channelid(struct subd *subd, const u8 *msg) } } -static const u8 *next_msg_for_peer(struct peer *peer) +static struct io_plan *write_to_peer(struct io_conn *peer_conn, + 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); - 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; + /* 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 they want us to send gossip, do so now. */ msg = maybe_gossip_msg(NULL, peer); - if (!msg) - return NULL; - } + if (!msg) { + /* Tell them to read again, */ + io_wake(&peer->subds); + io_wake(&peer->peer_in); - /* dev_disconnect can disable writes (discard everything) */ - if (peer->dev_writes_enabled) { - if (*peer->dev_writes_enabled == 0) { - return tal_free(msg); + /* Wait for them to wake us */ + return msg_queue_wait(peer_conn, peer->peer_outq, + write_to_peer, peer); } - (*peer->dev_writes_enabled)--; } - 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); + if (peer->draining_state == WRITING_TO_PEER) + status_peer_debug(&peer->id, "draining, but sending %s.", + peer_wire_name(fromwire_peektype(msg))); - 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); + /* dev_disconnect can disable writes */ + 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); } + (*peer->dev_writes_enabled)--; } - peer->nonurgent_flush_timer = tal_free(peer->nonurgent_flush_timer); - return write_encrypted_to_peer(peer); + return encrypt_and_send(peer, take(msg)); } static struct io_plan *read_from_subd(struct io_conn *subd_conn, @@ -1275,7 +1120,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_to_peer_outq(subd->peer, take(subd->in)); + msg_enqueue(subd->peer->peer_outq, take(subd->in)); subd->in = NULL; /* Wait for them to wake us */ @@ -1422,6 +1267,7 @@ 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 f42f7cb76ea2..1a20143a6764 100644 --- a/connectd/multiplex.h +++ b/connectd/multiplex.h @@ -28,9 +28,6 @@ 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 0f48c7060736..85521395ff6d 100644 --- a/connectd/test/run-crc32_of_update.c +++ b/connectd/test/run-crc32_of_update.c @@ -10,7 +10,6 @@ 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 cc867995a22d..fef93a80fad5 100644 --- a/connectd/tor_autoservice.c +++ b/connectd/tor_autoservice.c @@ -12,7 +12,6 @@ #include #include -int tor_service_fd = -1; static void *buf_resize(struct membuf *mb, void *buf, size_t len) { @@ -332,6 +331,5 @@ 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 950c6a97d3f1..dce91a637e49 100644 --- a/connectd/tor_autoservice.h +++ b/connectd/tor_autoservice.h @@ -18,7 +18,4 @@ 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/api/generate-python-docs.py b/contrib/api/generate-python-docs.py deleted file mode 100755 index bfbf664967c7..000000000000 --- a/contrib/api/generate-python-docs.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env python3 -""" -Generate Python API documentation for all workspace packages using pdoc3. - -This script generates HTML documentation for all Python packages in the -Core Lightning workspace and creates an index page linking to all of them. -""" - -import os -import subprocess -import sys -from datetime import datetime -from pathlib import Path - -# Define packages to document (module name -> source directory) -# Only includes packages that are in the workspace and can be imported -PACKAGES = { - "pyln.client": "contrib/pyln-client", - "pyln.proto": "contrib/pyln-proto", - "pyln.grpc": "contrib/pyln-grpc-proto", - "pyln.testing": "contrib/pyln-testing", - "pyln.spec.bolt7": "contrib/pyln-spec/bolt7", -} - -INDEX_HTML_TEMPLATE = """ - - - Core Lightning Python Packages Documentation - - - -

Core Lightning Python Packages Documentation

-

This page provides links to the API documentation for all Python packages in the Core Lightning workspace.

- -
-
-

pyln.client

-

Client library and plugin library for Core Lightning

-
- -
-

pyln.proto

-

Lightning Network protocol implementation

-
- -
-

pyln.grpc

-

gRPC protocol definitions for Core Lightning

-
- -
-

pyln.testing

-

Testing utilities for Core Lightning

-
- -
-

pyln.spec.bolt7

-

BOLT #7 specification implementation

-
-
- -

Generated on {timestamp}

- - -""" - - -def generate_docs(output_dir: Path, repo_root: Path): - """Generate documentation for all packages.""" - print(f"Generating Python documentation for all workspace packages...") - print(f"Output directory: {output_dir}") - - # Clean and create output directory - if output_dir.exists(): - import shutil - shutil.rmtree(output_dir) - output_dir.mkdir(parents=True) - - # Change to repo root for imports to work correctly - os.chdir(repo_root) - - # Generate documentation for each package - for package, source_dir in PACKAGES.items(): - print(f"Generating docs for {package} (from {source_dir})...") - - try: - # Use pdoc3 to generate HTML documentation - subprocess.run( - [ - "uv", "run", "pdoc3", - "--html", - "--output-dir", str(output_dir), - "--force", - package - ], - check=True, - cwd=repo_root, - ) - except subprocess.CalledProcessError as e: - print(f"Warning: Failed to generate docs for {package}, skipping...") - print(f"Error: {e}") - continue - - # Create index.html - index_path = output_dir / "index.html" - timestamp = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC") - index_path.write_text(INDEX_HTML_TEMPLATE.format(timestamp=timestamp)) - - print("\nDocumentation generated successfully!") - print(f"Open {output_dir}/index.html in your browser to view the documentation.") - - -def main(): - """Main entry point.""" - # Determine paths - script_dir = Path(__file__).parent.resolve() - repo_root = script_dir.parent.parent - - # Default output directory - output_dir = repo_root / "docs" / "python" - - # Allow override via command line argument - if len(sys.argv) > 1: - output_dir = Path(sys.argv[1]) - - generate_docs(output_dir, repo_root) - - -if __name__ == "__main__": - main() diff --git a/contrib/cl-repro.sh b/contrib/cl-repro.sh index 1911328dcc6d..87e61412fd84 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 --no-cache -t cl-repro-$v - < "$LIGHTNING_DIR"/contrib/reprobuild/Dockerfile.$v + sudo docker build -t cl-repro-$v - < "$LIGHTNING_DIR"/contrib/reprobuild/Dockerfile.$v done diff --git a/contrib/clang-coverage-report.sh b/contrib/clang-coverage-report.sh new file mode 100755 index 000000000000..246163ce55cb --- /dev/null +++ b/contrib/clang-coverage-report.sh @@ -0,0 +1,27 @@ +#!/bin/bash -eu +# +# Generates an HTML coverage report from a raw Clang coverage profile. See +# https://clang.llvm.org/docs/SourceBasedCodeCoverage.html for more details. +# +# Example usage to create full_channel.html from full_channel.profraw for the +# run-full_channel unit test: +# ./contrib/clang-coverage-report.sh channeld/test/run-full_channel \ +# full_channel.profraw full_channel.html + +if [[ "$#" -ne 3 ]]; then + echo "Usage: $0 BINARY RAW_PROFILE_FILE TARGET_HTML_FILE" + exit 1 +fi + +readonly BINARY="$1" +readonly RAW_PROFILE_FILE="$2" +readonly TARGET_HTML_FILE="$3" + +MERGED_PROFILE_FILE=$(mktemp) +readonly MERGED_PROFILE_FILE + +llvm-profdata merge -sparse "${RAW_PROFILE_FILE}" -o "${MERGED_PROFILE_FILE}" +llvm-cov show "${BINARY}" -instr-profile="${MERGED_PROFILE_FILE}" -format=html \ + > "${TARGET_HTML_FILE}" + +rm "${MERGED_PROFILE_FILE}" diff --git a/contrib/docker/Dockerfile.builder.fedora b/contrib/docker/Dockerfile.builder.fedora index f30e1a54b9bf..7d4b903fd02f 100644 --- a/contrib/docker/Dockerfile.builder.fedora +++ b/contrib/docker/Dockerfile.builder.fedora @@ -1,9 +1,7 @@ -FROM fedora:40 +FROM fedora:35 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 @@ -22,25 +20,9 @@ RUN dnf update -y && \ jq \ xz \ zlib-devel \ - 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 && \ + cargo \ + libsodium-devel && \ + 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 && \ @@ -48,9 +30,9 @@ RUN wget https://github.com/kristapsdz/lowdown/archive/refs/tags/VERSION_1_0_2.t make install && \ ldconfig && \ cd /tmp && \ - rm -rf VERSION_1_0_2.tar.gz lowdown-VERSION_1_0_2 + rm -rf VERSION_1_0_2.tar.gz lowdown-VERSION_1_0_2 && \ + dnf clean all -# 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 && \ @@ -60,6 +42,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 -# Install uv -ENV PATH="${PATH}:/root/.local/bin" +# Ensure `uv` can be found +ENV PATH=${PATH}:/root/.local/bin RUN wget -qO- https://astral.sh/uv/install.sh | sh diff --git a/contrib/keys/sangbida.txt b/contrib/keys/sangbida.txt deleted file mode 100644 index 05a0096b5772..000000000000 --- a/contrib/keys/sangbida.txt +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBGkw/9sBEAC209CysQoNbbIbCVsKbkoVoUzVCXq1jSJR2MM/ANxfOKUh8Buz -MozxL3BZ0wRoCqVOg+U2ndr8YHnl2Mr5HANC9qWIUcax3fBctqlcIOKgsvEo1Sf+ -ngdAoCE0mOhKm0U3ZbuQjwGefJfa5K+n+CAKihU/W6Am+kzuqlbTxnf4qZehDgZf -ZnmTLj38NLmb5GSbGvdjwXf9RCT37ZJxglUseo0z4o+QDeBUly/OgYzz236VDSYw -/7WsCRIFvk1X6Mo6GsD1fsmHAZtlqt+FrDN+QgDOdeGuWpQmS4ko0ZZkl2Z469Rm -EiCBdR9rx05yYNsYiDI9bI06ja8mXYNK9wiC0VbpfpcVdmVHWp0nsOfUUDiq/wDn -rnewhG32KP6tBSFBC0Vxer1vYqX42n9NU32g4oFEbdkKPB/dl8pX4CKW0DX2bVyo -i7F/WV9jyAuJUG5wz1yXF5arwxRIXSkvOAx1+Xlhdl+9+prSqsWg2DpFiP/pF4VS -l38Y1kiKSNi0ia/pFAF36TY6tND3PstRgYTTmMC9AaB1edy9dI4bnDxK1ODzwTPn -6mwxlw3amb07AroJoJvXMWPr+HRDlXPw+7BqJmRS9pk9ibKlgDcrbWMt/SWrce8X -YNufvVDdz8l4j3owiqhlB82egY4yahOy1rJQZHYeDViedyPBEUr1ljReFwARAQAB -tChTYW5nYmlkYSBDaGF1ZGh1cmkgPHNhbmdiaWRhY0BnbWFpbC5jb20+iQJRBBMB -CAA7FiEEGjccLDBkX6qRqmt9tkPmEoQiGWEFAmkw/9sCGwMFCwkIBwICIgIGFQoJ -CAsCBBYCAwECHgcCF4AACgkQtkPmEoQiGWG/2A//TBiDAgifWWStJ2FKGj0KcElA -1hRshoKLmZ44e/HeR4qLFFOyPRK6Td6tdYq36C0QkVwMq2osTiyntnA0mmYpyTOI -MGKnQeMGAmjqeANEa2j9mGsPDnfVdQjK1gUD0FYa41HbX1okVH19ghLgX8rZwl4h -Vq6N8+16mwId7C+fQ5Hm55lPK9tyOKzBEC/ItAwUDWiGVmwhJA/G0MRtcWg6J+hf -HzaQ7jBLdsgjmIAsLYNtLimq4pF+6QI8md8g3dQugxGKS/cUITqzoeOzdqDcXEU2 -2kWYPcxbErymkUozv8ec+IrID1fd/PkU4SAPUG+qQSfgdGDcbpX1gOE4fqal1lh/ -iaCJMfWe1jWEYRGhCPs4Y6xEJKktIQskG9zzBr2ynJ4nRx0WHW5Uevy82Sw7s6cm -JBKPo4SajfoRRGt0sDftlyIc6DRPyT9RxglIZeN0wIcC2VGqMKEYV1ttWl4tT76a -m8uURtobTh0t6v1KY7s3VQyoottmCoce3XkbDG8LoCAUiFDFb1HkStm18FB6Wy78 -GOJE7f7Z2D0gVvznYFnnGHNYQgUKYyhY/qcUX04Unt6D1idXS5GQ+DCKlONXzMVp -26bSQ67EfGoagjOM2I9A7dbVajl4IIEmf7AwA6r7Ndmcw2vY4Xh+O5sZdeSyKH5S -AZfUxA9PtawLxofC5O25Ag0EaTD/2wEQANHy/d4xtxCaF2ac2EvdUZXdPRTaHjel -KcZz2UouWeBDF15cRI6e4QkdctyOsW325ra6Xce2SsVj/HQc8ILyBENYmmHbGXp7 -B/XwpstfL2hWR7dXnBdN3RW0NpiOW/CbCWdMwUKFD1Y0704C11qSb4BbgcIFJcJy -Yd46ybIYvnFV5uME7LqtjnU6d79IGAgsjbqtYrSaSYxgTnN/rffi3v89lIpFMLHo -M/lJQDuS3r76/o7LfHGxWsxBfzkZOldscUg40hUOKU5Rr0lJGfFtG1jdSstBQI18 -DatCcj+jDziD0Bt9lh35lQWywmPGTcdmgOfg+Ds8oZXy+6PAZcpb7XrE9EZ/0Az7 -pt7fXEhueY9hmr8/v02X16SBN4nPWOwGwe2Nb6ol6DJ/Lkp8HRnSoqY5R7rFtUsP -D1waPKqAVbKiDN330CP8ePj651VjSYFbn+Pn8flDg9EQ9GmdZKnltSE6/twKFrjM -4B/MPVqT06wEdCgnCTzeYmYJPfnKDljfJGQeIw3KoJIvGu5iUlJT5uAyY+n5QSow -kBjjaoCKr0yrZqAM3JtDEZWULyMpWXVjQTYrIY5cG3DJ0QMythDHYZmaLciqINKK -Jh4RSqcHLbtymjmP5C8Exn3NVg7MWxH4AhUSf72RCD3vc4B8omGPiW61X/KkcdRu -pN+U6elZQE0NABEBAAGJAjYEGAEIACAWIQQaNxwsMGRfqpGqa322Q+YShCIZYQUC -aTD/2wIbDAAKCRC2Q+YShCIZYQiHEACKz6YyLxXH0wiy35lbUh4Ng23wM2isZPqf -s0xv0/Hn+yKgbz7wbDjzkyTJNGE7bweawLCqymAjdJd/LrVrlJTd+Y2L+mPmHlws -wXSt66RdfIbM/3C5PVvl308332iBLt5YAaKhp3n+OnNPxMpprQD4hjRfLJd5bWM6 -/3rUMOoEUz0PRpjzqDFOO3X4YLsk0WcK0QEVw4Z/fX5lVREUvoz0wynPZnhBfA8v -pGmj+g9SyyGt7Vpr32rYUp7tf5lo/CY4mEcBH8erYuUDLe8f6I9+Ko93kvyASKiU -BCThyoXzZUzf2A8NLAkUV0OckVxU0v8Sk9pxrypWOOM583D6zMWWWAaTo3F6egVF -BAfLrHNXrI+3DRwdCH4LCA7UWYft6tx8yb1Bd53/x5xzhInjG31bMO5FFimrFmyq -L2dxX4UYSfaYjzS/I202PPDuEpOZIof8gwVo+8Yu0Scythd7UfF9NtzGYnIH76UQ -1ctdIb0fLSHyYpykBfj8haVblZDiQFLq1xbQjqetYszfuMNC61rdX1EvlZxDzXde -KEnsIBHy15T3fwTyUFTv+veFqYfj1NksrgvX/ZcTtLldzdX7Sca4mp5gtOwiO6Ka -R11r45HMD39LK8apkOUn3oHJDsyuWA1kQ3qc52oxTuGukcCYkHrTZzDLYqTzBAzD -qeDZRbi+hw== -=AyDJ ------END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/msggen/msggen/gen/grpc/convert.py b/contrib/msggen/msggen/gen/grpc/convert.py index 3adc7978cd14..72178b31ef36 100644 --- a/contrib/msggen/msggen/gen/grpc/convert.py +++ b/contrib/msggen/msggen/gen/grpc/convert.py @@ -130,8 +130,6 @@ 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 ) @@ -204,7 +202,6 @@ 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 3f2b981ab644..b0af147e168a 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 and not (isinstance(f, PrimitiveField) and f.typename == "string_map") else "" + opt = "optional " if f.optional 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 16a7591d10b6..974139b60e17 100644 --- a/contrib/msggen/msggen/gen/grpc/unconvert.py +++ b/contrib/msggen/msggen/gen/grpc/unconvert.py @@ -131,8 +131,6 @@ 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 267691d59be6..2682d96b9060 100644 --- a/contrib/msggen/msggen/gen/grpc/util.py +++ b/contrib/msggen/msggen/gen/grpc/util.py @@ -35,7 +35,6 @@ "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 b2fa76251666..14beeae64ba1 100644 --- a/contrib/msggen/msggen/gen/rpc/rust.py +++ b/contrib/msggen/msggen/gen/rpc/rust.py @@ -46,7 +46,6 @@ "secret": "Secret", "bip340sig": "String", "integer": "i64", - "string_map": "HashMap", } header = f""" @@ -307,7 +306,6 @@ 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 a48336a97145..50317abea1ef 100644 --- a/contrib/msggen/msggen/model.py +++ b/contrib/msggen/msggen/model.py @@ -432,7 +432,6 @@ class PrimitiveField(Field): "secret", "bip340sig", "hash", - "string_map", ] def __init__(self, typename, path, description, added, deprecated): @@ -520,7 +519,6 @@ 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 @@ -547,6 +545,7 @@ def __str__(self): 'KeySend.routehints': RoutehintListField, 'KeySend.extratlvs': TlvStreamField, 'Decode.routes': DecodeRoutehintListField, + 'DecodePay.routes': DecodeRoutehintListField, 'CreateInvoice.label': InvoiceLabelField, 'DatastoreUsage.key': DatastoreUsageKeyField, 'WaitInvoice.label': InvoiceLabelField, @@ -556,7 +555,6 @@ 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 93ca671162ec..8b2e1abc6e7a 100644 --- a/contrib/msggen/msggen/schema.json +++ b/contrib/msggen/msggen/schema.json @@ -31,13 +31,13 @@ "properties": {} }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-pay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -134,14 +134,14 @@ } }, "author": [ - "Dusty [@dusty_daemon](mailto:@dustydaemon) is mainly responsible." + "Dusty <<@dusty_daemon>> is mainly responsible." ], "see_also": [ "lightning-fundpsbt(7)", "lightning-utxopsbt(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -252,10 +252,10 @@ "lightning-askrene-listlayers(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -388,10 +388,10 @@ "lightning-askrene-age(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -564,10 +564,10 @@ "lightning-askrene-age(7)" ], "author": [ - "Lagrange [lagrang3@protonmail.com](mailto:lagrang3@protonmail.com) is mainly responsible." + "Lagrange <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -684,10 +684,10 @@ "lightning-askrene-age(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -1008,10 +1008,10 @@ "lightning-askrene-age(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -1082,10 +1082,10 @@ "lightning-askrene-age(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -1210,10 +1210,10 @@ "lightning-askrene-age(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -1545,10 +1545,10 @@ "lightning-askrene-age(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -1747,10 +1747,10 @@ "lightning-askrene-unreserve(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -1823,10 +1823,10 @@ "lightning-askrene-listlayers(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -1903,10 +1903,10 @@ "lightning-askrene-listreservations(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -2011,10 +2011,10 @@ "lightning-askrene-listreservations(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -2133,10 +2133,10 @@ "lightning-askrene-create-channel(7)" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -2387,14 +2387,14 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightningd-config(5)", "lightning-autoclean-status(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -2927,7 +2927,7 @@ ] }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightningd-config(5)", @@ -2936,7 +2936,7 @@ "lightning-listforwards(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -3028,10 +3028,10 @@ "- -32602: Error in given parameters." ], "author": [ - "Rusty Russell [rusty@blockstream.com](mailto:rusty@blockstream.com) wrote the initial version of this man page." + "Rusty Russell <> wrote the initial version of this man page." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -3241,7 +3241,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-bkpr-listincome(7)", @@ -3251,7 +3251,7 @@ "lightning-listpeers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -3429,7 +3429,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-bkpr-listincome(7)", @@ -3439,7 +3439,7 @@ "lightning-listpeers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -3715,7 +3715,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-bkpr-editdescriptionbypaymentid(7)", @@ -3723,7 +3723,7 @@ "lightning-bkpr-listincome(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "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": [ @@ -4018,7 +4018,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-bkpr-editdescriptionbyoutpoint(7)", @@ -4026,7 +4026,7 @@ "lightning-bkpr-listincome(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -4270,7 +4270,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-listbalances(7)", @@ -4278,7 +4278,7 @@ "lightning-listpeers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -4572,7 +4572,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-bkpr-listincome(7)", @@ -4581,7 +4581,7 @@ "lightning-bkpr-channelsapy(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -4782,7 +4782,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-bkpr-listincome(7)", @@ -4792,7 +4792,7 @@ "lightning-listpeers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -4992,7 +4992,7 @@ } }, "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-bkpr-listaccountevents(7)", @@ -5000,7 +5000,7 @@ "lightning-bkpr-listbalances(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -5175,14 +5175,14 @@ } }, "author": [ - "Shahana Farooqui [sfarooqui@blockstream.com](mailto:sfarooqui@blockstream.com) is mainly responsible." + "Shahana Farooqui <> is mainly responsible." ], "see_also": [ "lightning-commando-blacklist(7)", "lightning-showrunes(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -5337,13 +5337,13 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-fetchinvoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ] }, "check.json": { @@ -5387,10 +5387,10 @@ ] }, "author": [ - "Mark Beckwith [wythe@intrig.com](mailto:wythe@intrig.com) and Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) are mainly responsible." + "Mark Beckwith <> and Rusty Russell <> are mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -5517,13 +5517,13 @@ "- 1301: *pubkey* not found in the graph." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-signmessage(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -5634,14 +5634,14 @@ "- 1503 (RUNE_BLACKLISTED): rune has been explicitly blacklisted." ], "author": [ - "Shahana Farooqui [sfarooqui@blockstream.com](mailto:sfarooqui@blockstream.com) is mainly responsible for consolidating logic from commando." + "Shahana Farooqui <> is mainly responsible for consolidating logic from commando." ], "see_also": [ "lightning-createrune(7)", "lightning-blacklistrune(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -5678,123 +5678,6 @@ } ] }, - "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", @@ -5908,6 +5791,26 @@ ], "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", @@ -5951,7 +5854,7 @@ "Notifications may be returned indicating what is going on, especially if the peer is offline and we are waiting." ], "author": [ - "ZmnSCPxj [ZmnSCPxj@protonmail.com](mailto:ZmnSCPxj@protonmail.com) is mainly responsible." + "ZmnSCPxj <> is mainly responsible." ], "see_also": [ "lightning-disconnect(7)", @@ -5959,7 +5862,7 @@ "lightningd-config(5)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -6082,7 +5985,7 @@ "It can also fail if the peer does not respond, in which case it will simply hang awaiting a response." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) wrote the original Python commando.py plugin, the in-tree commando plugin, and this manual page.", + "Rusty Russell <> wrote the original Python commando.py plugin, the in-tree commando plugin, and this manual page.", "", "Christian Decker came up with the name \"commando\", which almost excuses his previous adoption of the name \"Eltoo\"." ], @@ -6090,7 +5993,7 @@ "lightning-commando-rune(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -6341,7 +6244,7 @@ "- -32602: If the given parameters are wrong" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible. Felix [fixone@gmail.com](mailto:fixone@gmail.com) is the original author of this manpage." + "Rusty Russell <> is mainly responsible. Felix <> is the original author of this manpage." ], "see_also": [ "lightning-fundchannel(7)", @@ -6350,7 +6253,7 @@ "lightning-disconnect(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -6591,7 +6494,7 @@ "- 900: An invoice with the given *label* already exists." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-invoice(7)", @@ -6602,7 +6505,7 @@ "lightning-offer(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -6719,14 +6622,14 @@ } }, "author": [ - "Christian Decker [decker.christian@gmail.com](mailto:decker.christian@gmail.com) is mainly responsible." + "Christian Decker <> is mainly responsible." ], "see_also": [ "lightning-sendonion(7)", "lightning-getroute(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", "[BOLT 04](https://github.com/lightning/bolts/blob/master/04-onion-routing.md)" ], @@ -6827,14 +6730,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", @@ -6912,16 +6815,16 @@ "If a rune has a ratelimit, any derived rune will have the same id, and thus will compete for that ratelimit. You might want to consider adding a tighter ratelimit to a rune before sharing it, so you will keep the remainder. For example, if your rune has a limit of 60 times per minute, adding a limit of 5 times per minute and handing that rune out means you can still use your original rune 55 times per minute." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) wrote the original Python commando.py plugin, the in-tree commando plugin, and this manual page.", + "Rusty Russell <> wrote the original Python commando.py plugin, the in-tree commando plugin, and this manual page.", "", - "Shahana Farooqui [sfarooqui@blockstream.com](mailto:sfarooqui@blockstream.com) is mainly responsible for migrating commando-rune to createrune." + "Shahana Farooqui <> is mainly responsible for migrating commando-rune to createrune." ], "see_also": [ "lightning-commando-rune(7)", "lightning-checkrune(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "usage": [ "- You can use lightning-decode(7) to examine runes you have been given:", @@ -7182,12 +7085,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", @@ -7348,7 +7251,7 @@ "- -32602: invalid parameters" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listdatastore(7)", @@ -7356,7 +7259,7 @@ "lightning-datastoreusage(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -7489,7 +7392,7 @@ } }, "author": [ - "Peter Neuroth [pet.v.ne@gmail.com](mailto:pet.v.ne@gmail.com) is mainly responsible." + "Peter Neuroth <> is mainly responsible." ], "see_also": [ "lightning-datastore(7)", @@ -7497,7 +7400,7 @@ "lightning-listdatastore(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -9937,7 +9840,7 @@ ] }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-pay(7)", @@ -9952,7 +9855,7 @@ "[BOLT #12](https://github.com/rustyrussell/lightning-rfc/blob/guilt/offers/12-offer-encoding.md)", "(experimental, [bolt](https://github.com/lightning/bolts) #798)", "", - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -10008,6 +9911,311 @@ } ] }, + "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 <> 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: " + ], + "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", @@ -10091,7 +10299,7 @@ "- -32602: invalid parameters" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listdatastore(7)", @@ -10099,7 +10307,7 @@ "lightning-datastoreusage(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -10197,13 +10405,13 @@ "- 1401: The forward specified does not exist." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-autoclean(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -10514,7 +10722,7 @@ "- 908: The invoice already has no description, and *desconly* was set." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listinvoices(7)", @@ -10523,7 +10731,7 @@ "lightning-autoclean-status(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -10609,13 +10817,13 @@ "- 1402: The listnetworkevents specified does not exist." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-autoclean(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ] }, "delpay.json": { @@ -10817,7 +11025,7 @@ "- 208: Payment with payment_hash not found." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) is mainly responsible." + "Vincenzo Palazzo <> is mainly responsible." ], "see_also": [ "lightning-listpays(7)", @@ -10825,7 +11033,7 @@ "lightning-paystatus(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -10950,14 +11158,14 @@ "- -32602: Error in given parameters." ], "author": [ - "Rusty Russell [rusty@blockstream.com](mailto:rusty@blockstream.com) wrote the initial version of this man page." + "Rusty Russell <> wrote the initial version of this man page." ], "see_also": [ "lightningd-config(5)", "lightning-notifications(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -11063,7 +11271,7 @@ "- -1: Catch all nonspecific errors, eg. `Multiple channels: please specify short_channel_id.` OR `No channels matching that peer_id and that short_channel_id.`, etc." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-close(7)", @@ -11072,7 +11280,7 @@ "lightning-listfunds(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -11535,14 +11743,14 @@ "```" ], "author": [ - "Dusty [@dusty_daemon](mailto:@dustydaemon) is mainly responsible." + "Dusty <<@dusty_daemon>> is mainly responsible." ], "see_also": [ "lightning-splice_signed(7)", "lightning-splice_update(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ] }, "disableinvoicerequest.json": { @@ -11625,14 +11833,14 @@ ] }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-invoicerequest(7)", "lightning-listinvoicerequests(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -11714,13 +11922,6 @@ "The bolt12 string representing this offer." ] }, - "description": { - "added": "v26.04", - "type": "string", - "description": [ - "The user-specified bolt 12 description." - ] - }, "used": { "type": "boolean", "description": [ @@ -11739,7 +11940,7 @@ ] }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-enableoffer(7)", @@ -11747,7 +11948,7 @@ "lightning-listoffers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -11763,7 +11964,6 @@ "active": false, "single_use": false, "bolt12": "lno1qgsq000bolt230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000", - "description": "Movie ticket", "used": false } } @@ -11808,14 +12008,14 @@ "- -1: Catchall nonspecific error." ], "author": [ - "Michael Hawkins [michael.hawkins@protonmail.com](mailto:michael.hawkins@protonmail.com)." + "Michael Hawkins <>." ], "see_also": [ "lightning-connect(7)", "lightning-listpeerchannels(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -11875,13 +12075,13 @@ } }, "author": [ - "Aditya [aditya.sharma20111@gmail.com](mailto:aditya.sharma20111@gmail.com) is mainly responsible." + "Aditya <> is mainly responsible." ], "see_also": [ "lightning-getsharedsecret(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -11969,13 +12169,6 @@ "The bolt12 string representing this offer." ] }, - "description": { - "added": "v26.04", - "type": "string", - "description": [ - "The user-specified bolt 12 description." - ] - }, "used": { "type": "boolean", "description": [ @@ -12000,7 +12193,7 @@ "- 1006: offer already enabled." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-offer(7)", @@ -12008,7 +12201,7 @@ "lightning-listoffers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -12024,7 +12217,6 @@ "active": true, "single_use": false, "bolt12": "lno1qgsq000bolt230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000", - "description": "Movie ticket", "used": false } } @@ -12086,13 +12278,13 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-hsmtool(8)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -12511,7 +12703,7 @@ "In C-lightning we like to call the weight unit \"sipa\" in honor of Pieter Wuille, who uses the name \"sipa\" on IRC and elsewhere. Internally we call the *perkw* style as \"feerate per kilosipa\"." ], "author": [ - "ZmnSCPxj [ZmnSCPxj@protonmail.com](mailto:ZmnSCPxj@protonmail.com) wrote the initial version of this manpage." + "ZmnSCPxj <> wrote the initial version of this manpage." ], "see_also": [ "lightning-parsefeerate(7)", @@ -12521,7 +12713,7 @@ "lightning-fundchannel_start(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -12939,14 +13131,14 @@ "- 1005: We timed out trying to fetch an invoice." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-sendinvoice(7)", "lightning-pay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -13217,7 +13409,7 @@ "lightning-multifundchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -13332,7 +13524,7 @@ "- 308: It is unsafe to cancel the channel: the funding transaction has been broadcast, or there are HTLCs already in the channel, or the peer was the initiator and not us." ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-connect(7)", @@ -13346,7 +13538,7 @@ "lightning-openchannel_abort(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -13447,7 +13639,7 @@ "- 309: PSBT does not have a unique, correct output to fund the channel." ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-connect(7)", @@ -13462,7 +13654,7 @@ "lightning-openchannel_abort(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -13686,7 +13878,7 @@ "- 312: Peer negotiated `option_dual_fund`, must use `openchannel_init` not `fundchannel_start`. (Only if ``experimental-dual-fund` is enabled)" ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-connect(7)", @@ -13701,7 +13893,7 @@ "lightning-openchannel_abort(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -14027,14 +14219,14 @@ "- -32602: If the given parameters are invalid." ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-fundchannel(7)", "lightning-listfunds(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -14287,7 +14479,7 @@ "- 301: Insufficient UTXOs to meet *satoshi* value." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-utxopsbt(7)", @@ -14295,7 +14487,7 @@ "lightning-unreserveinputs(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -14368,13 +14560,13 @@ } }, "author": [ - "Aditya [aditya.sharma20111@gmail.com](mailto:aditya.sharma20111@gmail.com) is mainly responsible." + "Aditya <> is mainly responsible." ], "see_also": [ "lightning-getsharedsecret(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -14765,7 +14957,7 @@ "- -32602: Error in given parameters or some error happened during the command process." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "see_also": [ @@ -14774,7 +14966,7 @@ "lightning-listconfigs(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -14818,7 +15010,7 @@ "$schema": "../rpc-schema-draft.json", "type": "object", "rpc": "getlog", - "title": "Command to show recent logs.", + "title": "Command to show logs.", "description": [ "The **getlog** the RPC command to show logs, with optional log *level*." ], @@ -14992,7 +15184,8 @@ "required": [ "time", "source", - "log" + "log", + "data" ], "properties": { "type": {}, @@ -15040,11 +15233,11 @@ "- -32602: Error in given parameters." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -15252,33 +15445,194 @@ "", "Here are the risk fees in millisatoshis, using various parameters. I assume a channel charges the default of 1000 millisatoshis plus 1 part-per-million. Common to_self_delay values on the network at 14 and 144 blocks.", "", - "| Amount (msat) | Riskfactor | Delay | Risk Fee | Route fee |", - "|------------------------|--------------------|---------------|------------------|-------------------|", - "| 10,000 | 1 | 14 | 0 | 1001 |", - "| 10,000 | 10 | 14 | 0 | 1001 |", - "| 10,000 | 100 | 14 | 2 | 1001 |", - "| 10,000 | 1000 | 14 | 26 | 1001 |", - "| 1,000,000 | 1 | 14 | 2 | 1001 |", - "| 1,000,000 | 10 | 14 | 26 | 1001 |", - "| 1,000,000 | 100 | 14 | 266 | 1001 |", - "| 1,000,000 | 1000 | 14 | 2661 | 1001 |", - "| 100,000,000 | 1 | 14 | 266 | 1100 |", - "| 100,000,000 | 10 | 14 | 2661 | 1100 |", - "| 100,000,000 | 100 | 14 | 26617 | 1100 |", - "| 100,000,000 | 1000 | 14 | 266179 | 1100 |", - "| 10,000 | 1 | 144 | 0 | 1001 |", - "| 10,000 | 10 | 144 | 2 | 1001 |", - "| 10,000 | 100 | 144 | 27 | 1001 |", - "| 10,000 | 1000 | 144 | 273 | 1001 |", - "| 1,000,000 | 1 | 144 | 27 | 1001 |", - "| 1,000,000 | 10 | 144 | 273 | 1001 |", - "| 1,000,000 | 100 | 144 | 2737 | 1001 |", - "| 1,000,000 | 1000 | 144 | 27378 | 1001 |", - "| 100,000,000 | 1 | 144 | 2737 | 1100 |", - "| 100,000,000 | 10 | 144 | 27378 | 1100 |", - "| 100,000,000 | 100 | 144 | 273785 | 1100 |", - "| 100,000,000 | 1000 | 144 | 2737850 | 1100 |", - "" + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "
Amount (msat)RiskfactorDelayRisk FeeRoute fee

10,000

1

14

0

1001

10,000

10

14

0

1001

10,000

100

14

2

1001

10,000

1000

14

26

1001

1,000,000

1

14

2

1001

1,000,000

10

14

26

1001

1,000,000

100

14

266

1001

1,000,000

1000

14

2661

1001

100,000,000

1

14

266

1100

100,000,000

10

14

2661

1100

100,000,000

100

14

26617

1100

100,000,000

1000

14

266179

1100

10,000

1

144

0

1001

10,000

10

144

2

1001

10,000

100

144

27

1001

10,000

1000

144

273

1001

1,000,000

1

144

27

1001

1,000,000

10

144

273

1001

1,000,000

100

144

2737

1001

1,000,000

1000

144

27378

1001

100,000,000

1

144

2737

1100

100,000,000

10

144

27378

1100

100,000,000

100

144

273785

1100

100,000,000

1000

144

2737850

1100

" ], "recommended_riskfactor_values": [ "The default *fuzz* factor is 5%, so as you can see from the table above, that tends to overwhelm the effect of *riskfactor* less than about 5.", @@ -15290,14 +15644,14 @@ "The default for lightning-pay(7) is 10, which starts to become a major factor for larger amounts, and is basically ignored for tiny ones." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-pay(7)", "lightning-sendpay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -15378,7 +15732,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 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." + "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." ], "categories": [ "readonly" @@ -15542,7 +15896,7 @@ } }, "author": [ - "[lagrang3@protonmail.com](mailto:lagrang3@protonmail.com) wrote the minimum-cost-flow solver, Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) wrote the API and this documentation." + "<> wrote the minimum-cost-flow solver, Rusty Russell <> wrote the API and this documentation." ], "see_also": [ "lightning-askrene-reserve(7)", @@ -15554,7 +15908,7 @@ "lightning-askrene-age(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -15660,11 +16014,11 @@ "- -32602: Error in given parameters." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -15740,10 +16094,10 @@ "properties": {} }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", "[bolt04]: https://github.com/lightning/bolts/blob/master/04-onion-routing.md" ], @@ -15892,7 +16246,7 @@ "The *data* object contains the previous success, as per lightning-sendpay." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-createonion(7)", @@ -15900,7 +16254,7 @@ "lightning-listsendpays(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", "[bolt04]: https://github.com/lightning/bolts/blob/master/04-onion-routing.md" ], @@ -16119,7 +16473,7 @@ "- 902: None of the specified *exposeprivatechannels* were usable." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listinvoices(7)", @@ -16127,7 +16481,7 @@ "lightning-pay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -16283,14 +16637,14 @@ "- -1: Catchall nonspecific error." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listinvoicerequests(7)", "lightning-disableinvoicerequest(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -16550,18 +16904,18 @@ "*channel_update*: The hex string of the *channel_update* message received from the remote node. Only present if error is from the remote node and the *failcode* has the `UPDATE` bit set, as per BOLT #4." ], "author": [ - "Christian Decker [decker@blockstream.com](mailto:decker@blockstream.com) is mainly responsible." + "Christian Decker <> is mainly responsible." ], "see_also": [ "lightning-listpays(7)", - "lightning-decode(7)", + "lightning-decodepay(7)", "lightning-listinvoices(7)", "lightning-delinvoice(7)", "lightning-getroute(7)", "lightning-invoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -16718,14 +17072,14 @@ } }, "author": [ - "Shahana Farooqui [sfarooqui@blockstream.com](mailto:sfarooqui@blockstream.com) is mainly responsible." + "Shahana Farooqui <> is mainly responsible." ], "see_also": [ "lightning-newaddr(7)", "lightning-withdraw(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -16967,7 +17321,7 @@ "- -32602: Error in given parameters." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -17469,7 +17823,7 @@ "- -32602: Error in given parameters." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -17884,16 +18238,16 @@ "- -32602: If the given parameters are wrong." ], "author": [ - "Michael Hawkins [michael.hawkins@protonmail.com](mailto:michael.hawkins@protonmail.com)." + "Michael Hawkins <>." ], "see_also": [ "lightning-fundchannel(7)", "lightning-listnodes(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", - "BOLT #7: [https://github.com/lightning/bolts/blob/master/07-routing-gossip.md](https://github.com/lightning/bolts/blob/master/07-routing-gossip.md)" + "BOLT #7: " ], "examples": [ { @@ -18345,13 +18699,13 @@ "- -32602: If the given parameters are wrong." ], "author": [ - "Rusty Russell [rusty@blockstream.com](mailto:rusty@blockstream.com)." + "Rusty Russell <>." ], "see_also": [ "lightning-listpeerchannels(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -20147,7 +20501,7 @@ "- -32602: Error in given parameters or field with *config* name doesn't exist." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "see_also": [ @@ -20155,7 +20509,7 @@ "lightningd-config(5)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -20728,7 +21082,7 @@ "- -32602: invalid parameters." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-datastore(7)", @@ -20736,7 +21090,7 @@ "lightning-datastoreusage(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -21157,14 +21511,14 @@ } }, "author": [ - "Rene Pickhardt [r.pickhardt@gmail.com](mailto:r.pickhardt@gmail.com) is mainly responsible." + "Rene Pickhardt <> is mainly responsible." ], "see_also": [ "lightning-autoclean-status(7)", "lightning-getinfo(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -21641,7 +21995,7 @@ } }, "author": [ - "Felix [fixone@gmail.com](mailto:fixone@gmail.com) is mainly responsible." + "Felix <> is mainly responsible." ], "see_also": [ "lightning-newaddr(7)", @@ -21650,7 +22004,7 @@ "lightning-listtransactions(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -21888,13 +22242,13 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listforwards(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -22085,14 +22439,14 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-invoicerequests(7)", "lightning-disableinvoicerequest(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -22437,7 +22791,7 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-waitinvoice(7)", @@ -22445,7 +22799,7 @@ "lightning-invoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -22693,14 +23047,14 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-autoclean(7)", "lightning-listpeers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ] }, "listnodes.json": { @@ -22960,14 +23314,14 @@ "- -32602: Error in given parameters." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "see_also": [ "lightning-listchannels(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -23108,13 +23462,6 @@ "The bolt12 encoding of the offer." ] }, - "description": { - "added": "v26.04", - "type": "string", - "description": [ - "The user-specified bolt 12 description." - ] - }, "used": { "type": "boolean", "description": [ @@ -23133,14 +23480,14 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-offer(7)", "lightning-listoffers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -23158,7 +23505,6 @@ "active": true, "single_use": false, "bolt12": "lno1qgsq000bolt210002100021000210002100021000210002100021000210002100021000210002100021000210002100021000210002100021000210002100021000", - "description": "Fish sale!", "used": false }, { @@ -23166,7 +23512,6 @@ "active": true, "single_use": false, "bolt12": "lno1qgsq000bolt220002200022000220002200022000220002200022000220002200022000220002200022000220002200022000220002200022000220002200022000", - "description": "Coffee", "used": false }, { @@ -23174,7 +23519,6 @@ "active": true, "single_use": false, "bolt12": "lno1qgsq000bolt230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000230002300023000", - "description": "Movie ticket", "used": false } ] @@ -23467,7 +23811,7 @@ ] }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-pay(7)", @@ -23475,7 +23819,7 @@ "lightning-listsendpays(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -23509,11 +23853,9 @@ "rpc": "listpeerchannels", "title": "Command returning data on channels of connected lightning nodes", "description": [ - "The **listpeerchannels** RPC command returns a list of this node's channels.", + "The **listpeerchannels** RPC command returns list of this node's channels, with the possibility to filter them by peer's node id.", "", - "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." + "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." ], "categories": [ "readonly" @@ -23525,21 +23867,14 @@ "id": { "type": "pubkey", "description": [ - "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'." + "If supplied, limits the channels to just the peer with the given ID, if it exists." ] }, "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' 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'." + "If supplied, limits the channels to just this short_channel_id (or local alias), if it exists. Cannot be used with 'id'." ] } } @@ -23824,12 +24159,6 @@ "The short_channel_id (once locked in)." ] }, - "direction": { - "type": "integer", - "description": [ - "The direction of the channel (i.e. 0 if we are the lesser node id, 1 if we are the greater)." - ] - }, "channel_id": { "type": "hash", "description": [ @@ -23975,11 +24304,12 @@ "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." + "BOLT #9 features which apply to this channel. Note that *anchors_zero_fee_htlc_tx* is a deprecated synonym for *anchors*." ] } }, @@ -24086,7 +24416,7 @@ ], "deprecated": [ "v25.02", - "v26.03" + "v26.06" ] }, "their_max_htlc_value_in_flight_msat": { @@ -24971,16 +25301,16 @@ "- -32602: If the given parameters are wrong." ], "author": [ - "Michael Hawkins [michael.hawkins@protonmail.com](mailto:michael.hawkins@protonmail.com)." + "Michael Hawkins <>." ], "see_also": [ "lightning-connect(7)", "lightning-fundchannel_start(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "Lightning RFC site (BOLT #9): ", - "[https://github.com/lightningnetwork/lightning-rfc/blob/master/09-features.md](https://github.com/lightningnetwork/lightning-rfc/blob/master/09-features.md)" + "" ], "examples": [ { @@ -25048,6 +25378,7 @@ }, "features": [ "option_static_remotekey", + "option_anchors_zero_fee_htlc_tx", "option_anchors" ], "funding": { @@ -25179,6 +25510,7 @@ }, "features": [ "option_static_remotekey", + "option_anchors_zero_fee_htlc_tx", "option_anchors" ], "funding": { @@ -25304,6 +25636,7 @@ }, "features": [ "option_static_remotekey", + "option_anchors_zero_fee_htlc_tx", "option_anchors" ], "funding": { @@ -25710,7 +26043,7 @@ "- -32602: If the given parameters are wrong." ], "author": [ - "Michael Hawkins [michael.hawkins@protonmail.com](mailto:michael.hawkins@protonmail.com)." + "Michael Hawkins <>." ], "see_also": [ "lightning-connect(7)", @@ -25718,9 +26051,9 @@ "lightning-setchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "Lightning RFC site (BOLT #9):", - "[https://github.com/lightning/bolts/blob/master/09-features.md](https://github.com/lightning/bolts/blob/master/09-features.md)" + "" ], "examples": [ { @@ -26114,7 +26447,7 @@ ] }, "author": [ - "Christian Decker [decker.christian@gmail.com](mailto:decker.christian@gmail.com) is mainly responsible." + "Christian Decker <> is mainly responsible." ], "see_also": [ "lightning-listpays(7)", @@ -26122,7 +26455,7 @@ "lightning-listinvoices(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -26338,13 +26671,13 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-sql(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -26677,7 +27010,7 @@ "- -32602: Error in given parameters." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "see_also": [ @@ -26685,7 +27018,7 @@ "lightning-listfunds(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -26796,10 +27129,10 @@ "- -1: Catchall nonspecific error." ], "author": [ - "Aditya [aditya.sharma20111@gmail.com](mailto:aditya.sharma20111@gmail.com) is mainly responsible." + "Aditya <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -27150,7 +27483,7 @@ "There may be rare edge cases where a communications failure later in the channel funding process will cancel the funding locally, but the peer thinks the channel is already waiting for funding lockin. In that case, the next time we connect to the peer, our node will tell the peer to forget the channel, but some nodes (in particular, Core Lightning nodes) will disconnect when our node tells them to forget the channel. If you immediately **multifundchannel** with that peer, it could trigger this connect-forget-disconnect behavior, causing the second **multifundchannel** to fail as well due to disconnection. Doing a **connect** with the peers separately, and waiting for a few seconds, should help clear this hurdle; running **multifundchannel** a third time would also clear this." ], "author": [ - "ZmnSCPxj [ZmnSCPxj@protonmail.com](mailto:ZmnSCPxj@protonmail.com) is mainly responsible." + "ZmnSCPxj <> is mainly responsible." ], "see_also": [ "lightning-connect(7)", @@ -27159,7 +27492,7 @@ "lightning-fundchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -27384,7 +27717,7 @@ "- 302: The dust limit is not met." ], "author": [ - "ZmnSCPxj [ZmnSCPxj@protonmail.com](mailto:ZmnSCPxj@protonmail.com) is mainly responsible." + "ZmnSCPxj <> is mainly responsible." ], "see_also": [ "lightning-listfunds(7)", @@ -27394,7 +27727,7 @@ "lightning-withdraw(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -27507,7 +27840,7 @@ "If an unrecognized address type is requested an error message will be returned." ], "author": [ - "Felix [fixone@gmail.com](mailto:fixone@gmail.com) is mainly responsible." + "Felix <> is mainly responsible." ], "see_also": [ "lightning-listfunds(7)", @@ -27516,7 +27849,7 @@ "lightning-listtransactions(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -27589,10 +27922,10 @@ "- -32602: Error in given parameters." ], "author": [ - "Rusty Russell [rusty@blockstream.com](mailto:rusty@blockstream.com) wrote the initial version of this man page." + "Rusty Russell <> wrote the initial version of this man page." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "example_notifications": [ { @@ -27744,17 +28077,6 @@ "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 } @@ -27827,7 +28149,7 @@ "- 1000: Offer with this offer_id already exists (but is not active)." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listoffers(7)", @@ -27835,7 +28157,7 @@ "lightning-invoicerequest(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -27937,7 +28259,7 @@ "- 312: Channel in an invalid state" ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-openchannel_init(7)", @@ -27952,7 +28274,7 @@ "lightning-multifundchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -28127,7 +28449,7 @@ "- 312: Channel in an invalid state" ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-openchannel_init(7)", @@ -28142,7 +28464,7 @@ "lightning-multifundchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -28432,7 +28754,7 @@ "- 312: Channel in an invalid state" ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-openchannel_update(7)", @@ -28447,7 +28769,7 @@ "lightning-multifundchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -28581,7 +28903,7 @@ "- 312: Channel in an invalid state" ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-openchannel_init(7)", @@ -28596,7 +28918,7 @@ "lightning-multifundchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -28821,7 +29143,7 @@ "- 312: Channel in an invalid state" ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-openchannel_init(7)", @@ -28836,7 +29158,7 @@ "lightning-multifundchannel(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -28939,7 +29261,7 @@ "In CLN we like to call the weight unit \"sipa\" in honor of Pieter Wuille, who uses the name \"sipa\" on IRC and elsewhere. Internally we call the *perkw* style as \"feerate per kilosipa\"." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -29219,18 +29541,18 @@ "The *data* field of errors will include statistics *getroute_tries* and *sendpay_tries*. It will also contain a *failures* field with detailed data about routing errors." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listpays(7)", - "lightning-decode(7)", + "lightning-decodepay(7)", "lightning-listinvoices(7)", "lightning-delinvoice(7)", "lightning-getroute(7)", "lightning-invoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -29279,7 +29601,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 only works for peers we are currently connected with." + "The **ping** command checks if the node with *id* is ready to talk. It currently only works for peers we have a channel with." ], "request": { "required": [ @@ -29329,14 +29651,14 @@ "- -32602: Error in given parameters or we're already waiting for a ping response from peer." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "see_also": [ "lightning-connect(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -29548,7 +29870,7 @@ "On error, the reason why the action could not be taken upon the plugin is returned." ], "author": [ - "Antoine Poinsot [darosior@protonmail.com](mailto:darosior@protonmail.com) is mainly responsible." + "Antoine Poinsot <> is mainly responsible." ], "see_also": [ "lightning-cli(1)", @@ -29556,7 +29878,7 @@ "[writing plugins][writing plugins]" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", "[writing plugins]: https://docs.corelightning.org/docs/plugin-development" ], @@ -29868,13 +30190,13 @@ "properties": {} }, "author": [ - "Ken Sedgwick [ken@bonsai.com](mailto:ken@bonsai.com) is mainly responsible." + "Ken Sedgwick <> is mainly responsible." ], "see_also": [ "lightning-pay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -29954,13 +30276,13 @@ "properties": {} }, "author": [ - "Ken Sedgwick [ken@bonsai.com](mailto:ken@bonsai.com) is mainly responsible." + "Ken Sedgwick <> is mainly responsible." ], "see_also": [ "lightning-keysend(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -30078,13 +30400,13 @@ } }, "author": [ - "Alex Myers [alex@endothermic.dev](mailto:alex@endothermic.dev) is mainly responsible." + "Alex Myers <> is mainly responsible." ], "see_also": [ "reckless(1)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -30189,9 +30511,7 @@ "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).", "", - "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.", + "*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." ], @@ -30204,7 +30524,7 @@ "hsmsecret": { "type": "string", "description": [ - "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." + "Either a codex32 secret starting with `cl1` as returned by `lightning-hsmtool getcodexsecret`, or a raw 64 character hex string." ] } } @@ -30225,13 +30545,13 @@ } }, "author": [ - "Rusty Russell [rusty@blockstream.com](mailto:rusty@blockstream.com) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-hsmtool(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -30305,13 +30625,13 @@ } }, "author": [ - "Aditya [aditya.sharma20111@gmail.com](mailto:aditya.sharma20111@gmail.com) is mainly responsible." + "Aditya <> is mainly responsible." ], "see_also": [ "lightning-getsharedsecret(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -30546,7 +30866,7 @@ "- 212: Invoice is invalid." ], "author": [ - "Eduardo Quintana-Miranda [eduardo.quintana@pm.me](mailto:eduardo.quintana@pm.me) is mainly responsible." + "Eduardo Quintana-Miranda <> is mainly responsible." ], "see_also": [ "lightning-renepaystatus(7)", @@ -30554,9 +30874,9 @@ "lightning-invoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", - "Pickhardt R. and Richter S., *Optimally Reliable & Cheap Payment Flows on the Lightning Network* [https://arxiv.org/abs/2107.05322](https://arxiv.org/abs/2107.05322)" + "Pickhardt R. and Richter S., *Optimally Reliable & Cheap Payment Flows on the Lightning Network* " ], "examples": [ { @@ -30733,14 +31053,14 @@ } }, "author": [ - "Eduardo Quintana-Miranda [eduardo.quintana@pm.me](mailto:eduardo.quintana@pm.me) is mainly responsible." + "Eduardo Quintana-Miranda <> is mainly responsible." ], "see_also": [ "lightning-renepay(7)", "lightning-listpays(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -30869,7 +31189,7 @@ "- -32602: Invalid parameter, such as specifying a spent/reserved input in *psbt*." ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-unreserveinputs(7)", @@ -30877,7 +31197,7 @@ "lightning-sendpsbt(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -30974,14 +31294,14 @@ ] }, "author": [ - "Christian Decker [decker.christian@gmail.com](mailto:decker.christian@gmail.com) is mainly responsible." + "Christian Decker <> is mainly responsible." ], "see_also": [ "lightning-createonion(7)", "lightning-sendonion(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -31198,13 +31518,13 @@ "- 1005: We timed out waiting for the invoice to be paid" ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-fetchinvoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -31563,7 +31883,7 @@ "the error details are decrypted and presented here, if *shared_secrets* was provided and an error was returned by one of the intermediate nodes" ], "author": [ - "Christian Decker [decker.christian@gmail.com](mailto:decker.christian@gmail.com) is mainly responsible." + "Christian Decker <> is mainly responsible." ], "see_also": [ "lightning-injectpaymentonion(7)", @@ -31572,7 +31892,7 @@ "lightning-listsendpays(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", "[bolt04]: https://github.com/lightning/bolts/blob/master/04-onion-routing.md" ], @@ -31955,7 +32275,7 @@ "*channel_update*: The hex string of the *channel_update* message received from the remote node. Only present if error is from the remote node and the *failcode* has the UPDATE bit set, as per BOLT #4." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listinvoices(7)", @@ -31966,7 +32286,7 @@ "lightning-waitsendpay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -32067,7 +32387,7 @@ "- -32602: Error in given parameters or some error happened during the command process." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "see_also": [ @@ -32076,7 +32396,7 @@ "lightning-listtransactions(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -32255,7 +32575,7 @@ "- -32602: JSONRPC2_INVALID_PARAMS, i.e. Given id is not a channel ID or short channel ID." ], "author": [ - "Michael Schmoock [michael@schmoock.net](mailto:michael@schmoock.net) is the author of this feature." + "Michael Schmoock <> is the author of this feature." ], "see_also": [ "lightningd-config(5)", @@ -32264,7 +32584,7 @@ "lightning-listpeers(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -32455,14 +32775,14 @@ "- -32602: JSONRPC2_INVALID_PARAMS, i.e. the parameter is not dynamic, or the val was invalid." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible for this feature." + "Rusty Russell <> is mainly responsible for this feature." ], "see_also": [ "lightningd-config(5)", "lightning-listconfigs(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -32553,7 +32873,7 @@ "- -32602: Parameter missed or malformed." ], "author": [ - "Gregory Sanders [gsanders87@gmail.com](mailto:gsanders87@gmail.com) is mainly responsible." + "Gregory Sanders <> is mainly responsible." ], "see_also": [ "lightning-fundpsbt(7)", @@ -32561,7 +32881,7 @@ "lightning-signpsbt(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -32750,14 +33070,14 @@ } }, "author": [ - "Shahana Farooqui [sfarooqui@blockstream.com](mailto:sfarooqui@blockstream.com) is mainly responsible." + "Shahana Farooqui <> is mainly responsible." ], "see_also": [ "lightning-commando-showrunes(7)", "lightning-blacklistrune(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -33138,7 +33458,7 @@ "- -1: Catchall nonspecific error." ], "author": [ - "Carl Dong [contact@carldong.me](mailto:contact@carldong.me) is mainly responsible." + "Carl Dong <> is mainly responsible." ], "see_also": [ "lightning-createinvoice(7)", @@ -33150,7 +33470,7 @@ "lightning-offer(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -33234,13 +33554,13 @@ } }, "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-checkmessage(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)", + "Main web site: ", "", "[SignMessageRequest](https://api.lightning.community/#grpc-request-signmessagerequest)" ], @@ -33343,11 +33663,11 @@ } }, "author": [ - "Lagrang3 [lagrang3@protonmail.com](mailto:lagrang3@protonmail.com) is mainly responsible." + "Lagrang3 <> is mainly responsible." ], "see_also": [], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -33423,7 +33743,7 @@ "- -32602: Error in given parameters, or there aren't wallet's inputs to sign, or we couldn't sign all of *signonly*, or inputs are not reserved." ], "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "see_also": [ @@ -33431,7 +33751,7 @@ "lightning-sendpsbt(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -33563,14 +33883,14 @@ "```" ], "author": [ - "Dusty [@dusty_daemon](mailto:@dustydaemon) is mainly responsible." + "Dusty <<@dusty_daemon>> is mainly responsible." ], "see_also": [ "lightning-splice_signed(7)", "lightning-splice_update(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -33727,14 +34047,14 @@ "```" ], "author": [ - "Dusty [@dusty_daemon](mailto:@dustydaemon) is mainly responsible." + "Dusty <<@dusty_daemon>> is mainly responsible." ], "see_also": [ "lightning-splice_init(7)", "lightning-splice_update(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -33895,14 +34215,14 @@ "```" ], "author": [ - "Dusty [@dusty_daemon](mailto:@dustydaemon) is mainly responsible." + "Dusty <<@dusty_daemon>> is mainly responsible." ], "see_also": [ "lightning-splice_init(7)", "lightning-splice_signed(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34058,7 +34378,7 @@ "On failure, an error is returned." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listtransactions(7)", @@ -34077,7 +34397,7 @@ "lightning-listforwards(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34224,6 +34544,12 @@ 0, "option_static_remotekey" ], + [ + 29, + 23, + 1, + "option_anchors_zero_fee_htlc_tx" + ], [ 30, 23, @@ -34266,13 +34592,13 @@ } }, "author": [ - "Aditya [aditya.sharma20111@gmail.com](mailto:aditya.sharma20111@gmail.com) is mainly responsible." + "Aditya <> is mainly responsible." ], "see_also": [ "lightning-getsharedsecret(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34323,11 +34649,11 @@ } }, "author": [ - "Vincenzo Palazzo [vincenzo.palazzo@protonmail.com](mailto:vincenzo.palazzo@protonmail.com) wrote the initial version of this man page,", + "Vincenzo Palazzo <> wrote the initial version of this man page,", "but many others did the hard work of actually implementing this rpc command." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34394,14 +34720,14 @@ "- -1: An unknown *txid*." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-txprepare(7)", "lightning-txsend(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34451,7 +34777,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" @@ -34518,7 +34844,7 @@ "- 302: The dust limit is not met." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-withdraw(7)", @@ -34527,7 +34853,7 @@ "lightning-feerates(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34624,14 +34950,14 @@ "- -1: Catchall nonspecific error." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-txprepare(7)", "lightning-txdiscard(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34778,7 +35104,7 @@ "- -32602: Invalid parameter, i.e. an unparseable PSBT." ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-unreserveinputs(7)", @@ -34786,7 +35112,7 @@ "lightning-sendpsbt(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -34887,7 +35213,7 @@ "The caller can call `upgradewallet` to convert their funds to native segwit outputs, which are valid for liquidity ad buys." ], "author": [ - "Lisa Neigut [niftynei@gmail.com](mailto:niftynei@gmail.com) is mainly responsible." + "Lisa Neigut <> is mainly responsible." ], "see_also": [ "lightning-utxopsbt(7)", @@ -34895,7 +35221,7 @@ "lightning-unreserveinputs(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -35122,13 +35448,13 @@ "- 301: Insufficient UTXOs to meet *satoshi* value." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-fundpsbt(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -35940,7 +36266,7 @@ "- -32602: If the given parameters are wrong." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-listinvoices(7)", @@ -35951,7 +36277,7 @@ "lightning-listchannelmoves(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -36242,7 +36568,7 @@ "- 904: The *timeout* was reached without an invoice being paid." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-waitinvoice(7)", @@ -36251,7 +36577,7 @@ "lightning-invoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -36355,10 +36681,10 @@ "- 2000: Timed out." ], "author": [ - "ZmnSCPxj [ZmnSCPxj@protonmail.com](mailto:ZmnSCPxj@protonmail.com) is mainly responsible." + "ZmnSCPxj <> is mainly responsible." ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -36614,7 +36940,7 @@ "- 903: If the invoice expires before being paid, or is already expired." ], "author": [ - "Christian Decker [decker.christian@gmail.com](mailto:decker.christian@gmail.com) is mainly responsible." + "Christian Decker <> is mainly responsible." ], "see_also": [ "lightning-waitanyinvoice(7)", @@ -36623,7 +36949,7 @@ "lightning-invoice(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -36901,14 +37227,14 @@ "*failcodename*: The human-readable name corresponding to *failcode*, if known." ], "author": [ - "ZmnSCPxj [ZmnSCPxj@protonmail.com](mailto:ZmnSCPxj@protonmail.com) is mainly responsible." + "ZmnSCPxj <> is mainly responsible." ], "see_also": [ "lightning-sendpay(7)", "lightning-pay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -37025,7 +37351,7 @@ "- 313: The `min-emergency-msat` reserve not be preserved (and we have anchor channels)." ], "author": [ - "Felix [fixone@gmail.com](mailto:fixone@gmail.com) is mainly responsible." + "Felix <> is mainly responsible." ], "see_also": [ "lightning-listfunds(7)", @@ -37035,7 +37361,7 @@ "lightning-feerates(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -37142,13 +37468,6 @@ "A payment may be delayed for up to `maxdelay` blocks by another node; clients should be prepared for this worst case." ], "default": "2016" - }, - "payer_note": { - "type": "string", - "added": "v26.04", - "description": [ - "A message that a payer is willing to send to a payee within an invoice request." - ] } } }, @@ -37204,14 +37523,14 @@ "- 209: Other payment error." ], "author": [ - "Rusty Russell [rusty@rustcorp.com.au](mailto:rusty@rustcorp.com.au) is mainly responsible." + "Rusty Russell <> is mainly responsible." ], "see_also": [ "lightning-pay(7)", - "lightning-decode(7)" + "lightning-decodepay(7)" ], "resources": [ - "Main web site: [https://github.com/ElementsProject/lightning](https://github.com/ElementsProject/lightning)" + "Main web site: " ], "examples": [ { @@ -37235,8 +37554,7 @@ "id": "example:xpay#2", "method": "xpay", "params": { - "invstring": "lni1qqg0qe03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303", - "payer_note": "Coffee payment" + "invstring": "lni1qqg0qe03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303" } }, "response": { diff --git a/contrib/msggen/msggen/utils/utils.py b/contrib/msggen/msggen/utils/utils.py index d2ec1586a9e5..4e3cd48c8549 100644 --- a/contrib/msggen/msggen/utils/utils.py +++ b/contrib/msggen/msggen/utils/utils.py @@ -57,6 +57,7 @@ "TxSend", "ListPeerChannels", "ListClosedChannels", + "DecodePay", "Decode", "DelPay", "DelForward", @@ -150,7 +151,6 @@ "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 920974a4cb9f..b797f20290ea 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/common/gossip_store_wiregen.h +# These duplicate constants in lightning/gossipd/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 2d87655626e3..a92f07f063fe 100644 --- a/contrib/pyln-client/pyln/client/lightning.py +++ b/contrib/pyln-client/pyln/client/lightning.py @@ -584,6 +584,16 @@ 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. @@ -1052,7 +1062,7 @@ def listpeers(self, peerid=None, level=None): } return self.call("listpeers", payload) - def listpeerchannels(self, peer_id=None, short_channel_id=None, channel_id=None): + def listpeerchannels(self, peer_id=None, short_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 @@ -1061,7 +1071,6 @@ def listpeerchannels(self, peer_id=None, short_channel_id=None, channel_id=None) payload = { "id": peer_id, "short_channel_id": short_channel_id, - "channel_id": channel_id, } return self.call("listpeerchannels", payload) @@ -1121,7 +1130,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, fronting_nodes=None): + single_use=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. @@ -1138,7 +1147,6 @@ 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-client/pyln/client/version.py b/contrib/pyln-client/pyln/client/version.py index 6009793947cf..01345c82e77a 100644 --- a/contrib/pyln-client/pyln/client/version.py +++ b/contrib/pyln-client/pyln/client/version.py @@ -75,4 +75,4 @@ def __lt__(self, other: Union[NodeVersion, str]) -> bool: return False -__all__ = ["NodeVersion"] +__all__ = [NodeVersion] diff --git a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py index f336bd3b4076..229e84f3343b 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2.py @@ -25,15 +25,13 @@ 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\"\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\"\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\"\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') +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(\rH1\x88\x01\x01\x12=\n#their_max_htlc_value_in_flight_msat\x18= \x01(\x0b\x32\x0b.cln.AmountH2\x88\x01\x01\x12;\n!our_max_htlc_value_in_flight_msat\x18> \x01(\x0b\x32\x0b.cln.AmountH3\x88\x01\x01\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\"\x88\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\x42\x08\n\x06_label\"&\n\x12\x45nableofferRequest\x12\x10\n\x08offer_id\x18\x01 \x01(\x0c\"\x87\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\x42\x08\n\x06_label\"=\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\"\x84\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\x42\x08\n\x06_label\"\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\"\x97\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\x42\x0e\n\x0c_amount_msatB\t\n\x07_maxfeeB\x0c\n\n_retry_forB\x0f\n\r_partial_msatB\x0b\n\t_maxdelay\"\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') _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 @@ -139,1085 +137,1087 @@ _globals['_CLOSEREQUEST']._serialized_start=8210 _globals['_CLOSEREQUEST']._serialized_end=8541 _globals['_CLOSERESPONSE']._serialized_start=8544 - _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=74682 - _globals['_LISTCONFIGSCONFIGSCONF']._serialized_start=74685 - _globals['_LISTCONFIGSCONFIGSCONF']._serialized_end=74847 - _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_start=74804 - _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_end=74847 - _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_start=74849 - _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_end=74907 - _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_start=74909 - _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_end=74970 - _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_start=74972 - _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_end=75063 - _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_start=75065 - _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_end=75121 - _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_start=75123 - _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_end=75179 - _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_start=75181 - _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_end=75236 - _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_start=75238 - _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_end=75294 - _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_start=75296 - _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_end=75368 - _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_start=75370 - _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_end=75433 - _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_start=75435 - _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_end=75501 - _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_start=75503 - _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_end=75570 - _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_start=75572 - _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_end=75634 - _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_start=75636 - _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_end=75711 - _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_start=75713 - _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_end=75775 - _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_start=75777 - _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_end=75847 - _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_start=75849 - _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_end=75919 - _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_start=75921 - _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_end=75976 - _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_start=75978 - _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_end=76039 - _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_start=76041 - _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_end=76103 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_start=76105 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_end=76174 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_start=76176 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_end=76245 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_start=76247 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_end=76321 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_start=76323 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_end=76390 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_start=76392 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_end=76473 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_start=76475 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_end=76547 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_start=76549 - _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_end=76617 - _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_start=76619 - _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_end=76690 - _globals['_LISTCONFIGSCONFIGSRGB']._serialized_start=76692 - _globals['_LISTCONFIGSCONFIGSRGB']._serialized_end=76750 - _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_start=76752 - _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_end=76812 - _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_start=76814 - _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_end=76876 - _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_start=76878 - _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_end=76949 - _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_start=76951 - _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_end=77021 - _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_start=77023 - _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_end=77095 - _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_start=77097 - _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_end=77167 - _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_start=77169 - _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_end=77233 - _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_start=77235 - _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_end=77299 - _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_start=77301 - _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_end=77366 - _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_start=77368 - _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_end=77430 - _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_start=77432 - _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_end=77493 - _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_start=77495 - _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_end=77563 - _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_start=77565 - _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_end=77638 - _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_start=77640 - _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_end=77724 - _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_start=77726 - _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_end=77810 - _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_start=77812 - _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_end=77904 - _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_start=77906 - _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_end=78009 - _globals['_LISTCONFIGSCONFIGSADDR']._serialized_start=78011 - _globals['_LISTCONFIGSCONFIGSADDR']._serialized_end=78072 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_start=78074 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_end=78143 - _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_start=78145 - _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_end=78210 - _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_start=78212 - _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_end=78268 - _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_start=78270 - _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_end=78336 - _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_start=78338 - _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_end=78398 - _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_start=78400 - _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_end=78459 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_start=78462 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_end=78718 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_start=78637 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_end=78718 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_start=78720 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_end=78801 - _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_start=78803 - _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_end=78864 - _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_start=78866 - _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_end=78932 - _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_start=78934 - _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_end=78997 - _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_start=78999 - _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_end=79063 - _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_start=79065 - _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_end=79129 - _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_start=79131 - _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_end=79200 - _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_start=79202 - _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_end=79270 - _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_start=79272 - _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_end=79338 - _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_start=79340 - _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_end=79442 - _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_start=79444 - _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_end=79517 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_start=79519 - _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_end=79590 - _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_start=79592 - _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_end=79670 - _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_start=79672 - _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_end=79736 - _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_start=79738 - _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_end=79812 - _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_start=79814 - _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_end=79891 - _globals['_STOPREQUEST']._serialized_start=79893 - _globals['_STOPREQUEST']._serialized_end=79906 - _globals['_STOPRESPONSE']._serialized_start=79908 - _globals['_STOPRESPONSE']._serialized_end=80021 - _globals['_STOPRESPONSE_STOPRESULT']._serialized_start=79975 - _globals['_STOPRESPONSE_STOPRESULT']._serialized_end=80010 - _globals['_HELPREQUEST']._serialized_start=80023 - _globals['_HELPREQUEST']._serialized_end=80070 - _globals['_HELPRESPONSE']._serialized_start=80073 - _globals['_HELPRESPONSE']._serialized_end=80222 - _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_start=80178 - _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_end=80206 - _globals['_HELPHELP']._serialized_start=80224 - _globals['_HELPHELP']._serialized_end=80251 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_start=80253 - _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_end=80356 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_start=80358 - _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_end=80385 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_start=80387 - _globals['_PREAPPROVEINVOICEREQUEST']._serialized_end=80429 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_start=80431 - _globals['_PREAPPROVEINVOICERESPONSE']._serialized_end=80458 - _globals['_STATICBACKUPREQUEST']._serialized_start=80460 - _globals['_STATICBACKUPREQUEST']._serialized_end=80481 - _globals['_STATICBACKUPRESPONSE']._serialized_start=80483 - _globals['_STATICBACKUPRESPONSE']._serialized_end=80518 - _globals['_BKPRCHANNELSAPYREQUEST']._serialized_start=80520 - _globals['_BKPRCHANNELSAPYREQUEST']._serialized_end=80620 - _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_start=80622 - _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_end=80702 - _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_start=80705 - _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_end=81594 - _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_start=81597 - _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_end=81807 - _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_start=81810 - _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_end=82022 - _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_start=81936 - _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_end=82022 - _globals['_BKPRINSPECTREQUEST']._serialized_start=82024 - _globals['_BKPRINSPECTREQUEST']._serialized_end=82061 - _globals['_BKPRINSPECTRESPONSE']._serialized_start=82063 - _globals['_BKPRINSPECTRESPONSE']._serialized_end=82118 - _globals['_BKPRINSPECTTXS']._serialized_start=82121 - _globals['_BKPRINSPECTTXS']._serialized_end=82275 - _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_start=82278 - _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_end=82722 - _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_start=82724 - _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_end=82828 - _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_start=82830 - _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_end=82911 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_start=82914 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_end=83587 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_start=83390 - _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_end=83464 - _globals['_BKPRLISTBALANCESREQUEST']._serialized_start=83589 - _globals['_BKPRLISTBALANCESREQUEST']._serialized_end=83614 - _globals['_BKPRLISTBALANCESRESPONSE']._serialized_start=83616 - _globals['_BKPRLISTBALANCESRESPONSE']._serialized_end=83691 - _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_start=83694 - _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_end=84020 - _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_start=84022 - _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_end=84110 - _globals['_BKPRLISTINCOMEREQUEST']._serialized_start=84113 - _globals['_BKPRLISTINCOMEREQUEST']._serialized_end=84264 - _globals['_BKPRLISTINCOMERESPONSE']._serialized_start=84266 - _globals['_BKPRLISTINCOMERESPONSE']._serialized_end=84346 - _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_start=84349 - _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_end=84657 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_start=84659 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_end=84739 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_start=84741 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_end=84842 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_start=84845 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_end=85520 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_start=85346 - _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_end=85413 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_start=85522 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_end=85599 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_start=85601 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_end=85700 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_start=85703 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_end=86374 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_start=86201 - _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_end=86267 - _globals['_BLACKLISTRUNEREQUEST']._serialized_start=86376 - _globals['_BLACKLISTRUNEREQUEST']._serialized_end=86486 - _globals['_BLACKLISTRUNERESPONSE']._serialized_start=86488 - _globals['_BLACKLISTRUNERESPONSE']._serialized_end=86559 - _globals['_BLACKLISTRUNEBLACKLIST']._serialized_start=86561 - _globals['_BLACKLISTRUNEBLACKLIST']._serialized_end=86613 - _globals['_CHECKRUNEREQUEST']._serialized_start=86615 - _globals['_CHECKRUNEREQUEST']._serialized_end=86727 - _globals['_CHECKRUNERESPONSE']._serialized_start=86729 - _globals['_CHECKRUNERESPONSE']._serialized_end=86763 - _globals['_CREATERUNEREQUEST']._serialized_start=86765 - _globals['_CREATERUNEREQUEST']._serialized_end=86834 - _globals['_CREATERUNERESPONSE']._serialized_start=86836 - _globals['_CREATERUNERESPONSE']._serialized_end=86959 - _globals['_SHOWRUNESREQUEST']._serialized_start=86961 - _globals['_SHOWRUNESREQUEST']._serialized_end=87007 - _globals['_SHOWRUNESRESPONSE']._serialized_start=87009 - _globals['_SHOWRUNESRESPONSE']._serialized_end=87064 - _globals['_SHOWRUNESRUNES']._serialized_start=87067 - _globals['_SHOWRUNESRUNES']._serialized_end=87352 - _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_start=87354 - _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_end=87466 - _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_start=87468 - _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_end=87578 - _globals['_ASKRENEUNRESERVEREQUEST']._serialized_start=87580 - _globals['_ASKRENEUNRESERVEREQUEST']._serialized_end=87646 - _globals['_ASKRENEUNRESERVERESPONSE']._serialized_start=87648 - _globals['_ASKRENEUNRESERVERESPONSE']._serialized_end=87674 - _globals['_ASKRENEUNRESERVEPATH']._serialized_start=87677 - _globals['_ASKRENEUNRESERVEPATH']._serialized_end=87823 - _globals['_ASKRENELISTLAYERSREQUEST']._serialized_start=87825 - _globals['_ASKRENELISTLAYERSREQUEST']._serialized_end=87881 - _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_start=87883 - _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_end=87956 - _globals['_ASKRENELISTLAYERSLAYERS']._serialized_start=87959 - _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=88405 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=88408 - _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=88547 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=88550 - _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=88974 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=88977 - _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=89225 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=89228 - _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=89383 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=89386 - _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=89531 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=89533 - _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=89615 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=89617 - _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=89692 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=89695 - _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=90127 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=90130 - _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=90270 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=90273 - _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=90610 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=90613 - _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=90809 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=90812 - _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=90968 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=90971 - _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=91117 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=91119 - _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=91161 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=91163 - _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=91191 - _globals['_ASKRENERESERVEREQUEST']._serialized_start=91193 - _globals['_ASKRENERESERVEREQUEST']._serialized_end=91255 - _globals['_ASKRENERESERVERESPONSE']._serialized_start=91257 - _globals['_ASKRENERESERVERESPONSE']._serialized_end=91281 - _globals['_ASKRENERESERVEPATH']._serialized_start=91284 - _globals['_ASKRENERESERVEPATH']._serialized_end=91428 - _globals['_ASKRENEAGEREQUEST']._serialized_start=91430 - _globals['_ASKRENEAGEREQUEST']._serialized_end=91480 - _globals['_ASKRENEAGERESPONSE']._serialized_start=91482 - _globals['_ASKRENEAGERESPONSE']._serialized_end=91538 - _globals['_GETROUTESREQUEST']._serialized_start=91541 - _globals['_GETROUTESREQUEST']._serialized_end=91792 - _globals['_GETROUTESRESPONSE']._serialized_start=91794 - _globals['_GETROUTESRESPONSE']._serialized_end=91876 - _globals['_GETROUTESROUTES']._serialized_start=91879 - _globals['_GETROUTESROUTES']._serialized_end=92035 - _globals['_GETROUTESROUTESPATH']._serialized_start=92038 - _globals['_GETROUTESROUTESPATH']._serialized_end=92190 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=92192 - _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=92248 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=92250 - _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=92278 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=92281 - _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=92614 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=92483 - _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=92562 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=92616 - _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=92705 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=92708 - _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=92919 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=92922 - _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=93065 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=93067 - _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=93097 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=93100 - _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=93529 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=93531 - _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=93561 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=93564 - _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=93728 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=93730 - _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=93805 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=93808 - _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=93973 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=93976 - _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=94140 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=94142 - _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=94220 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=94223 - _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=94375 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=94377 - _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=94409 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=94411 - _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=94508 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=94511 - _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=94656 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=94659 - _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=94990 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=94992 - _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=95111 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=95113 - _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=95175 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=95177 - _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=95205 - _globals['_XPAYREQUEST']._serialized_start=95208 - _globals['_XPAYREQUEST']._serialized_end=95527 - _globals['_XPAYRESPONSE']._serialized_start=95530 - _globals['_XPAYRESPONSE']._serialized_end=95691 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=95693 - _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=95754 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=95756 - _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=95852 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=95855 - _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=96060 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=95994 - _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=96030 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=96062 - _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=96145 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=96148 - _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=96701 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=96509 - _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=96659 - _globals['_LISTCHAINMOVESREQUEST']._serialized_start=96704 - _globals['_LISTCHAINMOVESREQUEST']._serialized_end=96901 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=96837 - _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=96871 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=96903 - _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=96978 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=96981 - _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=97833 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=97468 - _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=97745 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=97836 - _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=98069 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=97995 - _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=98032 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=98071 - _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=98158 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=98161 - _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=98403 - _globals['_DELNETWORKEVENTREQUEST']._serialized_start=98405 - _globals['_DELNETWORKEVENTREQUEST']._serialized_end=98452 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=98454 - _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=98479 - _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_start=98482 - _globals['_CLNRESTREGISTERPATHREQUEST']._serialized_end=98728 - _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_start=98730 - _globals['_CLNRESTREGISTERPATHRESPONSE']._serialized_end=98759 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_start=98762 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS']._serialized_end=98980 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_start=98913 - _globals['_CLNRESTREGISTERPATHRUNERESTRICTIONS_PARAMSENTRY']._serialized_end=98958 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=98982 - _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=99007 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=99009 - _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=99063 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=99065 - _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=99097 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=99099 - _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=99150 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=99152 - _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=99180 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=99182 - _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=99301 - _globals['_STREAMCONNECTREQUEST']._serialized_start=99303 - _globals['_STREAMCONNECTREQUEST']._serialized_end=99325 - _globals['_PEERCONNECTNOTIFICATION']._serialized_start=99328 - _globals['_PEERCONNECTNOTIFICATION']._serialized_end=99518 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=99479 - _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=99518 - _globals['_PEERCONNECTADDRESS']._serialized_start=99521 - _globals['_PEERCONNECTADDRESS']._serialized_end=99803 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=99672 - _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=99771 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=99805 - _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=99829 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=99831 - _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=99888 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=99890 - _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=99924 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=99927 - _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=100376 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=100230 - _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=100329 - _globals['_NODE']._serialized_start=100379 - _globals['_NODE']._serialized_end=111261 + _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=42890 + _globals['_ENABLEOFFERREQUEST']._serialized_start=42892 + _globals['_ENABLEOFFERREQUEST']._serialized_end=42930 + _globals['_ENABLEOFFERRESPONSE']._serialized_start=42933 + _globals['_ENABLEOFFERRESPONSE']._serialized_end=43068 + _globals['_DISCONNECTREQUEST']._serialized_start=43070 + _globals['_DISCONNECTREQUEST']._serialized_end=43131 + _globals['_DISCONNECTRESPONSE']._serialized_start=43133 + _globals['_DISCONNECTRESPONSE']._serialized_end=43153 + _globals['_FEERATESREQUEST']._serialized_start=43155 + _globals['_FEERATESREQUEST']._serialized_end=43262 + _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_start=43225 + _globals['_FEERATESREQUEST_FEERATESSTYLE']._serialized_end=43262 + _globals['_FEERATESRESPONSE']._serialized_start=43265 + _globals['_FEERATESRESPONSE']._serialized_end=43547 + _globals['_FEERATESPERKB']._serialized_start=43550 + _globals['_FEERATESPERKB']._serialized_end=44017 + _globals['_FEERATESPERKBESTIMATES']._serialized_start=44019 + _globals['_FEERATESPERKBESTIMATES']._serialized_end=44106 + _globals['_FEERATESPERKW']._serialized_start=44109 + _globals['_FEERATESPERKW']._serialized_end=44576 + _globals['_FEERATESPERKWESTIMATES']._serialized_start=44578 + _globals['_FEERATESPERKWESTIMATES']._serialized_end=44665 + _globals['_FEERATESONCHAINFEEESTIMATES']._serialized_start=44668 + _globals['_FEERATESONCHAINFEEESTIMATES']._serialized_end=44949 + _globals['_FETCHBIP353REQUEST']._serialized_start=44951 + _globals['_FETCHBIP353REQUEST']._serialized_end=44988 + _globals['_FETCHBIP353RESPONSE']._serialized_start=44990 + _globals['_FETCHBIP353RESPONSE']._serialized_end=45078 + _globals['_FETCHBIP353INSTRUCTIONS']._serialized_start=45081 + _globals['_FETCHBIP353INSTRUCTIONS']._serialized_end=45328 + _globals['_FETCHINVOICEREQUEST']._serialized_start=45331 + _globals['_FETCHINVOICEREQUEST']._serialized_end=45772 + _globals['_FETCHINVOICERESPONSE']._serialized_start=45775 + _globals['_FETCHINVOICERESPONSE']._serialized_end=45928 + _globals['_FETCHINVOICECHANGES']._serialized_start=45931 + _globals['_FETCHINVOICECHANGES']._serialized_end=46189 + _globals['_FETCHINVOICENEXTPERIOD']._serialized_start=46191 + _globals['_FETCHINVOICENEXTPERIOD']._serialized_end=46316 + _globals['_CANCELRECURRINGINVOICEREQUEST']._serialized_start=46319 + _globals['_CANCELRECURRINGINVOICEREQUEST']._serialized_end=46543 + _globals['_CANCELRECURRINGINVOICERESPONSE']._serialized_start=46545 + _globals['_CANCELRECURRINGINVOICERESPONSE']._serialized_end=46593 + _globals['_FUNDCHANNELCANCELREQUEST']._serialized_start=46595 + _globals['_FUNDCHANNELCANCELREQUEST']._serialized_end=46633 + _globals['_FUNDCHANNELCANCELRESPONSE']._serialized_start=46635 + _globals['_FUNDCHANNELCANCELRESPONSE']._serialized_end=46681 + _globals['_FUNDCHANNELCOMPLETEREQUEST']._serialized_start=46683 + _globals['_FUNDCHANNELCOMPLETEREQUEST']._serialized_end=46773 + _globals['_FUNDCHANNELCOMPLETERESPONSE']._serialized_start=46775 + _globals['_FUNDCHANNELCOMPLETERESPONSE']._serialized_end=46853 + _globals['_FUNDCHANNELREQUEST']._serialized_start=46856 + _globals['_FUNDCHANNELREQUEST']._serialized_end=47363 + _globals['_FUNDCHANNELRESPONSE']._serialized_start=47366 + _globals['_FUNDCHANNELRESPONSE']._serialized_end=47594 + _globals['_FUNDCHANNELCHANNELTYPE']._serialized_start=47596 + _globals['_FUNDCHANNELCHANNELTYPE']._serialized_end=47671 + _globals['_FUNDCHANNELSTARTREQUEST']._serialized_start=47674 + _globals['_FUNDCHANNELSTARTREQUEST']._serialized_end=48016 + _globals['_FUNDCHANNELSTARTRESPONSE']._serialized_start=48019 + _globals['_FUNDCHANNELSTARTRESPONSE']._serialized_end=48265 + _globals['_FUNDCHANNELSTARTCHANNELTYPE']._serialized_start=48267 + _globals['_FUNDCHANNELSTARTCHANNELTYPE']._serialized_end=48347 + _globals['_GETLOGREQUEST']._serialized_start=48350 + _globals['_GETLOGREQUEST']._serialized_end=48507 + _globals['_GETLOGREQUEST_GETLOGLEVEL']._serialized_start=48419 + _globals['_GETLOGREQUEST_GETLOGLEVEL']._serialized_end=48497 + _globals['_GETLOGRESPONSE']._serialized_start=48509 + _globals['_GETLOGRESPONSE']._serialized_end=48613 + _globals['_GETLOGLOG']._serialized_start=48616 + _globals['_GETLOGLOG']._serialized_end=48976 + _globals['_GETLOGLOG_GETLOGLOGTYPE']._serialized_start=48803 + _globals['_GETLOGLOG_GETLOGLOGTYPE']._serialized_end=48911 + _globals['_FUNDERUPDATEREQUEST']._serialized_start=48979 + _globals['_FUNDERUPDATEREQUEST']._serialized_end=50092 + _globals['_FUNDERUPDATEREQUEST_FUNDERUPDATEPOLICY']._serialized_start=49673 + _globals['_FUNDERUPDATEREQUEST_FUNDERUPDATEPOLICY']._serialized_end=49730 + _globals['_FUNDERUPDATERESPONSE']._serialized_start=50095 + _globals['_FUNDERUPDATERESPONSE']._serialized_end=50958 + _globals['_FUNDERUPDATERESPONSE_FUNDERUPDATEPOLICY']._serialized_start=49673 + _globals['_FUNDERUPDATERESPONSE_FUNDERUPDATEPOLICY']._serialized_end=49730 + _globals['_GETROUTEREQUEST']._serialized_start=50961 + _globals['_GETROUTEREQUEST']._serialized_end=51197 + _globals['_GETROUTERESPONSE']._serialized_start=51199 + _globals['_GETROUTERESPONSE']._serialized_end=51252 + _globals['_GETROUTEROUTE']._serialized_start=51255 + _globals['_GETROUTEROUTE']._serialized_end=51452 + _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_start=51423 + _globals['_GETROUTEROUTE_GETROUTEROUTESTYLE']._serialized_end=51452 + _globals['_LISTADDRESSESREQUEST']._serialized_start=51454 + _globals['_LISTADDRESSESREQUEST']._serialized_end=51570 + _globals['_LISTADDRESSESRESPONSE']._serialized_start=51572 + _globals['_LISTADDRESSESRESPONSE']._serialized_end=51643 + _globals['_LISTADDRESSESADDRESSES']._serialized_start=51645 + _globals['_LISTADDRESSESADDRESSES']._serialized_end=51745 + _globals['_LISTFORWARDSREQUEST']._serialized_start=51748 + _globals['_LISTFORWARDSREQUEST']._serialized_end=52187 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_start=51992 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSSTATUS']._serialized_end=52068 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSINDEX']._serialized_start=52070 + _globals['_LISTFORWARDSREQUEST_LISTFORWARDSINDEX']._serialized_end=52115 + _globals['_LISTFORWARDSRESPONSE']._serialized_start=52189 + _globals['_LISTFORWARDSRESPONSE']._serialized_end=52256 + _globals['_LISTFORWARDSFORWARDS']._serialized_start=52259 + _globals['_LISTFORWARDSFORWARDS']._serialized_end=53079 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_start=52780 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTATUS']._serialized_end=52864 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_start=52866 + _globals['_LISTFORWARDSFORWARDS_LISTFORWARDSFORWARDSSTYLE']._serialized_end=52914 + _globals['_LISTOFFERSREQUEST']._serialized_start=53081 + _globals['_LISTOFFERSREQUEST']._serialized_end=53178 + _globals['_LISTOFFERSRESPONSE']._serialized_start=53180 + _globals['_LISTOFFERSRESPONSE']._serialized_end=53239 + _globals['_LISTOFFERSOFFERS']._serialized_start=53242 + _globals['_LISTOFFERSOFFERS']._serialized_end=53374 + _globals['_LISTPAYSREQUEST']._serialized_start=53377 + _globals['_LISTPAYSREQUEST']._serialized_end=53765 + _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_start=53598 + _globals['_LISTPAYSREQUEST_LISTPAYSSTATUS']._serialized_end=53653 + _globals['_LISTPAYSREQUEST_LISTPAYSINDEX']._serialized_start=53655 + _globals['_LISTPAYSREQUEST_LISTPAYSINDEX']._serialized_end=53696 + _globals['_LISTPAYSRESPONSE']._serialized_start=53767 + _globals['_LISTPAYSRESPONSE']._serialized_end=53818 + _globals['_LISTPAYSPAYS']._serialized_start=53821 + _globals['_LISTPAYSPAYS']._serialized_end=54552 + _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_start=54291 + _globals['_LISTPAYSPAYS_LISTPAYSPAYSSTATUS']._serialized_end=54350 + _globals['_LISTHTLCSREQUEST']._serialized_start=54555 + _globals['_LISTHTLCSREQUEST']._serialized_end=54769 + _globals['_LISTHTLCSREQUEST_LISTHTLCSINDEX']._serialized_start=54690 + _globals['_LISTHTLCSREQUEST_LISTHTLCSINDEX']._serialized_end=54732 + _globals['_LISTHTLCSRESPONSE']._serialized_start=54771 + _globals['_LISTHTLCSRESPONSE']._serialized_end=54826 + _globals['_LISTHTLCSHTLCS']._serialized_start=54829 + _globals['_LISTHTLCSHTLCS']._serialized_end=55186 + _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_start=55108 + _globals['_LISTHTLCSHTLCS_LISTHTLCSHTLCSDIRECTION']._serialized_end=55150 + _globals['_MULTIFUNDCHANNELREQUEST']._serialized_start=55189 + _globals['_MULTIFUNDCHANNELREQUEST']._serialized_end=55495 + _globals['_MULTIFUNDCHANNELRESPONSE']._serialized_start=55498 + _globals['_MULTIFUNDCHANNELRESPONSE']._serialized_end=55649 + _globals['_MULTIFUNDCHANNELDESTINATIONS']._serialized_start=55652 + _globals['_MULTIFUNDCHANNELDESTINATIONS']._serialized_end=56035 + _globals['_MULTIFUNDCHANNELCHANNELIDS']._serialized_start=56038 + _globals['_MULTIFUNDCHANNELCHANNELIDS']._serialized_end=56238 + _globals['_MULTIFUNDCHANNELCHANNELIDSCHANNELTYPE']._serialized_start=56240 + _globals['_MULTIFUNDCHANNELCHANNELIDSCHANNELTYPE']._serialized_end=56330 + _globals['_MULTIFUNDCHANNELFAILED']._serialized_start=56333 + _globals['_MULTIFUNDCHANNELFAILED']._serialized_end=56608 + _globals['_MULTIFUNDCHANNELFAILED_MULTIFUNDCHANNELFAILEDMETHOD']._serialized_start=56494 + _globals['_MULTIFUNDCHANNELFAILED_MULTIFUNDCHANNELFAILEDMETHOD']._serialized_end=56608 + _globals['_MULTIFUNDCHANNELFAILEDERROR']._serialized_start=56610 + _globals['_MULTIFUNDCHANNELFAILEDERROR']._serialized_end=56670 + _globals['_MULTIWITHDRAWREQUEST']._serialized_start=56673 + _globals['_MULTIWITHDRAWREQUEST']._serialized_end=56841 + _globals['_MULTIWITHDRAWRESPONSE']._serialized_start=56843 + _globals['_MULTIWITHDRAWRESPONSE']._serialized_end=56892 + _globals['_OFFERREQUEST']._serialized_start=56895 + _globals['_OFFERREQUEST']._serialized_end=57481 + _globals['_OFFERRESPONSE']._serialized_start=57484 + _globals['_OFFERRESPONSE']._serialized_end=57630 + _globals['_OPENCHANNELABORTREQUEST']._serialized_start=57632 + _globals['_OPENCHANNELABORTREQUEST']._serialized_end=57677 + _globals['_OPENCHANNELABORTRESPONSE']._serialized_start=57679 + _globals['_OPENCHANNELABORTRESPONSE']._serialized_end=57767 + _globals['_OPENCHANNELBUMPREQUEST']._serialized_start=57770 + _globals['_OPENCHANNELBUMPREQUEST']._serialized_end=57928 + _globals['_OPENCHANNELBUMPRESPONSE']._serialized_start=57931 + _globals['_OPENCHANNELBUMPRESPONSE']._serialized_end=58190 + _globals['_OPENCHANNELBUMPCHANNELTYPE']._serialized_start=58192 + _globals['_OPENCHANNELBUMPCHANNELTYPE']._serialized_end=58271 + _globals['_OPENCHANNELINITREQUEST']._serialized_start=58274 + _globals['_OPENCHANNELINITREQUEST']._serialized_end=58689 + _globals['_OPENCHANNELINITRESPONSE']._serialized_start=58692 + _globals['_OPENCHANNELINITRESPONSE']._serialized_end=58951 + _globals['_OPENCHANNELINITCHANNELTYPE']._serialized_start=58953 + _globals['_OPENCHANNELINITCHANNELTYPE']._serialized_end=59032 + _globals['_OPENCHANNELSIGNEDREQUEST']._serialized_start=59034 + _globals['_OPENCHANNELSIGNEDREQUEST']._serialized_end=59101 + _globals['_OPENCHANNELSIGNEDRESPONSE']._serialized_start=59103 + _globals['_OPENCHANNELSIGNEDRESPONSE']._serialized_end=59176 + _globals['_OPENCHANNELUPDATEREQUEST']._serialized_start=59178 + _globals['_OPENCHANNELUPDATEREQUEST']._serialized_end=59238 + _globals['_OPENCHANNELUPDATERESPONSE']._serialized_start=59241 + _globals['_OPENCHANNELUPDATERESPONSE']._serialized_end=59540 + _globals['_OPENCHANNELUPDATECHANNELTYPE']._serialized_start=59542 + _globals['_OPENCHANNELUPDATECHANNELTYPE']._serialized_end=59623 + _globals['_PINGREQUEST']._serialized_start=59625 + _globals['_PINGREQUEST']._serialized_end=59714 + _globals['_PINGRESPONSE']._serialized_start=59716 + _globals['_PINGRESPONSE']._serialized_end=59746 + _globals['_PLUGINREQUEST']._serialized_start=59749 + _globals['_PLUGINREQUEST']._serialized_end=59894 + _globals['_PLUGINRESPONSE']._serialized_start=59896 + _globals['_PLUGINRESPONSE']._serialized_end=60021 + _globals['_PLUGINPLUGINS']._serialized_start=60023 + _globals['_PLUGINPLUGINS']._serialized_end=60085 + _globals['_RENEPAYSTATUSREQUEST']._serialized_start=60087 + _globals['_RENEPAYSTATUSREQUEST']._serialized_end=60147 + _globals['_RENEPAYSTATUSRESPONSE']._serialized_start=60149 + _globals['_RENEPAYSTATUSRESPONSE']._serialized_end=60220 + _globals['_RENEPAYSTATUSPAYSTATUS']._serialized_start=60223 + _globals['_RENEPAYSTATUSPAYSTATUS']._serialized_end=60705 + _globals['_RENEPAYSTATUSPAYSTATUS_RENEPAYSTATUSPAYSTATUSSTATUS']._serialized_start=60568 + _globals['_RENEPAYSTATUSPAYSTATUS_RENEPAYSTATUSPAYSTATUSSTATUS']._serialized_end=60637 + _globals['_RENEPAYREQUEST']._serialized_start=60708 + _globals['_RENEPAYREQUEST']._serialized_end=61054 + _globals['_RENEPAYRESPONSE']._serialized_start=61057 + _globals['_RENEPAYRESPONSE']._serialized_end=61478 + _globals['_RENEPAYRESPONSE_RENEPAYSTATUS']._serialized_start=61374 + _globals['_RENEPAYRESPONSE_RENEPAYSTATUS']._serialized_end=61428 + _globals['_RESERVEINPUTSREQUEST']._serialized_start=61480 + _globals['_RESERVEINPUTSREQUEST']._serialized_end=61588 + _globals['_RESERVEINPUTSRESPONSE']._serialized_start=61590 + _globals['_RESERVEINPUTSRESPONSE']._serialized_end=61667 + _globals['_RESERVEINPUTSRESERVATIONS']._serialized_start=61669 + _globals['_RESERVEINPUTSRESERVATIONS']._serialized_end=61791 + _globals['_SENDCUSTOMMSGREQUEST']._serialized_start=61793 + _globals['_SENDCUSTOMMSGREQUEST']._serialized_end=61845 + _globals['_SENDCUSTOMMSGRESPONSE']._serialized_start=61847 + _globals['_SENDCUSTOMMSGRESPONSE']._serialized_end=61886 + _globals['_SENDINVOICEREQUEST']._serialized_start=61889 + _globals['_SENDINVOICEREQUEST']._serialized_end=62065 + _globals['_SENDINVOICERESPONSE']._serialized_start=62068 + _globals['_SENDINVOICERESPONSE']._serialized_end=62659 + _globals['_SENDINVOICERESPONSE_SENDINVOICESTATUS']._serialized_start=62470 + _globals['_SENDINVOICERESPONSE_SENDINVOICESTATUS']._serialized_end=62524 + _globals['_SETCHANNELREQUEST']._serialized_start=62662 + _globals['_SETCHANNELREQUEST']._serialized_end=62960 + _globals['_SETCHANNELRESPONSE']._serialized_start=62962 + _globals['_SETCHANNELRESPONSE']._serialized_end=63025 + _globals['_SETCHANNELCHANNELS']._serialized_start=63028 + _globals['_SETCHANNELCHANNELS']._serialized_end=63486 + _globals['_SETCONFIGREQUEST']._serialized_start=63488 + _globals['_SETCONFIGREQUEST']._serialized_end=63586 + _globals['_SETCONFIGRESPONSE']._serialized_start=63588 + _globals['_SETCONFIGRESPONSE']._serialized_end=63645 + _globals['_SETCONFIGCONFIG']._serialized_start=63648 + _globals['_SETCONFIGCONFIG']._serialized_end=63941 + _globals['_SETPSBTVERSIONREQUEST']._serialized_start=63943 + _globals['_SETPSBTVERSIONREQUEST']._serialized_end=63997 + _globals['_SETPSBTVERSIONRESPONSE']._serialized_start=63999 + _globals['_SETPSBTVERSIONRESPONSE']._serialized_end=64037 + _globals['_SIGNINVOICEREQUEST']._serialized_start=64039 + _globals['_SIGNINVOICEREQUEST']._serialized_end=64078 + _globals['_SIGNINVOICERESPONSE']._serialized_start=64080 + _globals['_SIGNINVOICERESPONSE']._serialized_end=64117 + _globals['_SIGNMESSAGEREQUEST']._serialized_start=64119 + _globals['_SIGNMESSAGEREQUEST']._serialized_end=64156 + _globals['_SIGNMESSAGERESPONSE']._serialized_start=64158 + _globals['_SIGNMESSAGERESPONSE']._serialized_end=64228 + _globals['_SPLICEINITREQUEST']._serialized_start=64231 + _globals['_SPLICEINITREQUEST']._serialized_end=64431 + _globals['_SPLICEINITRESPONSE']._serialized_start=64433 + _globals['_SPLICEINITRESPONSE']._serialized_end=64467 + _globals['_SPLICESIGNEDREQUEST']._serialized_start=64469 + _globals['_SPLICESIGNEDREQUEST']._serialized_end=64564 + _globals['_SPLICESIGNEDRESPONSE']._serialized_start=64566 + _globals['_SPLICESIGNEDRESPONSE']._serialized_end=64660 + _globals['_SPLICEUPDATEREQUEST']._serialized_start=64662 + _globals['_SPLICEUPDATEREQUEST']._serialized_end=64717 + _globals['_SPLICEUPDATERESPONSE']._serialized_start=64719 + _globals['_SPLICEUPDATERESPONSE']._serialized_end=64840 + _globals['_DEVSPLICEREQUEST']._serialized_start=64843 + _globals['_DEVSPLICEREQUEST']._serialized_end=65041 + _globals['_DEVSPLICERESPONSE']._serialized_start=65044 + _globals['_DEVSPLICERESPONSE']._serialized_end=65172 + _globals['_UNRESERVEINPUTSREQUEST']._serialized_start=65174 + _globals['_UNRESERVEINPUTSREQUEST']._serialized_end=65246 + _globals['_UNRESERVEINPUTSRESPONSE']._serialized_start=65248 + _globals['_UNRESERVEINPUTSRESPONSE']._serialized_end=65329 + _globals['_UNRESERVEINPUTSRESERVATIONS']._serialized_start=65332 + _globals['_UNRESERVEINPUTSRESERVATIONS']._serialized_end=65483 + _globals['_UPGRADEWALLETREQUEST']._serialized_start=65485 + _globals['_UPGRADEWALLETREQUEST']._serialized_end=65595 + _globals['_UPGRADEWALLETRESPONSE']._serialized_start=65598 + _globals['_UPGRADEWALLETRESPONSE']._serialized_end=65747 + _globals['_WAITBLOCKHEIGHTREQUEST']._serialized_start=65749 + _globals['_WAITBLOCKHEIGHTREQUEST']._serialized_end=65828 + _globals['_WAITBLOCKHEIGHTRESPONSE']._serialized_start=65830 + _globals['_WAITBLOCKHEIGHTRESPONSE']._serialized_end=65876 + _globals['_WAITREQUEST']._serialized_start=65879 + _globals['_WAITREQUEST']._serialized_end=66192 + _globals['_WAITREQUEST_WAITSUBSYSTEM']._serialized_start=66015 + _globals['_WAITREQUEST_WAITSUBSYSTEM']._serialized_end=66136 + _globals['_WAITREQUEST_WAITINDEXNAME']._serialized_start=66138 + _globals['_WAITREQUEST_WAITINDEXNAME']._serialized_end=66192 + _globals['_WAITRESPONSE']._serialized_start=66195 + _globals['_WAITRESPONSE']._serialized_end=66947 + _globals['_WAITRESPONSE_WAITSUBSYSTEM']._serialized_start=66015 + _globals['_WAITRESPONSE_WAITSUBSYSTEM']._serialized_end=66136 + _globals['_WAITFORWARDS']._serialized_start=66950 + _globals['_WAITFORWARDS']._serialized_end=67281 + _globals['_WAITFORWARDS_WAITFORWARDSSTATUS']._serialized_start=67136 + _globals['_WAITFORWARDS_WAITFORWARDSSTATUS']._serialized_end=67212 + _globals['_WAITINVOICES']._serialized_start=67284 + _globals['_WAITINVOICES']._serialized_end=67561 + _globals['_WAITINVOICES_WAITINVOICESSTATUS']._serialized_start=67447 + _globals['_WAITINVOICES_WAITINVOICESSTATUS']._serialized_end=67502 + _globals['_WAITSENDPAYS']._serialized_start=67564 + _globals['_WAITSENDPAYS']._serialized_end=67819 + _globals['_WAITSENDPAYS_WAITSENDPAYSSTATUS']._serialized_start=67709 + _globals['_WAITSENDPAYS_WAITSENDPAYSSTATUS']._serialized_end=67768 + _globals['_WAITHTLCS']._serialized_start=67822 + _globals['_WAITHTLCS']._serialized_end=68218 + _globals['_WAITHTLCS_WAITHTLCSDIRECTION']._serialized_start=68075 + _globals['_WAITHTLCS_WAITHTLCSDIRECTION']._serialized_end=68112 + _globals['_WAITCHAINMOVES']._serialized_start=68220 + _globals['_WAITCHAINMOVES']._serialized_end=68320 + _globals['_WAITCHANNELMOVES']._serialized_start=68322 + _globals['_WAITCHANNELMOVES']._serialized_end=68424 + _globals['_WAITNETWORKEVENTS']._serialized_start=68427 + _globals['_WAITNETWORKEVENTS']._serialized_end=68692 + _globals['_WAITNETWORKEVENTS_WAITNETWORKEVENTSTYPE']._serialized_start=68568 + _globals['_WAITNETWORKEVENTS_WAITNETWORKEVENTSTYPE']._serialized_end=68648 + _globals['_WAITDETAILS']._serialized_start=68695 + _globals['_WAITDETAILS']._serialized_end=69331 + _globals['_WAITDETAILS_WAITDETAILSSTATUS']._serialized_start=69037 + _globals['_WAITDETAILS_WAITDETAILSSTATUS']._serialized_end=69174 + _globals['_LISTCONFIGSREQUEST']._serialized_start=69333 + _globals['_LISTCONFIGSREQUEST']._serialized_end=69385 + _globals['_LISTCONFIGSRESPONSE']._serialized_start=69387 + _globals['_LISTCONFIGSRESPONSE']._serialized_end=69467 + _globals['_LISTCONFIGSCONFIGS']._serialized_start=69470 + _globals['_LISTCONFIGSCONFIGS']._serialized_end=75463 + _globals['_LISTCONFIGSCONFIGSCONF']._serialized_start=75466 + _globals['_LISTCONFIGSCONFIGSCONF']._serialized_end=75628 + _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_start=75585 + _globals['_LISTCONFIGSCONFIGSCONF_LISTCONFIGSCONFIGSCONFSOURCE']._serialized_end=75628 + _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_start=75630 + _globals['_LISTCONFIGSCONFIGSDEVELOPER']._serialized_end=75688 + _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_start=75690 + _globals['_LISTCONFIGSCONFIGSCLEARPLUGINS']._serialized_end=75751 + _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_start=75753 + _globals['_LISTCONFIGSCONFIGSDISABLEMPP']._serialized_end=75844 + _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_start=75846 + _globals['_LISTCONFIGSCONFIGSMAINNET']._serialized_end=75902 + _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_start=75904 + _globals['_LISTCONFIGSCONFIGSREGTEST']._serialized_end=75960 + _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_start=75962 + _globals['_LISTCONFIGSCONFIGSSIGNET']._serialized_end=76017 + _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_start=76019 + _globals['_LISTCONFIGSCONFIGSTESTNET']._serialized_end=76075 + _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_start=76077 + _globals['_LISTCONFIGSCONFIGSIMPORTANTPLUGIN']._serialized_end=76149 + _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_start=76151 + _globals['_LISTCONFIGSCONFIGSPLUGIN']._serialized_end=76214 + _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_start=76216 + _globals['_LISTCONFIGSCONFIGSPLUGINDIR']._serialized_end=76282 + _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_start=76284 + _globals['_LISTCONFIGSCONFIGSLIGHTNINGDIR']._serialized_end=76351 + _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_start=76353 + _globals['_LISTCONFIGSCONFIGSNETWORK']._serialized_end=76415 + _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_start=76417 + _globals['_LISTCONFIGSCONFIGSALLOWDEPRECATEDAPIS']._serialized_end=76492 + _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_start=76494 + _globals['_LISTCONFIGSCONFIGSRPCFILE']._serialized_end=76556 + _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_start=76558 + _globals['_LISTCONFIGSCONFIGSDISABLEPLUGIN']._serialized_end=76628 + _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_start=76630 + _globals['_LISTCONFIGSCONFIGSALWAYSUSEPROXY']._serialized_end=76700 + _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_start=76702 + _globals['_LISTCONFIGSCONFIGSDAEMON']._serialized_end=76757 + _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_start=76759 + _globals['_LISTCONFIGSCONFIGSWALLET']._serialized_end=76820 + _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_start=76822 + _globals['_LISTCONFIGSCONFIGSLARGECHANNELS']._serialized_end=76884 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_start=76886 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALDUALFUND']._serialized_end=76955 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_start=76957 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSPLICING']._serialized_end=77026 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_start=77028 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALONIONMESSAGES']._serialized_end=77102 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_start=77104 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALOFFERS']._serialized_end=77171 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_start=77173 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALSHUTDOWNWRONGFUNDING']._serialized_end=77254 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_start=77256 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALPEERSTORAGE']._serialized_end=77328 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_start=77330 + _globals['_LISTCONFIGSCONFIGSEXPERIMENTALANCHORS']._serialized_end=77398 + _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_start=77400 + _globals['_LISTCONFIGSCONFIGSDATABASEUPGRADE']._serialized_end=77471 + _globals['_LISTCONFIGSCONFIGSRGB']._serialized_start=77473 + _globals['_LISTCONFIGSCONFIGSRGB']._serialized_end=77531 + _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_start=77533 + _globals['_LISTCONFIGSCONFIGSALIAS']._serialized_end=77593 + _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_start=77595 + _globals['_LISTCONFIGSCONFIGSPIDFILE']._serialized_end=77657 + _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_start=77659 + _globals['_LISTCONFIGSCONFIGSIGNOREFEELIMITS']._serialized_end=77730 + _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_start=77732 + _globals['_LISTCONFIGSCONFIGSWATCHTIMEBLOCKS']._serialized_end=77802 + _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_start=77804 + _globals['_LISTCONFIGSCONFIGSMAXLOCKTIMEBLOCKS']._serialized_end=77876 + _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_start=77878 + _globals['_LISTCONFIGSCONFIGSFUNDINGCONFIRMS']._serialized_end=77948 + _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_start=77950 + _globals['_LISTCONFIGSCONFIGSCLTVDELTA']._serialized_end=78014 + _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_start=78016 + _globals['_LISTCONFIGSCONFIGSCLTVFINAL']._serialized_end=78080 + _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_start=78082 + _globals['_LISTCONFIGSCONFIGSCOMMITTIME']._serialized_end=78147 + _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_start=78149 + _globals['_LISTCONFIGSCONFIGSFEEBASE']._serialized_end=78211 + _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_start=78213 + _globals['_LISTCONFIGSCONFIGSRESCAN']._serialized_end=78274 + _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_start=78276 + _globals['_LISTCONFIGSCONFIGSFEEPERSATOSHI']._serialized_end=78344 + _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_start=78346 + _globals['_LISTCONFIGSCONFIGSMAXCONCURRENTHTLCS']._serialized_end=78419 + _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_start=78421 + _globals['_LISTCONFIGSCONFIGSHTLCMINIMUMMSAT']._serialized_end=78505 + _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_start=78507 + _globals['_LISTCONFIGSCONFIGSHTLCMAXIMUMMSAT']._serialized_end=78591 + _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_start=78593 + _globals['_LISTCONFIGSCONFIGSMAXDUSTHTLCEXPOSUREMSAT']._serialized_end=78685 + _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_start=78687 + _globals['_LISTCONFIGSCONFIGSMINCAPACITYSAT']._serialized_end=78790 + _globals['_LISTCONFIGSCONFIGSADDR']._serialized_start=78792 + _globals['_LISTCONFIGSCONFIGSADDR']._serialized_end=78853 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_start=78855 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDR']._serialized_end=78924 + _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_start=78926 + _globals['_LISTCONFIGSCONFIGSBINDADDR']._serialized_end=78991 + _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_start=78993 + _globals['_LISTCONFIGSCONFIGSOFFLINE']._serialized_end=79049 + _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_start=79051 + _globals['_LISTCONFIGSCONFIGSAUTOLISTEN']._serialized_end=79117 + _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_start=79119 + _globals['_LISTCONFIGSCONFIGSPROXY']._serialized_end=79179 + _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_start=79181 + _globals['_LISTCONFIGSCONFIGSDISABLEDNS']._serialized_end=79240 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_start=79243 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED']._serialized_end=79499 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_start=79418 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVERED_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDVALUESTR']._serialized_end=79499 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_start=79501 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDISCOVEREDPORT']._serialized_end=79582 + _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_start=79584 + _globals['_LISTCONFIGSCONFIGSENCRYPTEDHSM']._serialized_end=79645 + _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_start=79647 + _globals['_LISTCONFIGSCONFIGSRPCFILEMODE']._serialized_end=79713 + _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_start=79715 + _globals['_LISTCONFIGSCONFIGSLOGLEVEL']._serialized_end=79778 + _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_start=79780 + _globals['_LISTCONFIGSCONFIGSLOGPREFIX']._serialized_end=79844 + _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_start=79846 + _globals['_LISTCONFIGSCONFIGSLOGFILE']._serialized_end=79910 + _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_start=79912 + _globals['_LISTCONFIGSCONFIGSLOGTIMESTAMPS']._serialized_end=79981 + _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_start=79983 + _globals['_LISTCONFIGSCONFIGSFORCEFEERATES']._serialized_end=80051 + _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_start=80053 + _globals['_LISTCONFIGSCONFIGSSUBDAEMON']._serialized_end=80119 + _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_start=80121 + _globals['_LISTCONFIGSCONFIGSFETCHINVOICENOCONNECT']._serialized_end=80223 + _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_start=80225 + _globals['_LISTCONFIGSCONFIGSTORSERVICEPASSWORD']._serialized_end=80298 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_start=80300 + _globals['_LISTCONFIGSCONFIGSANNOUNCEADDRDNS']._serialized_end=80371 + _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_start=80373 + _globals['_LISTCONFIGSCONFIGSREQUIRECONFIRMEDINPUTS']._serialized_end=80451 + _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_start=80453 + _globals['_LISTCONFIGSCONFIGSCOMMITFEE']._serialized_end=80517 + _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_start=80519 + _globals['_LISTCONFIGSCONFIGSCOMMITFEERATEOFFSET']._serialized_end=80593 + _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_start=80595 + _globals['_LISTCONFIGSCONFIGSAUTOCONNECTSEEKERPEERS']._serialized_end=80672 + _globals['_STOPREQUEST']._serialized_start=80674 + _globals['_STOPREQUEST']._serialized_end=80687 + _globals['_STOPRESPONSE']._serialized_start=80689 + _globals['_STOPRESPONSE']._serialized_end=80802 + _globals['_STOPRESPONSE_STOPRESULT']._serialized_start=80756 + _globals['_STOPRESPONSE_STOPRESULT']._serialized_end=80791 + _globals['_HELPREQUEST']._serialized_start=80804 + _globals['_HELPREQUEST']._serialized_end=80851 + _globals['_HELPRESPONSE']._serialized_start=80854 + _globals['_HELPRESPONSE']._serialized_end=81003 + _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_start=80959 + _globals['_HELPRESPONSE_HELPFORMATHINT']._serialized_end=80987 + _globals['_HELPHELP']._serialized_start=81005 + _globals['_HELPHELP']._serialized_end=81032 + _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_start=81034 + _globals['_PREAPPROVEKEYSENDREQUEST']._serialized_end=81137 + _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_start=81139 + _globals['_PREAPPROVEKEYSENDRESPONSE']._serialized_end=81166 + _globals['_PREAPPROVEINVOICEREQUEST']._serialized_start=81168 + _globals['_PREAPPROVEINVOICEREQUEST']._serialized_end=81210 + _globals['_PREAPPROVEINVOICERESPONSE']._serialized_start=81212 + _globals['_PREAPPROVEINVOICERESPONSE']._serialized_end=81239 + _globals['_STATICBACKUPREQUEST']._serialized_start=81241 + _globals['_STATICBACKUPREQUEST']._serialized_end=81262 + _globals['_STATICBACKUPRESPONSE']._serialized_start=81264 + _globals['_STATICBACKUPRESPONSE']._serialized_end=81299 + _globals['_BKPRCHANNELSAPYREQUEST']._serialized_start=81301 + _globals['_BKPRCHANNELSAPYREQUEST']._serialized_end=81401 + _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_start=81403 + _globals['_BKPRCHANNELSAPYRESPONSE']._serialized_end=81483 + _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_start=81486 + _globals['_BKPRCHANNELSAPYCHANNELSAPY']._serialized_end=82375 + _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_start=82378 + _globals['_BKPRDUMPINCOMECSVREQUEST']._serialized_end=82588 + _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_start=82591 + _globals['_BKPRDUMPINCOMECSVRESPONSE']._serialized_end=82803 + _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_start=82717 + _globals['_BKPRDUMPINCOMECSVRESPONSE_BKPRDUMPINCOMECSVCSVFORMAT']._serialized_end=82803 + _globals['_BKPRINSPECTREQUEST']._serialized_start=82805 + _globals['_BKPRINSPECTREQUEST']._serialized_end=82842 + _globals['_BKPRINSPECTRESPONSE']._serialized_start=82844 + _globals['_BKPRINSPECTRESPONSE']._serialized_end=82899 + _globals['_BKPRINSPECTTXS']._serialized_start=82902 + _globals['_BKPRINSPECTTXS']._serialized_end=83056 + _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_start=83059 + _globals['_BKPRINSPECTTXSOUTPUTS']._serialized_end=83503 + _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_start=83505 + _globals['_BKPRLISTACCOUNTEVENTSREQUEST']._serialized_end=83609 + _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_start=83611 + _globals['_BKPRLISTACCOUNTEVENTSRESPONSE']._serialized_end=83692 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_start=83695 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS']._serialized_end=84368 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_start=84171 + _globals['_BKPRLISTACCOUNTEVENTSEVENTS_BKPRLISTACCOUNTEVENTSEVENTSTYPE']._serialized_end=84245 + _globals['_BKPRLISTBALANCESREQUEST']._serialized_start=84370 + _globals['_BKPRLISTBALANCESREQUEST']._serialized_end=84395 + _globals['_BKPRLISTBALANCESRESPONSE']._serialized_start=84397 + _globals['_BKPRLISTBALANCESRESPONSE']._serialized_end=84472 + _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_start=84475 + _globals['_BKPRLISTBALANCESACCOUNTS']._serialized_end=84801 + _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_start=84803 + _globals['_BKPRLISTBALANCESACCOUNTSBALANCES']._serialized_end=84891 + _globals['_BKPRLISTINCOMEREQUEST']._serialized_start=84894 + _globals['_BKPRLISTINCOMEREQUEST']._serialized_end=85045 + _globals['_BKPRLISTINCOMERESPONSE']._serialized_start=85047 + _globals['_BKPRLISTINCOMERESPONSE']._serialized_end=85127 + _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_start=85130 + _globals['_BKPRLISTINCOMEINCOMEEVENTS']._serialized_end=85438 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_start=85440 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDREQUEST']._serialized_end=85520 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_start=85522 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDRESPONSE']._serialized_end=85623 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_start=85626 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED']._serialized_end=86301 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_start=86127 + _globals['_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATED_BKPREDITDESCRIPTIONBYPAYMENTIDUPDATEDTYPE']._serialized_end=86194 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_start=86303 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTREQUEST']._serialized_end=86380 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_start=86382 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTRESPONSE']._serialized_end=86481 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_start=86484 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED']._serialized_end=87155 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_start=86982 + _globals['_BKPREDITDESCRIPTIONBYOUTPOINTUPDATED_BKPREDITDESCRIPTIONBYOUTPOINTUPDATEDTYPE']._serialized_end=87048 + _globals['_BLACKLISTRUNEREQUEST']._serialized_start=87157 + _globals['_BLACKLISTRUNEREQUEST']._serialized_end=87267 + _globals['_BLACKLISTRUNERESPONSE']._serialized_start=87269 + _globals['_BLACKLISTRUNERESPONSE']._serialized_end=87340 + _globals['_BLACKLISTRUNEBLACKLIST']._serialized_start=87342 + _globals['_BLACKLISTRUNEBLACKLIST']._serialized_end=87394 + _globals['_CHECKRUNEREQUEST']._serialized_start=87396 + _globals['_CHECKRUNEREQUEST']._serialized_end=87508 + _globals['_CHECKRUNERESPONSE']._serialized_start=87510 + _globals['_CHECKRUNERESPONSE']._serialized_end=87544 + _globals['_CREATERUNEREQUEST']._serialized_start=87546 + _globals['_CREATERUNEREQUEST']._serialized_end=87615 + _globals['_CREATERUNERESPONSE']._serialized_start=87617 + _globals['_CREATERUNERESPONSE']._serialized_end=87740 + _globals['_SHOWRUNESREQUEST']._serialized_start=87742 + _globals['_SHOWRUNESREQUEST']._serialized_end=87788 + _globals['_SHOWRUNESRESPONSE']._serialized_start=87790 + _globals['_SHOWRUNESRESPONSE']._serialized_end=87845 + _globals['_SHOWRUNESRUNES']._serialized_start=87848 + _globals['_SHOWRUNESRUNES']._serialized_end=88133 + _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_start=88135 + _globals['_SHOWRUNESRUNESRESTRICTIONS']._serialized_end=88247 + _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_start=88249 + _globals['_SHOWRUNESRUNESRESTRICTIONSALTERNATIVES']._serialized_end=88359 + _globals['_ASKRENEUNRESERVEREQUEST']._serialized_start=88361 + _globals['_ASKRENEUNRESERVEREQUEST']._serialized_end=88427 + _globals['_ASKRENEUNRESERVERESPONSE']._serialized_start=88429 + _globals['_ASKRENEUNRESERVERESPONSE']._serialized_end=88455 + _globals['_ASKRENEUNRESERVEPATH']._serialized_start=88458 + _globals['_ASKRENEUNRESERVEPATH']._serialized_end=88604 + _globals['_ASKRENELISTLAYERSREQUEST']._serialized_start=88606 + _globals['_ASKRENELISTLAYERSREQUEST']._serialized_end=88662 + _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_start=88664 + _globals['_ASKRENELISTLAYERSRESPONSE']._serialized_end=88737 + _globals['_ASKRENELISTLAYERSLAYERS']._serialized_start=88740 + _globals['_ASKRENELISTLAYERSLAYERS']._serialized_end=89186 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_start=89189 + _globals['_ASKRENELISTLAYERSLAYERSCREATEDCHANNELS']._serialized_end=89328 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_start=89331 + _globals['_ASKRENELISTLAYERSLAYERSCHANNELUPDATES']._serialized_end=89755 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_start=89758 + _globals['_ASKRENELISTLAYERSLAYERSCONSTRAINTS']._serialized_end=90006 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_start=90009 + _globals['_ASKRENELISTLAYERSLAYERSBIASES']._serialized_end=90164 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_start=90167 + _globals['_ASKRENELISTLAYERSLAYERSNODEBIASES']._serialized_end=90312 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_start=90314 + _globals['_ASKRENECREATELAYERREQUEST']._serialized_end=90396 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_start=90398 + _globals['_ASKRENECREATELAYERRESPONSE']._serialized_end=90473 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_start=90476 + _globals['_ASKRENECREATELAYERLAYERS']._serialized_end=90908 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_start=90911 + _globals['_ASKRENECREATELAYERLAYERSCREATEDCHANNELS']._serialized_end=91051 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_start=91054 + _globals['_ASKRENECREATELAYERLAYERSCHANNELUPDATES']._serialized_end=91391 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_start=91394 + _globals['_ASKRENECREATELAYERLAYERSCONSTRAINTS']._serialized_end=91590 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_start=91593 + _globals['_ASKRENECREATELAYERLAYERSBIASES']._serialized_end=91749 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_start=91752 + _globals['_ASKRENECREATELAYERLAYERSNODEBIASES']._serialized_end=91898 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_start=91900 + _globals['_ASKRENEREMOVELAYERREQUEST']._serialized_end=91942 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_start=91944 + _globals['_ASKRENEREMOVELAYERRESPONSE']._serialized_end=91972 + _globals['_ASKRENERESERVEREQUEST']._serialized_start=91974 + _globals['_ASKRENERESERVEREQUEST']._serialized_end=92036 + _globals['_ASKRENERESERVERESPONSE']._serialized_start=92038 + _globals['_ASKRENERESERVERESPONSE']._serialized_end=92062 + _globals['_ASKRENERESERVEPATH']._serialized_start=92065 + _globals['_ASKRENERESERVEPATH']._serialized_end=92209 + _globals['_ASKRENEAGEREQUEST']._serialized_start=92211 + _globals['_ASKRENEAGEREQUEST']._serialized_end=92261 + _globals['_ASKRENEAGERESPONSE']._serialized_start=92263 + _globals['_ASKRENEAGERESPONSE']._serialized_end=92319 + _globals['_GETROUTESREQUEST']._serialized_start=92322 + _globals['_GETROUTESREQUEST']._serialized_end=92573 + _globals['_GETROUTESRESPONSE']._serialized_start=92575 + _globals['_GETROUTESRESPONSE']._serialized_end=92657 + _globals['_GETROUTESROUTES']._serialized_start=92660 + _globals['_GETROUTESROUTES']._serialized_end=92816 + _globals['_GETROUTESROUTESPATH']._serialized_start=92819 + _globals['_GETROUTESROUTESPATH']._serialized_end=92971 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_start=92973 + _globals['_ASKRENEDISABLENODEREQUEST']._serialized_end=93029 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_start=93031 + _globals['_ASKRENEDISABLENODERESPONSE']._serialized_end=93059 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_start=93062 + _globals['_ASKRENEINFORMCHANNELREQUEST']._serialized_end=93395 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_start=93264 + _globals['_ASKRENEINFORMCHANNELREQUEST_ASKRENEINFORMCHANNELINFORM']._serialized_end=93343 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_start=93397 + _globals['_ASKRENEINFORMCHANNELRESPONSE']._serialized_end=93486 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_start=93489 + _globals['_ASKRENEINFORMCHANNELCONSTRAINTS']._serialized_end=93700 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_start=93703 + _globals['_ASKRENECREATECHANNELREQUEST']._serialized_end=93846 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_start=93848 + _globals['_ASKRENECREATECHANNELRESPONSE']._serialized_end=93878 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_start=93881 + _globals['_ASKRENEUPDATECHANNELREQUEST']._serialized_end=94310 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_start=94312 + _globals['_ASKRENEUPDATECHANNELRESPONSE']._serialized_end=94342 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_start=94345 + _globals['_ASKRENEBIASCHANNELREQUEST']._serialized_end=94509 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_start=94511 + _globals['_ASKRENEBIASCHANNELRESPONSE']._serialized_end=94586 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_start=94589 + _globals['_ASKRENEBIASCHANNELBIASES']._serialized_end=94754 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_start=94757 + _globals['_ASKRENEBIASNODEREQUEST']._serialized_end=94921 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_start=94923 + _globals['_ASKRENEBIASNODERESPONSE']._serialized_end=95001 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_start=95004 + _globals['_ASKRENEBIASNODENODEBIASES']._serialized_end=95156 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_start=95158 + _globals['_ASKRENELISTRESERVATIONSREQUEST']._serialized_end=95190 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_start=95192 + _globals['_ASKRENELISTRESERVATIONSRESPONSE']._serialized_end=95289 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_start=95292 + _globals['_ASKRENELISTRESERVATIONSRESERVATIONS']._serialized_end=95437 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_start=95440 + _globals['_INJECTPAYMENTONIONREQUEST']._serialized_end=95771 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_start=95773 + _globals['_INJECTPAYMENTONIONRESPONSE']._serialized_end=95892 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_start=95894 + _globals['_INJECTONIONMESSAGEREQUEST']._serialized_end=95956 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_start=95958 + _globals['_INJECTONIONMESSAGERESPONSE']._serialized_end=95986 + _globals['_XPAYREQUEST']._serialized_start=95989 + _globals['_XPAYREQUEST']._serialized_end=96268 + _globals['_XPAYRESPONSE']._serialized_start=96271 + _globals['_XPAYRESPONSE']._serialized_end=96432 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_start=96434 + _globals['_SIGNMESSAGEWITHKEYREQUEST']._serialized_end=96495 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_start=96497 + _globals['_SIGNMESSAGEWITHKEYRESPONSE']._serialized_end=96593 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_start=96596 + _globals['_LISTCHANNELMOVESREQUEST']._serialized_end=96801 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_start=96735 + _globals['_LISTCHANNELMOVESREQUEST_LISTCHANNELMOVESINDEX']._serialized_end=96771 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_start=96803 + _globals['_LISTCHANNELMOVESRESPONSE']._serialized_end=96886 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_start=96889 + _globals['_LISTCHANNELMOVESCHANNELMOVES']._serialized_end=97442 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_start=97250 + _globals['_LISTCHANNELMOVESCHANNELMOVES_LISTCHANNELMOVESCHANNELMOVESPRIMARYTAG']._serialized_end=97400 + _globals['_LISTCHAINMOVESREQUEST']._serialized_start=97445 + _globals['_LISTCHAINMOVESREQUEST']._serialized_end=97642 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_start=97578 + _globals['_LISTCHAINMOVESREQUEST_LISTCHAINMOVESINDEX']._serialized_end=97612 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_start=97644 + _globals['_LISTCHAINMOVESRESPONSE']._serialized_end=97719 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_start=97722 + _globals['_LISTCHAINMOVESCHAINMOVES']._serialized_end=98574 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_start=98209 + _globals['_LISTCHAINMOVESCHAINMOVES_LISTCHAINMOVESCHAINMOVESPRIMARYTAG']._serialized_end=98486 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_start=98577 + _globals['_LISTNETWORKEVENTSREQUEST']._serialized_end=98810 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_start=98736 + _globals['_LISTNETWORKEVENTSREQUEST_LISTNETWORKEVENTSINDEX']._serialized_end=98773 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_start=98812 + _globals['_LISTNETWORKEVENTSRESPONSE']._serialized_end=98899 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_start=98902 + _globals['_LISTNETWORKEVENTSNETWORKEVENTS']._serialized_end=99144 + _globals['_DELNETWORKEVENTREQUEST']._serialized_start=99146 + _globals['_DELNETWORKEVENTREQUEST']._serialized_end=99193 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_start=99195 + _globals['_DELNETWORKEVENTRESPONSE']._serialized_end=99220 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_start=99222 + _globals['_STREAMBLOCKADDEDREQUEST']._serialized_end=99247 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_start=99249 + _globals['_BLOCKADDEDNOTIFICATION']._serialized_end=99303 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_start=99305 + _globals['_STREAMCHANNELOPENFAILEDREQUEST']._serialized_end=99337 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_start=99339 + _globals['_CHANNELOPENFAILEDNOTIFICATION']._serialized_end=99390 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_start=99392 + _globals['_STREAMCHANNELOPENEDREQUEST']._serialized_end=99420 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_start=99422 + _globals['_CHANNELOPENEDNOTIFICATION']._serialized_end=99541 + _globals['_STREAMCONNECTREQUEST']._serialized_start=99543 + _globals['_STREAMCONNECTREQUEST']._serialized_end=99565 + _globals['_PEERCONNECTNOTIFICATION']._serialized_start=99568 + _globals['_PEERCONNECTNOTIFICATION']._serialized_end=99758 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_start=99719 + _globals['_PEERCONNECTNOTIFICATION_PEERCONNECTDIRECTION']._serialized_end=99758 + _globals['_PEERCONNECTADDRESS']._serialized_start=99761 + _globals['_PEERCONNECTADDRESS']._serialized_end=100043 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_start=99912 + _globals['_PEERCONNECTADDRESS_PEERCONNECTADDRESSTYPE']._serialized_end=100011 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_start=100045 + _globals['_STREAMCUSTOMMSGREQUEST']._serialized_end=100069 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_start=100071 + _globals['_CUSTOMMSGNOTIFICATION']._serialized_end=100128 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_start=100130 + _globals['_STREAMCHANNELSTATECHANGEDREQUEST']._serialized_end=100164 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_start=100167 + _globals['_CHANNELSTATECHANGEDNOTIFICATION']._serialized_end=100616 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_start=100470 + _globals['_CHANNELSTATECHANGEDNOTIFICATION_CHANNELSTATECHANGEDCAUSE']._serialized_end=100569 + _globals['_NODE']._serialized_start=100619 + _globals['_NODE']._serialized_end=111471 # @@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 0e686ba0dc29..887eee54648c 100644 --- a/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py +++ b/contrib/pyln-grpc-proto/pyln/grpc/node_pb2_grpc.py @@ -289,6 +289,11 @@ 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, @@ -739,11 +744,6 @@ 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,6 +1085,12 @@ 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) @@ -1625,12 +1631,6 @@ 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,6 +1925,11 @@ 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, @@ -2375,11 +2380,6 @@ 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,6 +3798,33 @@ 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, @@ -6228,33 +6255,6 @@ 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 e04d6d8e7929..db4206a1279c 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, SLOW_MACHINE, VALGRIND +from pyln.testing.utils import NodeFactory, BitcoinD, ElementsD, env, LightningNode, TEST_DEBUG, TEST_NETWORK from pyln.client import Millisatoshi from typing import Dict from pathlib import Path @@ -59,9 +59,6 @@ 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()) @@ -414,17 +411,6 @@ 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 @@ -453,7 +439,6 @@ def is_string_map(checker, instance): "outpoint": is_outpoint, "feerate": is_feerate, "outputdesc": is_outputdesc, - "string_map": is_string_map, }) return jsonschema.validators.extend(jsonschema.Draft7Validator, @@ -513,7 +498,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 or That's weird messages") + map_node_error(nf.nodes, checkBroken, "had BROKEN 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") @@ -635,10 +620,6 @@ 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 d3f62a588dc7..146172602d54 100644 --- a/contrib/pyln-testing/pyln/testing/grpc2py.py +++ b/contrib/pyln-testing/pyln/testing/grpc2py.py @@ -335,6 +335,8 @@ 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 }) @@ -1114,6 +1116,42 @@ 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 @@ -1385,7 +1423,6 @@ def disableoffer2py(m): return remove_default({ "active": m.active, # PrimitiveField in generate_composite "bolt12": m.bolt12, # PrimitiveField in generate_composite - "description": m.description, # PrimitiveField in generate_composite "label": m.label, # PrimitiveField in generate_composite "offer_id": hexlify(m.offer_id), # PrimitiveField in generate_composite "single_use": m.single_use, # PrimitiveField in generate_composite @@ -1397,7 +1434,6 @@ def enableoffer2py(m): return remove_default({ "active": m.active, # PrimitiveField in generate_composite "bolt12": m.bolt12, # PrimitiveField in generate_composite - "description": m.description, # PrimitiveField in generate_composite "label": m.label, # PrimitiveField in generate_composite "offer_id": hexlify(m.offer_id), # PrimitiveField in generate_composite "single_use": m.single_use, # PrimitiveField in generate_composite @@ -1676,7 +1712,6 @@ def listoffers_offers2py(m): return remove_default({ "active": m.active, # PrimitiveField in generate_composite "bolt12": m.bolt12, # PrimitiveField in generate_composite - "description": m.description, # PrimitiveField in generate_composite "label": m.label, # PrimitiveField in generate_composite "offer_id": hexlify(m.offer_id), # PrimitiveField in generate_composite "single_use": m.single_use, # PrimitiveField in generate_composite @@ -3341,11 +3376,6 @@ 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 dd60020cc1c1..59ebd5259ffc 100644 --- a/contrib/pyln-testing/pyln/testing/utils.py +++ b/contrib/pyln-testing/pyln/testing/utils.py @@ -17,7 +17,6 @@ import logging import lzma import math -import mnemonic import os import random import re @@ -198,29 +197,6 @@ class TailableProc(object): def __init__(self, outputDir, verbose=True): self.logs = [] self.env = os.environ.copy() - - # Add coverage support: inject LLVM_PROFILE_FILE if CLN_COVERAGE_DIR is set - if os.getenv('CLN_COVERAGE_DIR'): - coverage_dir = os.getenv('CLN_COVERAGE_DIR') - - # Organize profraw files by test name for per-test coverage analysis - test_name = os.getenv('CLN_TEST_NAME') - if test_name: - test_coverage_dir = os.path.join(coverage_dir, test_name) - os.makedirs(test_coverage_dir, exist_ok=True) - profraw_path = test_coverage_dir - else: - os.makedirs(coverage_dir, exist_ok=True) - profraw_path = coverage_dir - - # %p=PID, %m=binary signature prevents collisions across parallel processes - # Note: We don't use %c (continuous mode) as it causes "__llvm_profile_counter_bias" - # errors with our multi-binary setup. Instead, we validate and filter corrupt files - # during collection (see contrib/coverage/collect-coverage.sh) - self.env['LLVM_PROFILE_FILE'] = os.path.join( - profraw_path, '%p-%m.profraw' - ) - self.proc = None self.outputDir = outputDir if not os.path.exists(outputDir): @@ -292,43 +268,15 @@ 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.readlines_wait_for_end(self.stdout_read) + new_stdout = self.stdout_read.readlines() 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.readlines_wait_for_end(self.stderr_read) + new_stderr = self.stderr_read.readlines() if self.verbose: for line in new_stderr: sys.stderr.write("{}-stderr: {}".format(self.prefix, line)) @@ -693,14 +641,6 @@ 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, @@ -710,7 +650,6 @@ 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) @@ -752,24 +691,11 @@ def __init__( if not os.path.exists(os.path.join(lightning_dir, TEST_NETWORK)): os.makedirs(os.path.join(lightning_dir, TEST_NETWORK)) - # 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") - + # Last 32-bytes of final part of dir -> seed. + seed = (bytes(re.search('([^/]+)/*$', lightning_dir).group(1), encoding='utf-8') + bytes(32))[:32] 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) @@ -892,7 +818,7 @@ def call(self, method, payload=None, cmdprefix=None, filter=None): class LightningNode(object): - def __init__(self, node_id, lightning_dir, bitcoind, executor, may_fail=False, + def __init__(self, node_id, lightning_dir, bitcoind, executor, valgrind, may_fail=False, may_reconnect=False, broken_log=None, allow_warning=False, @@ -902,7 +828,6 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, may_fail=False, valgrind_plugins=True, executable=None, bad_notifications=False, - old_hsmsecret=None, **kwargs): self.bitcoin = bitcoind self.executor = executor @@ -927,7 +852,6 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, may_fail=False, 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 @@ -953,7 +877,7 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, may_fail=False, 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: @@ -979,7 +903,7 @@ def __init__(self, node_id, lightning_dir, bitcoind, executor, may_fail=False, dsn = db.get_dsn() if dsn is not None: self.daemon.opts['wallet'] = dsn - if VALGRIND: + if valgrind: trace_skip_pattern = '*python*,*bitcoin-cli*,*elements-cli*,*cln-grpc*,*clnrest*,*wss-proxy*,*cln-bip353*,*reckless' if not valgrind_plugins: trace_skip_pattern += ',*plugins*' @@ -1706,11 +1630,11 @@ 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 - os.environ['CLN_TEST_NAME'] = testname - self.next_id = 1 self.nodes = [] self.reserved_ports = [] @@ -1742,7 +1666,6 @@ 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} @@ -1805,7 +1728,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, db=db, + node_id, lightning_dir, self.bitcoind, self.executor, self.valgrind, db=db, port=port, grpc_port=grpc_port, options=options, may_fail=may_fail or expect_fail, jsonschemas=self.jsonschemas, **kwargs @@ -1922,7 +1845,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 VALGRIND: + if not self.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 c22391e54de7..2533d7be1238 100644 --- a/db/common.h +++ b/db/common.h @@ -66,9 +66,6 @@ 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 d3c6f30f2c84..ed63989d4f66 100644 --- a/db/db_sqlite3.c +++ b/db/db_sqlite3.c @@ -203,23 +203,7 @@ static bool db_sqlite3_setup(struct db *db, bool create) "PRAGMA foreign_keys = ON;", -1, &stmt, NULL); err = sqlite3_step(stmt); sqlite3_finalize(stmt); - - 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; + return err == SQLITE_DONE; } static bool db_sqlite3_query(struct db_stmt *stmt) @@ -227,20 +211,8 @@ 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); - tal_free(modified_query); + err = sqlite3_prepare_v2(conn, stmt->query->query, -1, &s, NULL); 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 2091111089ce..d6234179df5a 100644 --- a/db/utils.c +++ b/db/utils.c @@ -364,7 +364,6 @@ 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 3d84e9279ed9..b7c4874032e3 100644 --- a/devtools/Makefile +++ b/devtools/Makefile @@ -20,6 +20,11 @@ $(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 deleted file mode 100755 index 118385581f41..000000000000 --- a/devtools/cc-nobuild +++ /dev/null @@ -1,9 +0,0 @@ -#! /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 efc30855cd42..c5ee23c9dfc9 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 226324e34f50..320ad9f37e1a 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 252edf943efa..2d69b0637040 100644 --- a/devtools/dump-gossipstore.c +++ b/devtools/dump-gossipstore.c @@ -3,86 +3,16 @@ #include #include #include -#include -#include #include #include -#include +#include #include #include #include /* Current versions we support */ #define GSTORE_MAJOR 0 -#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; -} +#define GSTORE_MINOR 15 int main(int argc, char *argv[]) { @@ -93,7 +23,7 @@ int main(int argc, char *argv[]) bool print_deleted = false; bool print_timestamp = false; - common_setup(argv[0]); + setup_locale(); opt_register_noarg("--print-deleted", opt_set_bool, &print_deleted, "Print deleted entries too"); opt_register_noarg("--print-timestamps", opt_set_bool, &print_timestamp, @@ -134,16 +64,12 @@ int main(int argc, char *argv[]) while (read(fd, &hdr, sizeof(hdr)) == sizeof(hdr)) { struct amount_sat sat; - struct short_channel_id scid, *scidptr; - struct short_channel_id_dir *sciddptr; - struct node_id *nodeptr; + struct short_channel_id scid; 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); @@ -169,20 +95,17 @@ 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 (is_channel_announce(msg, &scidptr)) { - printf("t=%u channel_announcement(%s): %s\n", + } else if (fromwire_peektype(msg) == WIRE_CHANNEL_ANNOUNCEMENT) { + printf("t=%u channel_announcement: %s\n", be32_to_cpu(hdr.timestamp), - scidptr ? fmt_short_channel_id(tmpctx, *scidptr) : "?", tal_hex(msg, msg)); - } else if (is_channel_update(msg, &sciddptr)) { - printf("t=%u channel_update(%s): %s\n", + } else if (fromwire_peektype(msg) == WIRE_CHANNEL_UPDATE) { + printf("t=%u channel_update: %s\n", be32_to_cpu(hdr.timestamp), - sciddptr ? fmt_short_channel_id_dir(tmpctx, sciddptr) : "?", tal_hex(msg, msg)); - } else if (is_node_announcement(msg, &nodeptr)) { - printf("t=%u node_announcement(%s): %s\n", + } else if (fromwire_peektype(msg) == WIRE_NODE_ANNOUNCEMENT) { + printf("t=%u node_announcement: %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)) { @@ -200,14 +123,6 @@ 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)); @@ -216,6 +131,5 @@ 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 deleted file mode 100755 index 628e6812020d..000000000000 --- a/devtools/fix-style-errors +++ /dev/null @@ -1,18 +0,0 @@ -#!/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 c282c9924e52..7f85e8eecd1b 100644 --- a/devtools/gossipwith.c +++ b/devtools/gossipwith.c @@ -256,22 +256,16 @@ 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 (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 (handle_pings + && fromwire_peektype(msg) == WIRE_PING + && check_ping_make_pong(tmpctx, msg, &pong) + && pong) { + sync_crypto_write(peer_fd, cs, take(pong)); + } if (!accept_message(msg)) { tal_free(msg); continue; @@ -284,9 +278,7 @@ static struct io_plan *handshake_success(struct io_conn *conn, || !write_all(STDOUT_FILENO, msg, tal_bytelen(msg))) err(1, "Writing out msg"); } - /* Don't count "padding" pings as real messages */ - if (!is_padding) - --max_messages; + --max_messages; tal_free(msg); } } diff --git a/devtools/gossmap-compress.c b/devtools/gossmap-compress.c index 5c0be91b5e39..ac995f9115ce 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) | 16) +#define GOSSIP_STORE_VER ((0 << 5) | 14) /* 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 = CPU_TO_BE16(GOSSIP_STORE_COMPLETED_BIT); + hdr.flags = 0; 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, i + node1, node2, i & 0xFFFF)) + if (!mk_short_channel_id(&scid, 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, i + node1, node2, i & 0xFFFF)) + if (!mk_short_channel_id(&scid, node1, node2, i & 0xFFFF)) abort(); /* If node ids are backward, dir is reversed */ @@ -513,17 +513,6 @@ 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; @@ -802,7 +791,6 @@ 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 deleted file mode 100755 index bee5541fb482..000000000000 --- a/devtools/include-order-fixer.py +++ /dev/null @@ -1,394 +0,0 @@ -#!/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 d75075121f81..9fe6e69f858c 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 = NULL; + const u8 *msg; 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 = NULL; + struct tlv_query_channel_range_tlvs *tlvs; 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 = NULL; + struct tlv_query_short_channel_ids_tlvs *tlvs; u8 *encoded; if (argc == 4) diff --git a/devtools/sql-rewrite.py b/devtools/sql-rewrite.py index 4bee77a8714f..03c358a643c7 100755 --- a/devtools/sql-rewrite.py +++ b/devtools/sql-rewrite.py @@ -45,8 +45,6 @@ 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/COVERAGE.md b/doc/COVERAGE.md deleted file mode 100644 index 391c168a3e7d..000000000000 --- a/doc/COVERAGE.md +++ /dev/null @@ -1,298 +0,0 @@ -# Code Coverage Guide - -This guide explains how to measure code coverage for Core Lightning's test suite. - -## Overview - -Core Lightning uses Clang's source-based coverage instrumentation to measure which lines of code are executed during tests. This is particularly challenging because: - -- CLN is a multi-process application (lightningd + 8 daemon executables) -- Each test spawns multiple nodes, each running multiple daemon processes -- Tests run in parallel (10+ workers) -- Test processes run in temporary directories - -Our solution uses `LLVM_PROFILE_FILE` environment variable with unique naming patterns to prevent profile file collisions across parallel processes. - -## Local Development Workflow - -### Prerequisites - -- Clang compiler (clang-15 or later) -- LLVM tools: `llvm-profdata`, `llvm-cov` - -Install on Ubuntu/Debian: -```bash -sudo apt-get install clang llvm -``` - -### Step 1: Build with Coverage Instrumentation - -```bash -./configure --enable-coverage CC=clang -make clean # Important: clean previous builds -make -``` - -This compiles all binaries with `-fprofile-instr-generate -fcoverage-mapping` flags. - -### Step 2: Run Tests with Coverage Collection - -Set the coverage directory and run tests: - -```bash -export CLN_COVERAGE_DIR=/tmp/cln-coverage -mkdir -p "$CLN_COVERAGE_DIR" -uv run pytest tests/ -n 10 -``` - -You can run a subset of tests for faster iteration: - -```bash -uv run pytest tests/test_pay.py -n 10 -``` - -All test processes will write `.profraw` files to `$CLN_COVERAGE_DIR` with unique names like `12345-67890abcdef.profraw` (PID-signature). - -### Step 3: Generate Coverage Reports - -Merge all profile files and generate HTML report: - -```bash -make coverage-clang -``` - -This runs two scripts: -1. `contrib/coverage/collect-coverage.sh` - Merges all `.profraw` files into `coverage/merged.profdata` -2. `contrib/coverage/generate-coverage-report.sh` - Generates HTML report from merged profile - -### Step 4: View the Report - -Open the HTML report in your browser: - -```bash -xdg-open coverage/html/index.html -``` - -Or on macOS: - -```bash -open coverage/html/index.html -``` - -The report shows: -- **Per-file coverage**: Which files have been tested -- **Line-by-line coverage**: Which lines were executed and how many times -- **Summary statistics**: Overall coverage percentage - -You can also view the text summary: - -```bash -cat coverage/summary.txt -``` - -### Step 5: Clean Up - -```bash -make coverage-clang-clean -``` - -This removes the `coverage/` directory and `$CLN_COVERAGE_DIR`. - -## Complete Example - -```bash -# Build -./configure --enable-coverage CC=clang -make - -# Test -export CLN_COVERAGE_DIR=/tmp/cln-coverage -mkdir -p "$CLN_COVERAGE_DIR" -uv run pytest tests/test_pay.py tests/test_invoice.py -n 10 - -# Report -make coverage-clang -xdg-open coverage/html/index.html - -# Clean -make coverage-clang-clean -``` - -## Advanced Usage - -### Running Specific Test Files - -For faster development iteration, run only the tests you're working on: - -```bash -uv run pytest tests/test_plugin.py -n 5 -``` - -### Per-Test Coverage - -Coverage data is automatically organized by test name, allowing you to see which code each test exercises: - -```bash -export CLN_COVERAGE_DIR=/tmp/cln-coverage -mkdir -p "$CLN_COVERAGE_DIR" -uv run pytest tests/test_pay.py tests/test_invoice.py -n 10 -``` - -This creates a directory structure like: -``` -/tmp/cln-coverage/ - ├── test_pay/ - │ ├── 12345-abc.profraw - │ └── 67890-def.profraw - └── test_invoice/ - ├── 11111-ghi.profraw - └── 22222-jkl.profraw -``` - -Generate per-test coverage reports: -```bash -# Generate text summaries -./contrib/coverage/per-test-coverage.sh - -# Generate HTML reports (optional) -./contrib/coverage/per-test-coverage-html.sh -``` - -This creates: -- `coverage/per-test/.profdata` - Merged profile for each test -- `coverage/per-test/.txt` - Text summary for each test -- `coverage/per-test-html//index.html` - HTML report for each test (if generated) - -### Merging Multiple Test Runs - -You can accumulate coverage across multiple test runs by reusing the same `CLN_COVERAGE_DIR`: - -```bash -export CLN_COVERAGE_DIR=/tmp/cln-coverage -mkdir -p "$CLN_COVERAGE_DIR" - -# Run different test subsets -uv run pytest tests/test_pay.py -n 10 -uv run pytest tests/test_invoice.py -n 10 -uv run pytest tests/test_plugin.py -n 10 - -# Generate combined report (merges all tests) -make coverage-clang - -# Or generate per-test reports -./contrib/coverage/per-test-coverage.sh -``` - -### Manual Collection and Reporting - -If you want more control: - -```bash -# Collect and merge -./contrib/coverage/collect-coverage.sh /tmp/cln-coverage coverage/merged.profdata - -# Generate report -./contrib/coverage/generate-coverage-report.sh coverage/merged.profdata coverage/html -``` - -## Continuous Integration - -Coverage is automatically measured nightly on the master branch via the `coverage-nightly.yaml` GitHub Actions workflow. The workflow: - -1. Builds CLN with coverage instrumentation -2. Runs tests with both sqlite and postgres databases -3. Merges coverage from all test runs -4. Uploads results to Codecov.io -5. Saves HTML reports as artifacts (90-day retention) - -You can view: -- **Codecov dashboard**: [codecov.io/gh/ElementsProject/lightning](https://codecov.io/gh/ElementsProject/lightning) -- **HTML artifacts**: Download from GitHub Actions workflow runs - -## Troubleshooting - -### No .profraw files created - -**Problem**: `make coverage-clang` reports "No .profraw files found" - -**Solutions**: -1. Verify `CLN_COVERAGE_DIR` is set: `echo $CLN_COVERAGE_DIR` -2. Verify you built with coverage: `./configure --enable-coverage CC=clang && make` -3. Check that tests actually ran successfully - -### llvm-profdata not found - -**Problem**: `llvm-profdata: command not found` - -**Solution**: Install LLVM tools: -```bash -sudo apt-get install llvm -# Or on macOS: -brew install llvm -``` - -### Binary not found errors in generate-coverage-report.sh - -**Problem**: Script complains about missing binaries - -**Solution**: Make sure you've run `make` to build all CLN executables - -### Coverage shows 0% for some files - -**Causes**: -1. Those files weren't executed by your tests (expected) -2. The binary wasn't instrumented (check build flags) -3. The profile data is incomplete - -### Corrupt .profraw files - -**Problem**: `llvm-profdata merge` fails with "invalid instrumentation profile data (file header is corrupt)" - -**Cause**: When test processes crash or timeout, they may leave incomplete/corrupt `.profraw` files. - -**Solution**: The `collect-coverage.sh` script automatically validates and filters out bad files: -- **Empty files** - Processes that crash immediately -- **Incomplete files** (< 1KB) - Processes killed before writing enough data -- **Corrupt files** - Files with invalid headers or structure - -You'll see output like: -``` -Found 1250 profile files - Skipping empty file: /tmp/cln-coverage/12345-abc.profraw - Skipping incomplete file (512 bytes): /tmp/cln-coverage/67890-def.profraw - Skipping corrupt file: /tmp/cln-coverage/11111-ghi.profraw -Valid files: 1247 -Filtered out: 3 files - - Empty: 1 - - Incomplete (< 1KB): 1 - - Corrupt/invalid: 1 -✓ Merged profile: coverage/merged.profdata -``` - -To manually review and clean up corrupt files: -```bash -./contrib/coverage/cleanup-corrupt-profraw.sh -``` - -This will show you which files are corrupt and offer to delete them. - -**Prevention**: Incomplete/corrupt files are unavoidable when tests crash/timeout. The collection script handles this automatically by filtering them out during merge. - -## Understanding Coverage Metrics - -- **Lines**: Percentage of source code lines executed -- **Functions**: Percentage of functions that were called -- **Regions**: Percentage of code regions (blocks) executed -- **Hit count**: Number of times each line was executed - -Aim for: -- **>80% line coverage** for core functionality -- **>60% overall** given the complexity of CLN - -Remember: 100% coverage doesn't mean bug-free code, but low coverage means untested code paths. - -## References - -- [LLVM Source-Based Code Coverage](https://clang.llvm.org/docs/SourceBasedCodeCoverage.html) -- [llvm-profdata documentation](https://llvm.org/docs/CommandGuide/llvm-profdata.html) -- [llvm-cov documentation](https://llvm.org/docs/CommandGuide/llvm-cov.html) diff --git a/doc/Makefile b/doc/Makefile index e99c3ded0808..4603bd9c0f56 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-channel.7 \ doc/askrene-create-layer.7 \ + doc/askrene-remove-layer.7 \ + doc/askrene-create-channel.7 \ + doc/askrene-update-channel.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,7 +35,6 @@ 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 \ @@ -45,6 +44,7 @@ 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,7 +133,6 @@ 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/advanced-db-backup.md b/doc/beginners-guide/backup-and-recovery/advanced-db-backup.md index ed4b742f773b..d76565151572 100644 --- a/doc/beginners-guide/backup-and-recovery/advanced-db-backup.md +++ b/doc/beginners-guide/backup-and-recovery/advanced-db-backup.md @@ -84,10 +84,13 @@ However, if instead you are just replicating the database on another storage dev You can find the full source for the `backup` plugin here: https://github.com/lightningd/plugins/tree/master/backup -The `backup` plugin requires Python 3 and [uv](https://docs.astral.sh/uv/getting-started/installation/). +The `backup` plugin requires Python 3. - Download the source for the plugin. - `git clone https://github.com/lightningd/plugins.git` +- `cd` into its directory and install requirements. + - `cd plugins/backup` + - `pip3 install -r requirements.txt` - Figure out where you will put the backup files. - Ideally you have an NFS or other network-based mount on your system, into which you will put the backup. - Stop your Lightning node. @@ -109,7 +112,7 @@ Alternately, you _could_ put it in another storage device (e.g. USB flash disk) To recover: -- Re-download the `backup` plugin and install Python 3 and [uv](https://docs.astral.sh/uv/getting-started/installation/). +- Re-download the `backup` plugin and install Python 3 and the requirements of `backup`. - `/path/to/backup-cli restore file:///path/to/nfs/mount ${LIGHTNINGDIR}` If your backup destination is a network-mounted filesystem that is in a remote location, then even loss of all hardware in one location will allow you to still recover your Lightning funds. diff --git a/doc/beginners-guide/backup-and-recovery/hsm-secret.md b/doc/beginners-guide/backup-and-recovery/hsm-secret.md index 583134dbed9b..d23ef5373f57 100644 --- a/doc/beginners-guide/backup-and-recovery/hsm-secret.md +++ b/doc/beginners-guide/backup-and-recovery/hsm-secret.md @@ -8,71 +8,31 @@ privacy: --- -## Mnemonic-Based HSM Secrets (v25.12+) +## Generate HSM Secret -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. +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. ```shell -lightning-hsmtool generatehsm $LIGHTNINGDIR/hsm_secret +lightning-hsmtool generatehsm hsm_secret ``` -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) +Then enter the BIP39 words, plus an optional passphrase. Then copy the `hsm_secret` to `${LIGHTNINGDIR}` -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. +You can regenerate the same `hsm_secret` file using the same BIP39 words, which again, you can back up on paper. -### Encrypt Legacy HSM Secret +## Encrypt HSM Secret -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) +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 - or by using the `encrypt` method from `/tools/lightning-hsmtool`. -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. +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. -### Decrypt Legacy HSM Secret +## Decrypt HSM Secret -You can unencrypt an encrypted legacy `hsm_secret` using the `lightning-hsmtool` with the `decrypt` method. +You can unencrypt an encrypted `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 e0c2874691de..9811b9d26a2b 100644 --- a/doc/beginners-guide/backup.md +++ b/doc/beginners-guide/backup.md @@ -38,92 +38,11 @@ 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. +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: -#### 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 +#### Hex Format The secret is just 32 bytes, and can be converted into hexadecimal digits like below: @@ -144,6 +63,18 @@ 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 2ac43ace9607..d354d05c7389 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