From 76b49c87bc15f08b1cc5d30a62a073592517e7e8 Mon Sep 17 00:00:00 2001 From: openoms Date: Sat, 11 Feb 2023 08:48:17 +0000 Subject: [PATCH 01/55] cln: use default normal feerate to withdraw all --- home.admin/BBcashoutWallet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/BBcashoutWallet.sh b/home.admin/BBcashoutWallet.sh index 9e1a714ca..7b86dddfb 100755 --- a/home.admin/BBcashoutWallet.sh +++ b/home.admin/BBcashoutWallet.sh @@ -97,7 +97,7 @@ echo "******************************" # execute command if [ ${LNTYPE} = "cl" ];then # withdraw destination satoshi [feerate] [minconf] [utxos] - command="$lightningcli_alias withdraw ${address} all slow" + command="$lightningcli_alias withdraw ${address} all" elif [ ${LNTYPE} = "lnd" ];then command="$lncli_alias sendcoins --sweepall --addr=${address} --conf_target=36" fi From b91506b4fb7e6d41edb8c35c4803369af920d671 Mon Sep 17 00:00:00 2001 From: Metallicc <72348+metallicc@users.noreply.github.com> Date: Sun, 12 Feb 2023 03:36:06 -0700 Subject: [PATCH 02/55] Bugfix: bad subsititution (#3668) Fix for error: /home/admin/config.scripts/bonus.go.sh: line 31: ${goOSversion{}: bad substitution --- home.admin/config.scripts/bonus.go.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.go.sh b/home.admin/config.scripts/bonus.go.sh index 931e76afb..c1cbc3306 100755 --- a/home.admin/config.scripts/bonus.go.sh +++ b/home.admin/config.scripts/bonus.go.sh @@ -28,7 +28,7 @@ case "$1" in goOSversion=$(dpkg --print-architecture) if [ ${goOSversion} = "armv6l" ]; then checksum=${armv6lChecksum} - elif [ ${goOSversion{} = "arm64" ]; then + elif [ ${goOSversion} = "arm64" ]; then checksum=${arm64Checksum} elif [ ${goOSversion} = "amd64" ]; then checksum=${amd64Checksum} From 6080aadf495057fb37a7eb573d6b4a53570d8eaf Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 13 Feb 2023 22:15:04 +0100 Subject: [PATCH 03/55] whiptail one line --- home.admin/config.scripts/bonus.sphinxrelay.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/home.admin/config.scripts/bonus.sphinxrelay.sh b/home.admin/config.scripts/bonus.sphinxrelay.sh index 6ade00144..dcf6d9cc2 100755 --- a/home.admin/config.scripts/bonus.sphinxrelay.sh +++ b/home.admin/config.scripts/bonus.sphinxrelay.sh @@ -132,8 +132,7 @@ MAINMENU > SUBSCRIBE > IP2TOR > SPHINX" BUT TO MAKE THIS WORK:\n It needs an additional Domain with LetsEncrypt certificate for HTTPS: Go MAINMENU > SUBSCRIBE and add LetsEncrypt HTTPS Domain\n (or cancel the IP2Tor & just use sphinx within local network)" - whiptail --title " Warning " \ - --msgbox "${text}" 15 72 + whiptail --title " Warning " --msgbox "${text}" 15 72 exit 0 fi From 0a4a6feab0b30bcebbc2e0e7bd38f8138c9166bc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 13 Feb 2023 22:17:28 +0100 Subject: [PATCH 04/55] fix syntax --- home.admin/config.scripts/bonus.sphinxrelay.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.sphinxrelay.sh b/home.admin/config.scripts/bonus.sphinxrelay.sh index dcf6d9cc2..5348810b0 100755 --- a/home.admin/config.scripts/bonus.sphinxrelay.sh +++ b/home.admin/config.scripts/bonus.sphinxrelay.sh @@ -107,7 +107,7 @@ iOS support is native, Android needs Orbot" text="${text}\n At the moment your Sphinx Relay Server is just available within the local network - without transport encryption. -Local server for test & debug: ${publicURL}/app"#\n +Local server for test & debug: ${publicURL}/app#\n To enable easy reachability from the outside consider adding a IP2TOR Bridge and reconnect: MAINMENU > SUBSCRIBE > IP2TOR > SPHINX" From 52cb52271f483035e4f4f7ece1d76454223af63a Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Wed, 15 Feb 2023 08:49:21 +0000 Subject: [PATCH 05/55] lnproxy: fix api access through nginx (#3671) * lnproxy: fix api access through nginx * fix tor config and fit the menu * add to the menu and provision --- home.admin/00mainMenu.sh | 6 ++++++ home.admin/00settingsMenuServices.sh | 17 +++++++++++++++++ home.admin/_provision_.sh | 9 +++++++++ .../nginx/sites-available/lnproxy_ssl.conf | 2 +- .../nginx/sites-available/lnproxy_tor.conf | 2 +- .../nginx/sites-available/lnproxy_tor_ssl.conf | 2 +- home.admin/config.scripts/bonus.lnproxy.sh | 12 ++++++------ 7 files changed, 41 insertions(+), 9 deletions(-) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 11d469f73..33f7ae83a 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -132,6 +132,9 @@ fi if [ "${bos}" == "on" ]; then OPTIONS+=(BOS "Balance of Satoshis") fi +if [ "${lnproxy}" == "on" ]; then + OPTIONS+=(LNPROXY "lnproxy server") +fi if [ "${pyblock}" == "on" ]; then OPTIONS+=(PYBLOCK "PyBlock") fi @@ -307,6 +310,9 @@ case $CHOICE in ;; BOS) sudo /home/admin/config.scripts/bonus.bos.sh menu + ;; + LNPROXY) + sudo /home/admin/config.scripts/bonus.lnproxy.sh menu ;; PYBLOCK) sudo /home/admin/config.scripts/bonus.pyblock.sh menu diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 5714506b6..4f4141f4e 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -19,6 +19,7 @@ if [ ${#jam} -eq 0 ]; then jam="off"; fi if [ ${#LNBits} -eq 0 ]; then LNBits="off"; fi if [ ${#mempoolExplorer} -eq 0 ]; then mempoolExplorer="off"; fi if [ ${#bos} -eq 0 ]; then bos="off"; fi +if [ ${#lnproxy} -eq 0 ]; then lnproxy="off"; fi if [ ${#pyblock} -eq 0 ]; then pyblock="off"; fi if [ ${#thunderhub} -eq 0 ]; then thunderhub="off"; fi if [ ${#sphinxrelay} -eq 0 ]; then sphinxrelay="off"; fi @@ -68,6 +69,7 @@ if [ "${lightning}" == "lnd" ] || [ "${lnd}" == "on" ]; then OPTIONS+=(la 'LND LIT (loop, pool, faraday)' ${lit}) OPTIONS+=(gb 'LND LNDg (auto-rebalance, auto-fees)' ${lndg}) OPTIONS+=(oa 'LND Balance of Satoshis' ${bos}) + OPTIONS+=(lp 'LND lnproxy server' ${lnproxy}) OPTIONS+=(ya 'LND PyBLOCK' ${pyblock}) OPTIONS+=(ha 'LND ChannelTools (Fund Rescue)' ${chantools}) OPTIONS+=(xa 'LND Sphinx-Relay' ${sphinxrelay}) @@ -339,6 +341,21 @@ else echo "Balance of Satoshis setting unchanged." fi +# lnproxy process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "lp") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${lnproxy}" != "${choice}" ]; then + echo "lnproxy setting changed .." + anychange=1 + sudo -u admin /home/admin/config.scripts/bonus.lnproxy.sh ${choice} + source /mnt/hdd/raspiblitz.conf + if [ "${lnproxy}" = "on" ]; then + sudo -u admin /home/admin/config.scripts/bonus.lnproxy.sh menu + fi +else + echo "lnproxy setting unchanged." +fi + # PyBLOCK process choice choice="off"; check=$(echo "${CHOICES}" | grep -c "ya") if [ ${check} -eq 1 ]; then choice="on"; fi diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index c4aff3531..7c55cba4b 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -643,6 +643,15 @@ else echo "Provisioning Balance of Satoshis - keep default" >> ${logFile} fi +# LNPROXY +if [ "${lnproxy}" = "on" ]; then + echo "Provisioning lnproxy - run config script" >> ${logFile} + /home/admin/_cache.sh set message "Setup lnproxy" + sudo -u admin /home/admin/config.scripts/bonus.lnproxy.sh on >> ${logFile} 2>&1 +else + echo "Provisioning lnproxy - keep default" >> ${logFile} +fi + # thunderhub if [ "${thunderhub}" = "on" ]; then echo "Provisioning ThunderHub - run config script" >> ${logFile} diff --git a/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf b/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf index ab7d7009c..18eb359b5 100644 --- a/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf +++ b/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf @@ -14,7 +14,7 @@ server { error_log /var/log/nginx/error_lnproxy.log; location /api/ { - proxy_pass http://127.0.0.1:4747; + proxy_pass http://127.0.0.1:4747/; include /etc/nginx/snippets/ssl-proxy-params.conf; } diff --git a/home.admin/assets/nginx/sites-available/lnproxy_tor.conf b/home.admin/assets/nginx/sites-available/lnproxy_tor.conf index 9bfd1113c..8151e0b1f 100644 --- a/home.admin/assets/nginx/sites-available/lnproxy_tor.conf +++ b/home.admin/assets/nginx/sites-available/lnproxy_tor.conf @@ -13,7 +13,7 @@ server { error_log /var/log/nginx/error_lnproxy.log; location /api/ { - proxy_pass http://127.0.0.1:4747; + proxy_pass http://127.0.0.1:4747/; include /etc/nginx/snippets/ssl-proxy-params.conf; } diff --git a/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf b/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf index 65b998244..87d47840d 100644 --- a/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf +++ b/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf @@ -13,7 +13,7 @@ server { error_log /var/log/nginx/error_lnproxy.log; location /api/ { - proxy_pass http://127.0.0.1:4747; + proxy_pass http://127.0.0.1:4747/; include /etc/nginx/snippets/ssl-proxy-params.conf; } diff --git a/home.admin/config.scripts/bonus.lnproxy.sh b/home.admin/config.scripts/bonus.lnproxy.sh index fb26b2494..3e5e75a81 100644 --- a/home.admin/config.scripts/bonus.lnproxy.sh +++ b/home.admin/config.scripts/bonus.lnproxy.sh @@ -38,7 +38,7 @@ To use the API: curl -k https://${localip}:4749/api/{invoice}?routing_msat={budget}\n The Tor Hidden Service address to share for using the API: ${torAddress}/api -" 19 67 +" 20 70 sudo /home/admin/config.scripts/blitz.display.sh hide else # Info without Tor @@ -204,7 +204,6 @@ EOF sudo nginx -t sudo systemctl reload nginx - sudo ufw allow 4747 comment lnproxy-HTTP sudo ufw allow 4748 comment lnproxy-webui-HTTP sudo ufw allow 4749 comment lnproxy-HTTPS @@ -214,9 +213,11 @@ EOF /home/admin/config.scripts/blitz.conf.sh set lnproxy "on" echo "# API:" - echo "curl http://${localip}:4747/{your_invoice}?routing_msat={routing_budget}" + echo "curl http://127.0.0.1:4747/{your_invoice}?routing_msat={routing_budget}" + echo "curl -k https://${localip}:4749/api/{your_invoice}?routing_msat={routing_budget}" echo "# WebUI:" echo "http://${localip}:4748" + echo "https://${localip}:4749" echo "# More info at:" echo "https://github.com/lnproxy/lnproxy" @@ -231,15 +232,14 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then # remove systemd services sudo systemctl disable --now lnproxy - /etc/systemd/system/lnproxy.service + sudo rm -f /etc/systemd/system/lnproxy.service sudo systemctl disable --now lnproxy-webui - /etc/systemd/system/lnproxy-webui.service + sudo rm -f /etc/systemd/system/lnproxy-webui.service # remove Tor service /home/admin/config.scripts/tor.onion-service.sh off lnproxy # close ports on firewall - sudo ufw delete allow 4747 sudo ufw delete allow 4748 sudo ufw delete allow 4749 From 371d772c4c1da588d2010b0b5644054ac3695ac7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 7 Mar 2023 17:23:45 +0100 Subject: [PATCH 06/55] merge #3682 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50c48b543..d6ea21649 100644 --- a/README.md +++ b/README.md @@ -1366,7 +1366,7 @@ But if you want to build that image yourself - here is a quick guide: - Write the image to an SD card: [TUTORIAL](https://www.raspberrypi.org/documentation/installation/installing-images/README.md). - Add a file called `ssh` to the root of the SD card when mounted on your laptop to enable SSH login. - Newest RasperryOS release did remove the default username therefore you need to create an own user. Add a file called `userconf` next to the empty `ssh` file and add your specified userstring as followed: - Create a hashed password using command on linux `echo 'raspberry' | openssl passwd -6 -stdin` and copy the output allongside the username for example `pi:$6$6c.o/U6OkN3ST65b$7F3TIamnnQCwQT4h00Vp1mcVMdSg3 ams7yeVGfZbclcScEnRnw9tkgI9btalTCHFI84o3Pr3cDbdpbCXYTmF1` into the userconf file. See also https://www.raspberrypi.com/news/raspberry-pi-bullseye-update-april-2022/ + Create a hashed password using command on linux `echo 'raspberry' | openssl passwd -6 -stdin` and copy the output allongside the username for example `pi:$6$6c.o/U6OkN3ST65b$7F3TIamnnQCwQT4h00Vp1mcVMdSg3/ams7yeVGfZbclcScEnRnw9tkgI9btalTCHFI84o3Pr3cDbdpbCXYTmF1` into the userconf file. See also https://www.raspberrypi.com/news/raspberry-pi-bullseye-update-april-2022/ - Start the card on a Raspi and login via SSH with `ssh pi@[IP-OF-YOUR-RASPI]`. Password is `raspberry`. Now you are ready to start the SD card build script (check the code to see if the installation and config are OK for you). From 7639b753117bffc91c427866d14ea75add93f133 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:06:39 +0000 Subject: [PATCH 07/55] cln update to v23.02, backup-plugin update, add poetry (#3684) * cln backup-plugin update, add poetry * fix mkdir error, remove commented code, fmt #3677 * poetry and path fixes * add terminal feedback, format #3676 * detect the full name of the plugin * install pyln-client tqdm with pip * git-verify: add --keyid-format LONG to recognise if the signing key is not the main key * cln update to v23.02 * cln-grpc: add protobuf-compiler dep * rtl update to v0.13.6 and formatting * C-lightningREST update to v0.10.1 --- CHANGES.md | 5 +- home.admin/00settingsMenuBasics.sh | 1 + home.admin/99clMenu.sh | 2 +- home.admin/99lndMenu.sh | 2 +- home.admin/_commands.sh | 4 +- home.admin/config.scripts/blitz.git-verify.sh | 5 +- home.admin/config.scripts/bonus.rtl.sh | 123 ++++++------- home.admin/config.scripts/bonus.suez.sh | 18 +- home.admin/config.scripts/cl-plugin.backup.sh | 81 +++++---- .../config.scripts/cl-plugin.cln-grpc.sh | 12 +- .../cl-plugin.standard-python.sh | 24 +-- home.admin/config.scripts/cl.install.sh | 165 ++++++------------ home.admin/config.scripts/cl.rest.sh | 8 +- 13 files changed, 204 insertions(+), 246 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 694b4e701..fa2b552dd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,10 +14,11 @@ - New on WebUI: Jam (JoinMarket Web UI) v0.1.4 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.4) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) - Update: LND v0.15.5 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.15.5-beta) -- Update: Core Lightning v22.11.1 [details](https://github.com/ElementsProject/lightning/releases/tag/v22.11.1) +- Update: Core Lightning v23.02 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02) +- Update: C-lightningREST v0.10.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.1) - Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023) - Update: Lightning Terminal v0.8.4-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.8.4-alpha) -- Update: RTL v0.13.0 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.12.3) +- Update: RTL v0.13.6 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.13.6) - Update: Thunderhub v0.13.16 with balance sharing disabled [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.16) - Update: LNbits 0.9.6 [details](https://github.com/lnbits/lnbits-legend/releases/tag/0.9.6) - Update: BTCPayServer 1.7.5 (using postgres for new installs) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.7.5) diff --git a/home.admin/00settingsMenuBasics.sh b/home.admin/00settingsMenuBasics.sh index a2854060d..1535eba41 100755 --- a/home.admin/00settingsMenuBasics.sh +++ b/home.admin/00settingsMenuBasics.sh @@ -441,6 +441,7 @@ if [ "${clNode}" != "${choice}" ]; then fi # make sure that cln-grpc is on for the WebAPI + echo "# install the cln-grpc plugin" /home/admin/config.scripts/cl-plugin.cln-grpc.sh install /home/admin/config.scripts/cl-plugin.cln-grpc.sh on diff --git a/home.admin/99clMenu.sh b/home.admin/99clMenu.sh index ccbe06404..4769f6c54 100644 --- a/home.admin/99clMenu.sh +++ b/home.admin/99clMenu.sh @@ -94,7 +94,7 @@ case $CHOICE in fi cd /home/bitcoin/suez || exit 1 echo - sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez --client=c-lightning --client-args=--conf=${CLCONF} + sudo -u bitcoin poetry run ./suez --client=c-lightning --client-args=--conf=${CLCONF} echo echo "Press ENTER to return to main menu." read key diff --git a/home.admin/99lndMenu.sh b/home.admin/99lndMenu.sh index 576cdff7a..c98ded23d 100644 --- a/home.admin/99lndMenu.sh +++ b/home.admin/99lndMenu.sh @@ -118,7 +118,7 @@ case $CHOICE in /home/admin/config.scripts/bonus.suez.sh on fi cd /home/bitcoin/suez || exit 1 - sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez \ + sudo -u bitcoin poetry run ./suez \ --client-args=-n=${CHAIN} \ --client-args=--rpcserver=localhost:1${L2rpcportmod}009 echo diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 5c2a67013..7c575f799 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -570,10 +570,10 @@ function suez() { clear echo "# Showing the channels of ${lightning} ${chain}net - consider reducing the font size (press CTRL- or CMD-)" if [ ${lightning} = cl ]; then - sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez \ + sudo -u bitcoin poetry run ./suez \ --client=c-lightning --client-args=--conf=${CLCONF} elif [ ${lightning} = lnd ]; then - sudo -u bitcoin /home/bitcoin/.local/bin/poetry run ./suez \ + sudo -u bitcoin poetry run ./suez \ --client-args=-n=${CHAIN} \ --client-args=--rpcserver=localhost:1${L2rpcportmod}009 fi diff --git a/home.admin/config.scripts/blitz.git-verify.sh b/home.admin/config.scripts/blitz.git-verify.sh index e3a6d9abd..5a58dcc13 100644 --- a/home.admin/config.scripts/blitz.git-verify.sh +++ b/home.admin/config.scripts/blitz.git-verify.sh @@ -30,10 +30,9 @@ PGPsigner="$1" PGPpubkeyLink="$2" PGPpubkeyFingerprint="$3" - wget -O /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc "${PGPpubkeyLink}" gpg --import --import-options show-only /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc -fingerprint=$(gpg --show-keys /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc 2>/dev/null | grep "${PGPpubkeyFingerprint}" -c) +fingerprint=$(gpg --show-keys --keyid-format LONG /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc 2>/dev/null | grep "${PGPpubkeyFingerprint}" -c) if [ "${fingerprint}" -lt 1 ]; then echo echo "# WARNING --> the PGP fingerprint is not as expected for ${PGPsigner}" >&2 @@ -65,7 +64,7 @@ echo cat "$_temp" echo "# goodSignature(${goodSignature})" -correctKey=$(tr -d " \t\n\r" < "$_temp" | grep "${PGPpubkeyFingerprint}" -c) +correctKey=$(tr -d " \t\n\r" <"$_temp" | grep "${PGPpubkeyFingerprint}" -c) echo "# correctKey(${correctKey})" if [ "${correctKey}" -lt 1 ] || [ "${goodSignature}" -lt 1 ]; then diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index a32269ae1..b898d6098 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/Ride-The-Lightning/RTL/releases -RTLVERSION="v0.13.0" +RTLVERSION="v0.13.6" # check and load raspiblitz config # to know which network is running @@ -63,10 +63,10 @@ if [ "$1" = "status" ] || [ "$1" = "menu" ]; then localip=$(hostname -I | awk '{print $1}') toraddress=$(sudo cat /mnt/hdd/tor/${netprefix}${typeprefix}RTL/hostname 2>/dev/null) fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) - RTLHTTPS=$((RTLHTTP+1)) + RTLHTTPS=$((RTLHTTP + 1)) if [ "$1" = "status" ]; then - + echo "version='${RTLVERSION}'" echo "installed='${isInstalled}'" echo "localIP='${localip}'" @@ -96,7 +96,7 @@ if [ "$1" = "menu" ]; then sudo /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" whiptail --title "Ride The Lightning (RTL - $LNTYPE - $CHAIN)" --msgbox "Open in your local web browser: http://${localip}:${RTLHTTP}\n -https://${localip}:$((RTLHTTP+1)) with Fingerprint: +https://${localip}:$((RTLHTTP + 1)) with Fingerprint: ${fingerprint}\n Use your Password B to login.\n Hidden Service address for Tor Browser (QRcode on LCD):\n${toraddress} @@ -107,7 +107,7 @@ Hidden Service address for Tor Browser (QRcode on LCD):\n${toraddress} else whiptail --title "Ride The Lightning (RTL - $LNTYPE - $CHAIN)" --msgbox "Open in your local web browser & accept self-signed cert: http://${localip}:${RTLHTTP}\n -https://${localip}:$((RTLHTTP+1)) with Fingerprint: +https://${localip}:$((RTLHTTP + 1)) with Fingerprint: ${fingerprint}\n Use your Password B to login.\n Activate Tor to access the web interface from outside your local network. @@ -117,7 +117,6 @@ Activate Tor to access the web interface from outside your local network. exit 0 fi - ######################################## # INSTALL (just user, code & compile) ######################################## @@ -125,7 +124,7 @@ fi if [ "$1" = "install" ]; then # check if already installed - if [ -f /home/rtl/RTL/LICENSE ];then + if [ -f /home/rtl/RTL/LICENSE ]; then echo "# RTL already installed - skipping" exit 0 fi @@ -136,7 +135,7 @@ if [ "$1" = "install" ]; then /home/admin/config.scripts/bonus.nodejs.sh on # create rtl user (one for all instances) - if [ $(compgen -u | grep -c rtl) -eq 0 ];then + if [ $(compgen -u | grep -c rtl) -eq 0 ]; then sudo adduser --disabled-password --gecos "" rtl || exit 1 fi @@ -229,7 +228,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then fi # make sure softwarte is installed - if [ -f /home/rtl/RTL/LICENSE ];then + if [ -f /home/rtl/RTL/LICENSE ]; then echo "# OK - the RTL code is already present" else echo "# install of codebase is needed first" @@ -241,8 +240,8 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# Make sure symlink to central app-data directory exists" if ! [[ -L "/home/rtl/.lnd" ]]; then - sudo rm -rf "/home/rtl/.lnd" 2>/dev/null # not a symlink.. delete it silently - sudo ln -s "/mnt/hdd/app-data/lnd/" "/home/rtl/.lnd" # and create symlink + sudo rm -rf "/home/rtl/.lnd" 2>/dev/null # not a symlink.. delete it silently + sudo ln -s "/mnt/hdd/app-data/lnd/" "/home/rtl/.lnd" # and create symlink fi if [ "${LNTYPE}" == "lnd" ]; then @@ -253,7 +252,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# Updating Firewall" sudo ufw allow ${RTLHTTP} comment "${systemdService} HTTP" - sudo ufw allow $((RTLHTTP+1)) comment "${systemdService} HTTPS" + sudo ufw allow $((RTLHTTP + 1)) comment "${systemdService} HTTPS" echo # make sure config directory exists @@ -314,7 +313,7 @@ WantedBy=multi-user.target # Hidden Service for RTL if Tor is active if [ "${runBehindTor}" = "on" ]; then # make sure to keep in sync with tor.network.sh script - /home/admin/config.scripts/tor.onion-service.sh ${netprefix}${typeprefix}RTL 80 $((RTLHTTP+2)) 443 $((RTLHTTP+3)) + /home/admin/config.scripts/tor.onion-service.sh ${netprefix}${typeprefix}RTL 80 $((RTLHTTP + 2)) 443 $((RTLHTTP + 3)) fi # nginx configuration @@ -323,11 +322,11 @@ WantedBy=multi-user.target sudo cp /home/admin/assets/nginx/sites-available/rtl_tor.conf /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor.conf sudo cp /home/admin/assets/nginx/sites-available/rtl_tor_ssl.conf /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor_ssl.conf sudo sed -i "s/3000/$RTLHTTP/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_ssl.conf - sudo sed -i "s/3001/$((RTLHTTP+1))/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_ssl.conf + sudo sed -i "s/3001/$((RTLHTTP + 1))/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_ssl.conf sudo sed -i "s/3000/$RTLHTTP/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor.conf - sudo sed -i "s/3002/$((RTLHTTP+2))/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor.conf + sudo sed -i "s/3002/$((RTLHTTP + 2))/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor.conf sudo sed -i "s/3000/$RTLHTTP/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor_ssl.conf - sudo sed -i "s/3003/$((RTLHTTP+3))/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor_ssl.conf + sudo sed -i "s/3003/$((RTLHTTP + 3))/g" /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor_ssl.conf sudo ln -sf /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_ssl.conf /etc/nginx/sites-enabled/ sudo ln -sf /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor.conf /etc/nginx/sites-enabled/ sudo ln -sf /etc/nginx/sites-available/${netprefix}${typeprefix}rtl_tor_ssl.conf /etc/nginx/sites-enabled/ @@ -345,7 +344,7 @@ WantedBy=multi-user.target echo "# OK - the ${systemdService}.service is now enabled & started" echo "# Monitor with: sudo journalctl -f -u ${systemdService}" - # needed for API/WebUI as signal that install ran thru + # needed for API/WebUI as signal that install ran thru echo "result='OK'" exit 0 fi @@ -379,8 +378,8 @@ if [ "$1" = "connect-services" ]; then echo "# Add the rtl user to the lit group" sudo /usr/sbin/usermod --append --groups lit rtl echo "# Symlink the lit-loop.macaroon" - sudo rm -rf "/home/rtl/.loop" # delete symlink - sudo ln -s "/home/lit/.loop/" "/home/rtl/.loop" # create symlink + sudo rm -rf "/home/rtl/.loop" # delete symlink + sudo ln -s "/home/lit/.loop/" "/home/rtl/.loop" # create symlink echo "# Make the loop macaroon group readable" sudo chmod 640 /home/rtl/.loop/mainnet/macaroons.db elif [ "${loop}" = "on" ]; then @@ -388,8 +387,8 @@ if [ "$1" = "connect-services" ]; then echo "# Add the rtl user to the loop group" sudo /usr/sbin/usermod --append --groups loop rtl echo "# Symlink the loop.macaroon" - sudo rm -rf "/home/rtl/.loop" # delete symlink - sudo ln -s "/home/loop/.loop/" "/home/rtl/.loop" # create symlink + sudo rm -rf "/home/rtl/.loop" # delete symlink + sudo ln -s "/home/loop/.loop/" "/home/rtl/.loop" # create symlink echo "# Make the loop macaroon group readable" sudo chmod 640 /home/rtl/.loop/mainnet/macaroons.db else @@ -428,14 +427,14 @@ if [ "$1" = "prestart" ]; then # determine correct loop swap server port (lit over loop single) if [ "${lit}" = "on" ]; then - echo "# use lit loop port" - SWAPSERVERPORT=8443 + echo "# use lit loop port" + SWAPSERVERPORT=8443 elif [ "${loop}" = "on" ]; then - echo "# use loop single instance port" - SWAPSERVERPORT=8081 + echo "# use loop single instance port" + SWAPSERVERPORT=8081 else - echo "# No lit or loop single detected" - SWAPSERVERPORT="" + echo "# No lit or loop single detected" + SWAPSERVERPORT="" fi # prepare RTL-Config.json file @@ -455,20 +454,20 @@ if [ "$1" = "prestart" ]; then # LND changes of config if [ "${LNTYPE}" == "lnd" ]; then echo "# LND Config" - cat /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json | \ - jq ".port = \"${RTLHTTP}\"" | \ - jq ".multiPass = \"${RPCPASSWORD}\"" | \ - jq ".multiPassHashed = \"\"" | \ - jq ".nodes[0].lnNode = \"${hostname}\"" | \ - jq ".nodes[0].lnImplementation = \"LND\"" | \ - jq ".nodes[0].Authentication.macaroonPath = \"/home/rtl/.lnd/data/chain/${network}/${CHAIN}/\"" | \ - jq ".nodes[0].Authentication.configPath = \"/home/rtl/.lnd/${netprefix}lnd.conf\"" | \ - jq ".nodes[0].Authentication.swapMacaroonPath = \"/home/rtl/.loop/${CHAIN}/\"" | \ - jq ".nodes[0].Authentication.boltzMacaroonPath = \"/home/rtl/.boltz-lnd/macaroons/\"" | \ - jq ".nodes[0].Settings.userPersona = \"OPERATOR\"" | \ - jq ".nodes[0].Settings.lnServerUrl = \"https://127.0.0.1:${portprefix}8080\"" | \ - jq ".nodes[0].Settings.channelBackupPath = \"/mnt/hdd/app-data/rtl/${systemdService}-SCB-backup-$hostname\"" | \ - jq ".nodes[0].Settings.swapServerUrl = \"https://127.0.0.1:${SWAPSERVERPORT}\"" > /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json.tmp + cat /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json | + jq ".port = \"${RTLHTTP}\"" | + jq ".multiPass = \"${RPCPASSWORD}\"" | + jq ".multiPassHashed = \"\"" | + jq ".nodes[0].lnNode = \"${hostname}\"" | + jq ".nodes[0].lnImplementation = \"LND\"" | + jq ".nodes[0].Authentication.macaroonPath = \"/home/rtl/.lnd/data/chain/${network}/${CHAIN}/\"" | + jq ".nodes[0].Authentication.configPath = \"/home/rtl/.lnd/${netprefix}lnd.conf\"" | + jq ".nodes[0].Authentication.swapMacaroonPath = \"/home/rtl/.loop/${CHAIN}/\"" | + jq ".nodes[0].Authentication.boltzMacaroonPath = \"/home/rtl/.boltz-lnd/macaroons/\"" | + jq ".nodes[0].Settings.userPersona = \"OPERATOR\"" | + jq ".nodes[0].Settings.lnServerUrl = \"https://127.0.0.1:${portprefix}8080\"" | + jq ".nodes[0].Settings.channelBackupPath = \"/mnt/hdd/app-data/rtl/${systemdService}-SCB-backup-$hostname\"" | + jq ".nodes[0].Settings.swapServerUrl = \"https://127.0.0.1:${SWAPSERVERPORT}\"" >/mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json.tmp mv /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json.tmp /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json fi @@ -476,20 +475,20 @@ if [ "$1" = "prestart" ]; then # https://github.com/Ride-The-Lightning/RTL/blob/master/docs/C-Lightning-setup.md if [ "${LNTYPE}" == "cl" ]; then echo "# CL Config" - cat /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json | \ - jq ".port = \"${RTLHTTP}\"" | \ - jq ".multiPass = \"${RPCPASSWORD}\"" | \ - jq ".multiPassHashed = \"\"" | \ - jq ".nodes[0].lnNode = \"${hostname}\"" | \ - jq ".nodes[0].lnImplementation = \"CLT\"" | \ - jq ".nodes[0].Authentication.macaroonPath = \"/home/bitcoin/c-lightning-REST/${CLNETWORK}/certs\"" | \ - jq ".nodes[0].Authentication.configPath = \"${CLCONF}\"" | \ - jq ".nodes[0].Authentication.swapMacaroonPath = \"/home/rtl/.loop/${CHAIN}/\"" | \ - jq ".nodes[0].Authentication.boltzMacaroonPath = \"/home/rtl/.boltz-lnd/macaroons/\"" | \ - jq ".nodes[0].Settings.userPersona = \"OPERATOR\"" | \ - jq ".nodes[0].Settings.lnServerUrl = \"https://127.0.0.1:${portprefix}6100\"" | \ - jq ".nodes[0].Settings.channelBackupPath = \"/mnt/hdd/app-data/rtl/${systemdService}-SCB-backup-$hostname\"" | \ - jq ".nodes[0].Settings.swapServerUrl = \"https://127.0.0.1:${SWAPSERVERPORT}\"" > /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json.tmp + cat /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json | + jq ".port = \"${RTLHTTP}\"" | + jq ".multiPass = \"${RPCPASSWORD}\"" | + jq ".multiPassHashed = \"\"" | + jq ".nodes[0].lnNode = \"${hostname}\"" | + jq ".nodes[0].lnImplementation = \"CLT\"" | + jq ".nodes[0].Authentication.macaroonPath = \"/home/bitcoin/c-lightning-REST/${CLNETWORK}/certs\"" | + jq ".nodes[0].Authentication.configPath = \"${CLCONF}\"" | + jq ".nodes[0].Authentication.swapMacaroonPath = \"/home/rtl/.loop/${CHAIN}/\"" | + jq ".nodes[0].Authentication.boltzMacaroonPath = \"/home/rtl/.boltz-lnd/macaroons/\"" | + jq ".nodes[0].Settings.userPersona = \"OPERATOR\"" | + jq ".nodes[0].Settings.lnServerUrl = \"https://127.0.0.1:${portprefix}6100\"" | + jq ".nodes[0].Settings.channelBackupPath = \"/mnt/hdd/app-data/rtl/${systemdService}-SCB-backup-$hostname\"" | + jq ".nodes[0].Settings.swapServerUrl = \"https://127.0.0.1:${SWAPSERVERPORT}\"" >/mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json.tmp mv /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json.tmp /mnt/hdd/app-data/rtl/${systemdService}/RTL-Config.json fi @@ -546,9 +545,9 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then fi # only if 'purge' is an additional parameter (other instances/services might need this) - if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then + if [ "$(echo "$@" | grep -c purge)" -gt 0 ]; then home/admin/config.scripts/bonus.rtl.sh uninstall - if [ $LNTYPE = cl ];then + if [ $LNTYPE = cl ]; then /home/admin/config.scripts/cl.rest.sh off ${CHAIN} fi echo "# Delete all configs" @@ -557,14 +556,13 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then # close ports on firewall sudo ufw deny "${RTLHTTP}" - sudo ufw deny $((RTLHTTP+1)) + sudo ufw deny $((RTLHTTP + 1)) - # needed for API/WebUI as signal that install ran thru + # needed for API/WebUI as signal that install ran thru echo "result='OK'" exit 0 fi - if [ "$1" = "update" ]; then echo "# UPDATING RTL" cd /home/rtl/RTL || exit 1 @@ -616,7 +614,10 @@ if [ "$1" = "update" ]; then echo "# OK - RTL install looks good" echo fi - currentRTLcommit=$(cd /home/rtl/RTL; git describe --tags) + currentRTLcommit=$( + cd /home/rtl/RTL + git describe --tags + ) echo "# Updated RTL to $currentRTLcommit" else echo "# Unknown option: $updateOption" diff --git a/home.admin/config.scripts/bonus.suez.sh b/home.admin/config.scripts/bonus.suez.sh index 61bae1f09..011c68e55 100644 --- a/home.admin/config.scripts/bonus.suez.sh +++ b/home.admin/config.scripts/bonus.suez.sh @@ -33,17 +33,17 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then cd /home/bitcoin || exit 1 - # dependency - sudo -u bitcoin curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py\ - | sudo -u bitcoin python - + # poetry + sudo pip3 install --upgrade pip + sudo pip3 install poetry # download source code sudo -u bitcoin git clone https://github.com/prusnak/suez.git cd suez || exit 1 sudo -u bitcoin git reset --hard $SUEZVERSION sudo -u bitcoin /home/admin/config.scripts/blitz.git-verify.sh \ - "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" || exit 1 - sudo -u bitcoin /home/bitcoin/.local/bin/poetry install + "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" || exit 1 + sudo -u bitcoin poetry install # setting value in raspi blitz config /home/admin/config.scripts/blitz.conf.sh set suez "on" @@ -74,8 +74,8 @@ if [ "$1" = "update" ]; then echo "# UPDATE SUEZ" cd /home/bitcoin || exit 1 # dependency - sudo -u bitcoin curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py\ - | sudo -u bitcoin python - + sudo pip3 install --upgrade pip + sudo pip3 install poetry # download source code if [ -d suez ]; then sudo -u bitcoin git clone https://github.com/prusnak/suez.git @@ -83,8 +83,8 @@ if [ "$1" = "update" ]; then cd suez || exit 1 sudo -u bitcoin git pull sudo -u bitcoin /home/admin/config.scripts/blitz.git-verify.sh \ - "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" || exit 1 - sudo -u bitcoin /home/bitcoin/.local/bin/poetry install + "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" || exit 1 + sudo -u bitcoin poetry install echo "# Updated to the latest in https://github.com/prusnak/suez/commits/master" exit 0 fi diff --git a/home.admin/config.scripts/cl-plugin.backup.sh b/home.admin/config.scripts/cl-plugin.backup.sh index 1c87357aa..5b3f4b1a7 100644 --- a/home.admin/config.scripts/cl-plugin.backup.sh +++ b/home.admin/config.scripts/cl-plugin.backup.sh @@ -1,6 +1,6 @@ #!/bin/bash -function help(){ +function help() { echo echo "Install the backup plugin for Core Lightning" echo "Replicates the lightningd.sqlite3 database on the SDcard" @@ -16,11 +16,10 @@ function help(){ } # https://github.com/lightningd/plugins/commits/master/backup -# use the version beore the migration to poetry -pinnedVersion="4d3560b129b12cba0381fff0b1e30ac32ef84106" +pinnedVersion="30003279e35e5931fc85d7e6211ea4de6f9554d7" # command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then help fi @@ -38,25 +37,32 @@ function install() { sudo -u bitcoin git pull sudo -u bitcoin git reset --hard ${pinnedVersion} || exit 1 - if [ $($lightningcli_alias plugin list 2>/dev/null | grep -c "${plugin}") -eq 0 ];then + if [ $($lightningcli_alias plugin list 2>/dev/null | grep -c "/${plugin}") -eq 0 ]; then echo "# Checking dependencies" - sudo -u bitcoin pip install --user -r ${plugindir}/${plugin}/requirements.txt 1>/dev/null - if [ $(echo $PATH | grep -c "/home/bitcoin/.local/bin") -eq 0 ];then - export PATH=$PATH:/home/bitcoin/.local/bin - echo "PATH=\$PATH:/home/bitcoin/.local/bin" | sudo tee -a /etc/profile - fi + # upgrade pip + sudo pip3 install --upgrade pip + + # pip dependencies + sudo -u bitcoin pip3 install pyln-client tqdm + + # poetry + sudo pip3 install poetry || exit 1 + cd ${plugindir}/backup/ || exit 1 + sudo -u bitcoin poetry install + sudo chmod +x ${plugindir}/${plugin}/${plugin}.py + # symlink to the default plugin dir - if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/backup.py ];then + if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/backup.py ]; then sudo ln -s ${plugindir}/backup/backup.py \ - /home/bitcoin/${netprefix}cl-plugins-enabled/ + /home/bitcoin/${netprefix}cl-plugins-enabled/ fi else echo "# The ${plugin} plugin is already loaded" fi } -if [ "$1" = on ];then +if [ "$1" = on ]; then install @@ -64,27 +70,30 @@ if [ "$1" = on ];then sudo systemctl stop ${netprefix}lightningd # don't overwrite old backup - if [ -f /home/bitcoin/${netprefix}lightningd.sqlite3.backup ];then + if [ -f /home/bitcoin/${netprefix}lightningd.sqlite3.backup ]; then echo "# Backup the existing old backup on the SDcard" now=$(date +"%Y_%m_%d_%H%M%S") sudo mv /home/bitcoin/${netprefix}lightningd.sqlite3.backup \ - /home/bitcoin/${netprefix}lightningd.sqlite3.backup.${now} || exit 1 + /home/bitcoin/${netprefix}lightningd.sqlite3.backup.${now} || exit 1 fi # always re-init plugin - if sudo ls /home/bitcoin/.lightning/${CLNETWORK}/backup.lock; then + if sudo ls /home/bitcoin/.lightning/${CLNETWORK}/backup.lock 2>/dev/null; then sudo rm /home/bitcoin/.lightning/${CLNETWORK}/backup.lock fi # https://github.com/lightningd/plugins/tree/master/backup#setup echo "# Initialize the backup plugin" - sudo -u bitcoin ${plugindir}/backup/backup-cli init\ - --lightning-dir /home/bitcoin/.lightning/${CLNETWORK} \ - file:///home/bitcoin/${netprefix}lightningd.sqlite3.backup + cd ${plugindir}/backup/ || exit 1 + sudo -u bitcoin poetry run ./backup-cli init --lightning-dir /home/bitcoin/.lightning/${CLNETWORK} \ + file:///home/bitcoin/${netprefix}lightningd.sqlite3.backup if [ $(crontab -u admin -l | grep -c "backup-compact $CHAIN") -eq 0 ]; then echo "Add weekly backup-compact as a cronjob" cronjob="@weekly /home/admin/config.scripts/cl-plugin.backup.sh backup-compact $CHAIN" - (crontab -u admin -l; echo "$cronjob" ) | crontab -u admin - + ( + crontab -u admin -l + echo "$cronjob" + ) | crontab -u admin - fi echo "# The crontab for admin now is:" crontab -u admin -l @@ -96,19 +105,21 @@ if [ "$1" = on ];then echo "# Started the ${netprefix}lightningd.service" fi - -elif [ "$1" = off ]; then +elif + [ "$1" = off ] +then echo "# Removing the backup plugin" sudo rm -f /home/bitcoin/${netprefix}cl-plugins-enabled/backup.py echo "# Backup the existing old backup on the SDcard" now=$(date +"%Y_%m_%d_%H%M%S") sudo mv /home/bitcoin/${netprefix}lightningd.sqlite3.backup \ - /home/bitcoin/${netprefix}lightningd.sqlite3.backup.${now} + /home/bitcoin/${netprefix}lightningd.sqlite3.backup.${now} echo "# Removing the backup.lock file" - sudo rm -f /home/bitcoin/.lightning/${CLNETWORK}/backup.lock + sudo rm -f /home/bitcoin/.lightning/${CLNETWORK}/backup.lock - -elif [ "$1" = restore ];then +elif + [ "$1" = restore ] +then install @@ -118,21 +129,22 @@ elif [ "$1" = restore ];then sudo systemctl stop ${netprefix}lightningd # https://github.com/lightningd/plugins/tree/master/backup#restoring-a-backup - # ./backup-cli restore file:///mnt/external/location ~/.lightning/bitcoin/lightningd.sqlite3 + # poetry run ./backup-cli restore file:///mnt/external/location ~/.lightning/bitcoin/lightningd.sqlite3 # make sure to not overwrite old database - if sudo ls /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3;then + if sudo ls /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3; then now=$(date +"%Y_%m_%d_%H%M%S") echo "# Backup the existing old database on the disk" sudo cp /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 \ - /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3.backup.${now} || exit 1 - if [ "$(echo "$@" | grep -c "force")" -gt 0 ];then + /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3.backup.${now} || exit 1 + if [ "$(echo "$@" | grep -c "force")" -gt 0 ]; then sudo rm /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 fi fi # restore - sudo -u bitcoin ${plugindir}/backup/backup-cli restore \ + cd ${plugindir}/backup/ || exit 1 + sudo -u bitcoin poetry run ./backup-cli restore \ file:///home/bitcoin/${netprefix}lightningd.sqlite3.backup \ /home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3 @@ -143,8 +155,9 @@ elif [ "$1" = restore ];then fi fi - -elif [ "$1" = backup-compact ];then +elif + [ "$1" = backup-compact ] +then # https://github.com/lightningd/plugins/tree/master/backup#performing-backup-compaction dbPath="/home/bitcoin/.lightning/${CLNETWORK}/lightningd.sqlite3" backupPath="/home/bitcoin/${netprefix}lightningd.sqlite3.backup" @@ -154,7 +167,7 @@ elif [ "$1" = backup-compact ];then echo "$dbSize MB $dbPath" backupSize=$(sudo du -m "${backupPath}" | awk '{print $1}') echo "$backupSize MB $backupPath" - if [ "$backupSize" -gt $((dbSize+200)) ] ; then + if [ "$backupSize" -gt $((dbSize + 200)) ]; then echo "# The backup is 200MB+ larger than the db, running '${netprefix}lightning-cli backup-compact' ..." $lightningcli_alias backup-compact else diff --git a/home.admin/config.scripts/cl-plugin.cln-grpc.sh b/home.admin/config.scripts/cl-plugin.cln-grpc.sh index 00dbe4bb4..5c652ea34 100644 --- a/home.admin/config.scripts/cl-plugin.cln-grpc.sh +++ b/home.admin/config.scripts/cl-plugin.cln-grpc.sh @@ -1,7 +1,7 @@ #!/bin/bash # command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo echo "Install the cln-grpc plugin for CLN" echo "Usage:" @@ -31,10 +31,12 @@ function buildGRPCplugin() { echo "# - Build the cln-grpc plugin" if [ ! -f /home/bitcoin/cl-plugins-available/cln-grpc ]; then # check if the source code is present - if [ ! -d /home/bitcoin/lightning/plugins/grpc-plugin ];then + if [ ! -d /home/bitcoin/lightning/plugins/grpc-plugin ]; then echo "# - install Core Lightning ..." /home/admin/config.scripts/cl.install.sh install || exit 1 fi + echo "# install dependencies" + sudo apt-get install protobuf-compiler -y echo "# rust for cln-grpc, includes rustfmt" sudo -u bitcoin curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo -u bitcoin sh -s -- -y cd /home/bitcoin/lightning/plugins/grpc-plugin || exit 1 @@ -61,7 +63,7 @@ function switchOn() { # symlink to plugin directory echo "# symlink cln-grpc to /home/bitcoin/${netprefix}cl-plugins-enabled/" # delete old symlink - sudo rm /home/bitcoin/${netprefix}cl-plugins-enabled/cln-grpc + sudo rm -f /home/bitcoin/${netprefix}cl-plugins-enabled/cln-grpc sudo ln -s /home/bitcoin/cl-plugins-available/cln-grpc /home/bitcoin/${netprefix}cl-plugins-enabled/ # blitz.conf.sh set [key] [value] [?conffile] @@ -102,7 +104,7 @@ elif [ "$1" = on ]; then elif [ "$1" = off ]; then sed -i "/^grpc-port/d" "${CLCONF}" sudo rm -rf /home/bitcoin/${netprefix}cl-plugins-enabled/cln-grpc - if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then + if [ "$(echo "$@" | grep -c purge)" -gt 0 ]; then sudo rm -rf /home/bitcoin/cl-plugins-available/cln-grpc fi /home/admin/config.scripts/blitz.conf.sh set "${netprefix}clnGRPCport" "off" @@ -113,7 +115,7 @@ elif [ "$1" = off ]; then exit 0 elif [ "$1" = update ]; then - if [ "$(echo "$@" | grep -c source)" -gt 0 ];then + if [ "$(echo "$@" | grep -c source)" -gt 0 ]; then cd /home/bitcoin/lightning/ || exit 1 sudo -u bitcoin git pull fi diff --git a/home.admin/config.scripts/cl-plugin.standard-python.sh b/home.admin/config.scripts/cl-plugin.standard-python.sh index 4bbf9f48f..0cec55c67 100644 --- a/home.admin/config.scripts/cl-plugin.standard-python.sh +++ b/home.admin/config.scripts/cl-plugin.standard-python.sh @@ -1,7 +1,7 @@ #!/bin/bash # command info -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo echo "Install and show the output of the chosen plugin for Core Lightning" echo "Usage:" @@ -16,7 +16,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ];then exit 1 fi -if [ "$1" = "on" ];then +if [ "$1" = "on" ]; then source <(/home/admin/config.scripts/network.aliases.sh getvars cl $3) @@ -29,27 +29,27 @@ if [ "$1" = "on" ];then fi # enable - if [ "$(echo "$@" | grep -c "persist")" -gt 0 ];then - if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/${plugin}.py ];then + if [ "$(echo "$@" | grep -c "persist")" -gt 0 ]; then + if [ ! -L /home/bitcoin/${netprefix}cl-plugins-enabled/${plugin}.py ]; then echo "# Symlink to /home/bitcoin/${netprefix}cl-plugins-enabled" sudo ln -s /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py \ - /home/bitcoin/${netprefix}cl-plugins-enabled - + /home/bitcoin/${netprefix}cl-plugins-enabled + source <(/home/admin/_cache.sh get state) if [ "${state}" == "ready" ]; then echo "# Restart the ${netprefix}lightningd.service to activate the ${plugin} plugin" sudo systemctl restart ${netprefix}lightningd fi fi - + else - if [ $($lightningcli_alias | grep -c "${plugin}") -eq 0 ];then + if [ $($lightningcli_alias | grep -c "/${plugin}") -eq 0 ]; then echo "# Just start the ${plugin} plugin" sudo -u bitcoin pip install -r /home/bitcoin/cl-plugins-available/plugins/${plugin}/requirements.txt $lightningcli_alias plugin start /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py fi fi - + echo echo "Node URI:" ln_getinfo=$($lightningcli_alias -H getinfo 2>/dev/null) @@ -60,12 +60,12 @@ if [ "$1" = "on" ];then echo echo "# Running:" echo "${netprefix}lightning-cli ${plugin}" - echo + echo $lightningcli_alias ${plugin} echo - if [ "$(echo "$@" | grep -c "runonce")" -gt 0 ];then + if [ "$(echo "$@" | grep -c "runonce")" -gt 0 ]; then $lightningcli_alias plugin stop /home/bitcoin/cl-plugins-available/plugins/${plugin}/${plugin}.py fi -fi \ No newline at end of file +fi diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index 9df067631..c7a4f67d3 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -2,19 +2,23 @@ # https://lightning.readthedocs.io/ # https://github.com/ElementsProject/lightning/releases -CLVERSION=v22.11.1 +CLVERSION=v23.02 # install the latest master by using the last commit id # https://github.com/ElementsProject/lightning/commit/master # CLVERSION="063366ed7e3b7cc12a8d1681acc2b639cf07fa23" +PGPsigner="endothermicdev" +PGPpubkeyLink="https://github.com/${PGPsigner}.gpg" +PGPpubkeyFingerprint="8F55EE750D950E3E" + # https://github.com/ElementsProject/lightning/tree/master/contrib/keys -PGPsigner="cdecker" # rustyrussel D9200E6CD1ADB8F1 # cdecker A26D6D9FE088ED58 # niftynei BFF0F67810C1EED1 -PGPpubkeyLink="https://raw.githubusercontent.com/ElementsProject/lightning/master/contrib/keys/${PGPsigner}.txt" -PGPpubkeyFingerprint="A26D6D9FE088ED58" +# PGPsigner="cdecker" # rustyrussel D9200E6CD1ADB8F1 # cdecker A26D6D9FE088ED58 # niftynei BFF0F67810C1EED1 +# PGPpubkeyLink="https://raw.githubusercontent.com/ElementsProject/lightning/master/contrib/keys/${PGPsigner}.txt" +# PGPpubkeyFingerprint="A26D6D9FE088ED58" # help -if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then echo echo "Core Lightning install script" echo "The default version is: ${CLVERSION}" @@ -30,30 +34,28 @@ if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then exit 1 fi -function installDependencies() -{ +function installDependencies() { echo "- installDependencies()" # from https://lightning.readthedocs.io/INSTALL.html#to-build-on-ubuntu sudo apt-get install -y \ - autoconf automake build-essential git libtool libgmp-dev \ - libsqlite3-dev python3 net-tools zlib1g-dev libsodium-dev \ - gettext + autoconf automake build-essential git libtool libgmp-dev \ + libsqlite3-dev python3 net-tools zlib1g-dev libsodium-dev \ + gettext # additional requirements sudo apt-get install -y postgresql libpq-dev # upgrade pip sudo pip3 install --upgrade pip sudo -u bitcoin pip install mako # poetry - sudo -u bitcoin pip3 install --user poetry - if ! grep -Eq '^PATH="$HOME/.local/bin:$PATH"' /mnt/hdd/raspiblitz.conf; then + sudo pip3 install poetry + if ! grep -Eq '^PATH="$HOME/.local/bin:$PATH"' /home/bitcoin/.profile; then echo 'PATH="$HOME/.local/bin:$PATH"' | sudo tee -a /home/bitcoin/.profile fi export PATH="home/bitcoin/.local/bin:$PATH" - sudo -u bitcoin /home/bitcoin/.local/bin/poetry install + sudo -u bitcoin poetry install } -function buildAndInstallCLbinaries() -{ +function buildAndInstallCLbinaries() { echo "- Configuring EXPERIMENTAL_FEATURES enabled" echo sudo -u bitcoin ./configure --enable-experimental-features @@ -74,7 +76,7 @@ echo "# Running: 'cl.install.sh $*'" if [ "$1" = "update" ] && [ $# -gt 1 ]; then CLVERSION=$2 if curl --output /dev/null --silent --head --fail \ - https://github.com/ElementsProject/lightning/releases/tag/${CLVERSION};then + https://github.com/ElementsProject/lightning/releases/tag/${CLVERSION}; then echo "# OK version exists at https://github.com/ElementsProject/lightning/releases/tag/${CLVERSION}" else echo "# ${CLVERSION} does not exist" @@ -86,15 +88,15 @@ fi # check for PR if testPR if [ "$1" = "testPR" ]; then - if [ $# -gt 1 ]; then - PRnumber=$2 - else - echo "# Need PRnumber as the second paramater" - fi - echo "# Using the PR:" - echo "# https://github.com/ElementsProject/lightning/pull/${PRnumber}" + if [ $# -gt 1 ]; then + PRnumber=$2 + else + echo "# Need PRnumber as the second paramater" + fi + echo "# Using the PR:" + echo "# https://github.com/ElementsProject/lightning/pull/${PRnumber}" if curl --output /dev/null --silent --head --fail \ - https://github.com/ElementsProject/lightning/pull/${PRnumber};then + https://github.com/ElementsProject/lightning/pull/${PRnumber}; then echo "# OK the PR exists at https://github.com/ElementsProject/lightning/pull/${PRnumber}" echo "# Press ENTER to proceed to install Core Lightning with the PR ${PRnumber} or CTRL+C to abort." read key @@ -119,65 +121,6 @@ if [ "$1" = "install" ]; then exit 1 fi -## Download and verify zip -# # prepare download dir -# sudo rm -rf /home/bitcoin/download -# sudo -u bitcoin mkdir -p /home/bitcoin/download -# cd /home/bitcoin/download || exit 1 -# -# sudo -u bitcoin wget -O "pgp_keys.asc" ${PGPpubkeyLink} -# sudo -u bitcoin gpg --import --import-options show-only ./pgp_keys.asc -# fingerprint=$(gpg "pgp_keys.asc" 2>/dev/null | grep "${PGPpubkeyFingerprint}" -c) -# if [ ${fingerprint} -lt 1 ]; then -# echo -# echo "# WARNING --> the PGP fingerprint is not as expected for ${PGPsigner}" -# echo "Should contain PGP: ${PGPpubkeyFingerprint}" -# echo "PRESS ENTER to TAKE THE RISK if you think all is OK" -# read key -# fi -# sudo -u bitcoin gpg --import ./pgp_keys.asc -# -# sudo -u bitcoin wget https://github.com/ElementsProject/lightning/releases/download/${CLVERSION}/SHA256SUMS -# sudo -u bitcoin wget https://github.com/ElementsProject/lightning/releases/download/${CLVERSION}/SHA256SUMS.asc -# -# verifyResult=$(LANG=en_US.utf8; sudo -u bitcoin gpg --verify SHA256SUMS.asc 2>&1) -# -# goodSignature=$(echo ${verifyResult} | grep 'Good signature' -c) -# echo "goodSignature(${goodSignature})" -# correctKey=$(echo ${verifyResult} | tr -d " \t\n\r" | grep "${PGPpubkeyFingerprint}" -c) -# echo "correctKey(${correctKey})" -# if [ ${correctKey} -lt 1 ] || [ ${goodSignature} -lt 1 ]; then -# echo -# echo "# DOWNLOAD FAILED --> PGP verification not OK / signature(${goodSignature}) verify(${correctKey})" -# exit 1 -# else -# echo -# echo "****************************************************************" -# echo "OK --> the PGP signature of the Core Lightning SHA256SUMS is correct" -# echo "****************************************************************" -# echo -# fi -# -# sudo -u bitcoin wget https://github.com/ElementsProject/lightning/releases/download/${CLVERSION}/clightning-${CLVERSION}.zip -# -# hashCheckResult=$(sha256sum -c SHA256SUMS 2>&1) -# goodHash=$(echo ${hashCheckResult} | grep 'OK' -c) -# echo "goodHash(${goodHash})" -# if [ ${goodHash} -lt 1 ]; then -# echo -# echo "# BUILD FAILED --> Hash check not OK" -# exit 1 -# else -# echo -# echo "********************************************************************" -# echo "OK --> the hash of the downloaded Core Lightning source code is correct" -# echo "********************************************************************" -# echo -# fi -# -# sudo -u bitcoin unzip clightning-${CLVERSION}.zip -# cd clightning-${CLVERSION} || exit 1 - # download and verify the source from github cd /home/bitcoin || exit 1 echo @@ -190,7 +133,7 @@ if [ "$1" = "install" ]; then sudo -u bitcoin git reset --hard ${CLVERSION} sudo -u bitcoin /home/admin/config.scripts/blitz.git-verify.sh \ - "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" "${CLVERSION}" || exit 1 + "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" "${CLVERSION}" || exit 1 installDependencies @@ -220,7 +163,7 @@ source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf TORGROUP="debian-tor" -if [ "$1" = update ]||[ "$1" = testPR ];then +if [ "$1" = update ] || [ "$1" = testPR ]; then source <(/home/admin/config.scripts/network.aliases.sh getvars cl mainnet) else source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) @@ -228,7 +171,7 @@ fi echo "# Using the settings for: ${network} ${CHAIN}" -if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then +if [ "$1" = on ] || [ "$1" = update ] || [ "$1" = testPR ]; then if [ "${CHAIN}" == "testnet" ] && [ "${testnet}" != "on" ]; then echo "# before activating testnet on cl, first activate testnet on bitcoind" @@ -242,14 +185,14 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then exit 1 fi - if [ "$1" = "update" ]||[ "$1" = "testPR" ];then + if [ "$1" = "update" ] || [ "$1" = "testPR" ]; then echo "# apt update" echo sudo apt-get update cd /home/bitcoin || exit 1 - if [ "$1" = "update" ]||[ "$1" = "testPR" ];then + if [ "$1" = "update" ] || [ "$1" = "testPR" ]; then echo echo "# Deleting the old source code" sudo rm -rf lightning @@ -262,7 +205,7 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then echo if [ "$1" = "update" ]; then - if [ $# -gt 1 ];then + if [ $# -gt 1 ]; then CLVERSION=$2 echo "# Installing the version ${CLVERSION}" sudo -u bitcoin git reset --hard ${CLVERSION} @@ -284,8 +227,10 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then installDependencies - currentCLversion=$(cd /home/bitcoin/lightning 2>/dev/null; \ - git describe --tags 2>/dev/null) + currentCLversion=$( + cd /home/bitcoin/lightning 2>/dev/null + git describe --tags 2>/dev/null + ) echo "# Building from source Core Lightning $currentCLversion" buildAndInstallCLbinaries @@ -296,7 +241,7 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then ########## # make sure binary is installed (will skip if already done) - /home/admin/config.scripts/cl.install.sh install + /home/admin/config.scripts/cl.install.sh install || exit 1 echo "# Make sure bitcoin is in the ${TORGROUP} group" sudo usermod -a -G ${TORGROUP} bitcoin @@ -313,11 +258,11 @@ if [ "$1" = on ]||[ "$1" = update ]||[ "$1" = testPR ];then sudo mkdir -p /mnt/hdd/app-data/.lightning sudo ln -s /mnt/hdd/app-data/.lightning /home/bitcoin/ - if [ ${CLNETWORK} != "bitcoin" ] && [ ! -d /home/bitcoin/.lightning/${CLNETWORK} ] ;then + if [ ${CLNETWORK} != "bitcoin" ] && [ ! -d /home/bitcoin/.lightning/${CLNETWORK} ]; then sudo -u bitcoin mkdir /home/bitcoin/.lightning/${CLNETWORK} fi - if ! sudo ls ${CLCONF};then + if ! sudo ls ${CLCONF}; then echo "# Create ${CLCONF}" echo "# lightningd configuration for ${network} ${CHAIN} @@ -364,7 +309,9 @@ always-use-proxy=true ############# echo echo "# Set logrotate for ${netprefix}lightningd" - sudo -u bitcoin mkdir /home/bitcoin/.lightning/${CLNETWORK}/cl.log_old + if ! sudo ls /home/bitcoin/.lightning/${CLNETWORK}/cl.log_old; then + sudo -u bitcoin mkdir /home/bitcoin/.lightning/${CLNETWORK}/cl.log_old + fi echo "\ /home/bitcoin/.lightning/${CLNETWORK}/cl.log { @@ -376,10 +323,6 @@ always-use-proxy=true notifempty nocompress sharedscripts - # We don't need to kill as we use copytruncate - #postrotate - # kill -HUP \`cat /run/lightningd/lightningd.pid\' - #endscript su bitcoin bitcoin }" | sudo tee /etc/logrotate.d/${netprefix}lightningd # debug: @@ -396,8 +339,7 @@ alias ${netprefix}cl=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ --conf=${CLCONF}\" alias ${netprefix}cllog=\"sudo\ tail -n 30 -f /home/bitcoin/.lightning/${CLNETWORK}/cl.log\" -alias ${netprefix}clconf=\"sudo\ - nano ${CLCONF}\" +alias ${netprefix}clconf=\"sudo nano ${CLCONF}\" " | sudo tee -a /home/admin/_aliases sudo chown admin:admin /home/admin/_aliases fi @@ -418,16 +360,16 @@ alias ${netprefix}clconf=\"sudo\ # setting values in the raspiblitz.conf /home/admin/config.scripts/blitz.conf.sh set ${netprefix}cl on # blitz.conf.sh needs sudo access - cannot be run in cl.check.sh - if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/sparko ];then + if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/sparko ]; then /home/admin/config.scripts/blitz.conf.sh set ${netprefix}sparko "off" fi - if [ ! -f /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin ];then + if [ ! -f /home/bitcoin/cl-plugins-enabled/c-lightning-http-plugin ]; then /home/admin/config.scripts/blitz.conf.sh set clHTTPplugin "off" fi if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/feeadjuster.py ]; then /home/admin/config.scripts/blitz.conf.sh set ${netprefix}feeadjuster "off" fi - if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/cln-grpc ];then + if [ ! -f /home/bitcoin/${netprefix}cl-plugins-enabled/cln-grpc ]; then /home/admin/config.scripts/blitz.conf.sh set "${netprefix}clnGRPCport" "off" fi @@ -464,10 +406,9 @@ if [ "$1" = "display-seed" ]; then source ${seedwordFile} #echo "# seedwords(${seedwords})" #echo "# seedwords6x4(${seedwords6x4})" - if [ ${#seedwords6x4} -gt 0 ];then + if [ ${#seedwords6x4} -gt 0 ]; then ack=0 - while [ ${ack} -eq 0 ] - do + while [ ${ack} -eq 0 ]; do whiptail --title "Core Lightning ${displayNetwork} Wallet" \ --msgbox "This is your Core Lightning ${displayNetwork} wallet seed. Store these numbered words in a safe location:\n\n${seedwords6x4}" 13 76 whiptail --title "Please Confirm" --yes-button "Show Again" --no-button "CONTINUE" --yesno " Are you sure that you wrote down the word list?" 8 55 @@ -477,9 +418,9 @@ if [ "$1" = "display-seed" ]; then done else dialog \ - --title "Core Lightning ${displayNetwork} Wallet" \ - --exit-label "exit" \ - --textbox "${seedwordFile}" 14 92 + --title "Core Lightning ${displayNetwork} Wallet" \ + --exit-label "exit" \ + --textbox "${seedwordFile}" 14 92 fi else # hsmFile="/home/bitcoin/.lightning/${CLNETWORK}/hsm_secret" @@ -489,14 +430,14 @@ if [ "$1" = "display-seed" ]; then exit 0 fi -if [ "$1" = "off" ];then +if [ "$1" = "off" ]; then echo "# Removing the ${netprefix}lightningd.service" sudo systemctl disable ${netprefix}lightningd sudo systemctl stop ${netprefix}lightningd echo "# Removing the aliases" sudo sed -i "/${netprefix}lightning-cli/d" /home/admin/_aliases sudo sed -i "/${netprefix}cl/d" /home/admin/_aliases - if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then + if [ "$(echo "$@" | grep -c purge)" -gt 0 ]; then echo "# Removing the binaries" sudo rm -f /usr/local/bin/lightningd sudo rm -f /usr/local/bin/lightning-cli diff --git a/home.admin/config.scripts/cl.rest.sh b/home.admin/config.scripts/cl.rest.sh index fda816666..cb2c3f1ce 100644 --- a/home.admin/config.scripts/cl.rest.sh +++ b/home.admin/config.scripts/cl.rest.sh @@ -1,18 +1,18 @@ #!/bin/bash # https://github.com/Ride-The-Lightning/c-lightning-REST/releases/ -CLRESTVERSION="v0.9.0" +CLRESTVERSION="v0.10.1" # help if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then - echo echo "Core-Lightning-REST install script" echo "The default version is: $CLRESTVERSION" echo "mainnet | testnet | signet instances can run parallel" echo echo "Usage:" - echo "cl.rest.sh [on|off|connect] [?key-value]" - echo + echo "cl.rest.sh on " + echo "cl.rest.sh connect [?key-value]" + echo "cl.rest.sh off " exit 1 fi From eb0e9eacfa45c5593e368537fe28bc051964887e Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:07:47 +0000 Subject: [PATCH 08/55] CLN FAQ update (#3666) * improve the detection of existing cln aliases * add the emergencyrecover instructions to CLN FAQ * update help entries --- FAQ.cl.md | 179 +++++++++++++++++++----- home.admin/config.scripts/cl.install.sh | 2 +- 2 files changed, 142 insertions(+), 39 deletions(-) diff --git a/FAQ.cl.md b/FAQ.cl.md index 77fa7bd08..693aeabb8 100644 --- a/FAQ.cl.md +++ b/FAQ.cl.md @@ -34,18 +34,19 @@ - [Backups](#backups) - [Backup strategy](#backup-strategy) - [Seed](#seed) - - [How to display the hsm_secret in a human-readable format?](#how-to-display-the-hsm_secret-in-a-human-readable-format) + - [How to display the hsm\_secret in a human-readable format?](#how-to-display-the-hsm_secret-in-a-human-readable-format) - [How to test the seedwords?](#how-to-test-the-seedwords) - - [How to restore the hsm_secret from text?](#how-to-restore-the-hsm_secret-from-text) + - [How to restore the hsm\_secret from text?](#how-to-restore-the-hsm_secret-from-text) - [Channel database](#channel-database) - - [Recovery](#recovery) - - [Recover from a cl-rescue file](#recover-from-a-cl-rescue-file) - - [Recover from a seed](#recover-from-a-seed) - - [Restore a CLN node from the database backup on the SDcard](#restore-a-cln-node-from-the-database-backup-on-the-sdcard) - - [Rescan the chain after restoring a used CLN wallet](#rescan-the-chain-after-restoring-a-used-cln-wallet) - - [Guesstoremote to recover funds from force-closed channels](#guesstoremote-to-recover-funds-from-force-closed-channels) +- [Recovery](#recovery) + - [Recover from a cl-rescue file](#recover-from-a-cl-rescue-file) + - [Recover from a seed](#recover-from-a-seed) + - [Emergency recovery in case of lost channel states](#emergency-recovery-in-case-of-lost-channel-states) + - [Restore a CLN node from the database backup on the SDcard](#restore-a-cln-node-from-the-database-backup-on-the-sdcard) + - [Rescan the chain after restoring a used CLN wallet](#rescan-the-chain-after-restoring-a-used-cln-wallet) + - [Guesstoremote to recover funds from force-closed channels](#guesstoremote-to-recover-funds-from-force-closed-channels) - [sqlite3 queries](#sqlite3-queries) -- [Extract the private and public key from the hsm_secret file](#extract-the-private-and-public-key-from-the-hsm_secret-file) +- [Extract the private and public key from the hsm\_secret file](#extract-the-private-and-public-key-from-the-hsm_secret-file) - [Update](#update) - [Update to a new CLN release](#update-to-a-new-cln-release) - [Experimental update to the latest master](#experimental-update-to-the-latest-master) @@ -457,7 +458,7 @@ Will need to pay through a peer which supports the onion messages which means yo ``` ## Backups -*<> https://lightning.readthedocs.io/FAQ.html#how-to-backup-my-wallet> +* > * General details: ### Backup strategy @@ -519,20 +520,98 @@ Will need to pay through a peer which supports the onion messages which means yo ### Channel database * Stored on the disk and synchronised to the SDcard with the help of the `backup` plugin. -### Recovery +## Recovery * https://lightning.readthedocs.io/FAQ.html#database-corruption-channel-state-lost * https://lightning.readthedocs.io/FAQ.html#loss -#### Recover from a cl-rescue file +### Recover from a cl-rescue file * use the `REPAIR-CL` - `FILERESTORE` option in the menu for instructions to upload -#### Recover from a seed +### Recover from a seed * use the `REPAIR-CL` - `SEEDRESTORE` option in the menu for instructions to paste the seedwords to restore +* or use the manual commands + ``` + # stop CLN + sudo systemctl stop lightningd -#### Restore a CLN node from the database backup on the SDcard + # change to the bitcoin user + sudo su - bitcoin + + # generate the hsm_secret in temporary directory from your CLN seed words (follow the instructions) + lightning-hsmtool generatehsm /dev/shm/hsm_secret + + # backup your old hsm_secret and channel database + mkdir /home/bitcoin/.lightning/bitcoin/old_node + mv /home/bitcoin/.lightning/bitcoin/** /home/bitcoin/.lightning/bitcoin/old_node/ + + # move the new hsm_secret in place + mv /dev/shm/hsm_secret /home/bitcoin/.lightning/bitcoin/ + + # back to admin + exit + + # start lightningd + sudo systemctl start lightningd + + # show the logs + cllog + ``` + +### Emergency recovery in case of lost channel states + +* blogpost: +* demo video: https://youtu.be/zBmEieZuS8Q +* manpage: + ``` + lightning-cli help emergencyrecover + ``` + +1. [Restore the hsm_secret (onchain wallet keys) from seed](#recover-from-a-seed) (or hex). + * There is no need to wait for the (few hours) rescan to finish, but can follow it any time with: + ``` + cllog + ``` +1. Upload and copy the emergency.recover file in place + + * upload the file with scp: + ``` + scp hsm_secret emergency.recover admin@RASPIBLITZ_IP:~/ + ``` + * copy it from `/home/admin/`: + ``` + sudo cp /home/admin/emergency.recover /home/bitcoin/.lightning/bitcoin/ + sudo chown bitcoin:bitcoin /home/bitcoin/.lightning/bitcoin/emergency.recover + ``` +1. Recover + + * run (as admin or bitcoin user): + ``` + lightning-cli emergencyrecover + ``` + * a list of channelID-s should be returned if it worked: + ``` + { + "stubs": [ + "................", + ] + } + ``` +1. See more data about the recovered funds and channels + ``` + lightning-cli listfunds + lightning-cli listpeers + ``` + * List the funding txid-s: + ``` + lightning-cli listfunds | jq -r '.channels[] | .funding_txid' + ``` + Can check the txid-s in a mempool explorer. If one is spent that channel is already closed. + +### Restore a CLN node from the database backup on the SDcard * https://gist.github.com/openoms/3516cd8f393d69d52f858c3d47c9e469 -#### Rescan the chain after restoring a used CLN wallet - +### Rescan the chain after restoring a used CLN wallet +* automatically done when using `SEEDRESTORE` +* controlled by the entry in the cln config file * can use the `menu` -> `REPAIR` -> `REPAIR-CL` -> `RESCAN` option * or follow the manual process: @@ -554,7 +633,7 @@ Will need to pay through a peer which supports the onion messages which means yo cllog ``` -#### Guesstoremote to recover funds from force-closed channels +### Guesstoremote to recover funds from force-closed channels * ``` $ man lightning-hsmtool @@ -708,9 +787,9 @@ Will need to pay through a peer which supports the onion messages which means yo seed-force will delete any old wallet and will work without dialog cl.hsmtool.sh [unlock] - success: exit 0 - wrong password: exit 2 - fail to unlock after 1 minute + show logs: exit 3 + success: exit 0 + wrong password: exit 2 + fail to unlock after 1 minute + show logs: exit 3 cl.hsmtool.sh [lock] cl.hsmtool.sh [encrypt|decrypt] cl.hsmtool.sh [autounlock-on|autounlock-off] @@ -726,7 +805,7 @@ Will need to pay through a peer which supports the onion messages which means yo + ./cl.install.sh -h Core Lightning install script - The default version is: v0.11.2 + The default version is: v22.11.1 mainnet / testnet / signet instances can run parallel Usage: @@ -807,14 +886,22 @@ Will need to pay through a peer which supports the onion messages which means yo + ./cl-plugin.summary.sh -h - Install and show the output if the summary plugin for Core Lightning + Install and show the output if the summary plugin forCore Lightning Usage: cl-plugin.summary.sh [testnet|mainnet|signet] [runonce] + + ./cl-plugin.watchtower-client.sh -h + + Install the rust-teos watchtower-client plugin for CLN + Usage: + cl-plugin.watchtower-client.sh on + cl-plugin.watchtower-client.sh off + cl-plugin.watchtower-client.sh info + + ./cl.rest.sh -h - Core Lightning-REST install script - The default version is: v0.7.2 + Core-Lightning-REST install script + The default version is: v0.9.0 mainnet | testnet | signet instances can run parallel Usage: @@ -830,7 +917,7 @@ Will need to pay through a peer which supports the onion messages which means yo Install, remove or get info about the Spark Wallet for Core Lightning version: v0.3.1 Usage: - cl.spark.sh [on|off|menu] + cl.spark.sh [on|off|menu] + ./cl.update.sh -h @@ -838,10 +925,10 @@ Will need to pay through a peer which supports the onion messages which means yo cl.update.sh [info|verified|reckless] info -> get actual state and possible actions verified -> only do recommended updates by RaspiBlitz team - binary will be checked by signature and checksum + binary will be checked by signature and checksum reckless -> if you just want to update to the latest release - published on Core Lightning GitHub releases (RC or final) without any - testing or security checks. + published on Core Lightning GitHub releases (RC or final) without any + testing or security checks. ``` ## All possible config options @@ -869,9 +956,10 @@ Will need to pay through a peer which supports the onion messages which means yo --wallet Location of the wallet database. --large-channels|--wumbo Allow channels larger than 0.16777215 BTC --experimental-dual-fund experimental: Advertise dual-funding and allow peers to establish channels via v2 channel open protocol. - --experimental-onion-messages EXPERIMENTAL: enable send, receive and relay of onion messages + --experimental-onion-messages EXPERIMENTAL: enable send, receive and relay of onion messages and blinded payments --experimental-offers EXPERIMENTAL: enable send and receive of offers (also sets experimental-onion-messages) --experimental-shutdown-wrong-funding EXPERIMENTAL: allow shutdown with alternate txids + --announce-addr-dns Use DNS entries in --announce-addr and --addr (not widely supported!) (default: false) --help|-h Print this message. --rgb RRGGBB hex color for node --alias Up to 32-byte alias for node @@ -897,25 +985,36 @@ Will need to pay through a peer which supports the onion messages which means yo --disable-ip-discovery Turn off announcement of discovered public IPs --offline Start in offline-mode (do not automatically reconnect and do not accept incoming connections) --autolisten If true, listen on default port and announce if it seems to be a public interface (default: true) + --dev-allowdustreserve If true, we allow the `fundchannel` RPC command and the `openchannel` plugin hook to set a reserve that is below the dust limit. + (default: false) --proxy Set a socks v5 proxy IP address and port --tor-service-password Set a Tor hidden service password - --experimental-accept-extra-tlv-types Comma separated list of extra TLV types to accept. + --accept-htlc-tlv-types Comma separated list of extra HTLC TLV types to accept. --disable-dns Disable DNS lookups of peers --encrypted-hsm Set the password to encrypt hsm_secret with. If no password is passed through command line, you will be prompted to enter it. --rpc-file-mode Set the file mode (permissions) for the JSON-RPC socket (default: "0600") - --force-feerates Set testnet/regtest feerates in sats perkw, opening/mutual_close/unlateral_close/delayed_to_us/htlc_resolution/penalty: if fewer specified, last number applies to remainder - --subdaemon Arg specified as SUBDAEMON:PATH. Specifies an alternate subdaemon binary. If the supplied path is relative the subdaemon binary is found in the working directory. This option may be - specified multiple times. For example, --subdaemon=hsmd:remote_signer would use a hypothetical remote signing subdaemon. + --force-feerates Set testnet/regtest feerates in sats perkw, opening/mutual_close/unlateral_close/delayed_to_us/htlc_resolution/penalty: if fewer + specified, last number applies to remainder + --subdaemon Arg specified as SUBDAEMON:PATH. Specifies an alternate subdaemon binary. If the supplied path is relative the subdaemon binary is + found in the working directory. This option may be specified multiple times. For example, --subdaemon=hsmd:remote_signer would use + a hypothetical remote signing subdaemon. --experimental-websocket-port experimental: alternate port for peers to connect using WebSockets (RFC6455) + --database-upgrade Set to true to allow database upgrades even on non-final releases (WARNING: you won't be able to downgrade!) --log-level log level (io, debug, info, unusual, broken) [:prefix] (default: info) --log-timestamps prefix log messages with timestamp (default: true) - --log-prefix log prefix (default: lightningd) - --log-file= log to file instead of stdout + --log-prefix log prefix (default: ) + --log-file= Also log to file (- for stdout) --version|-V Print version and exit + --fetchinvoice-noconnect Don't try to connect directly to fetch an invoice. --autocleaninvoice-cycle Perform cleanup of expired invoices every given seconds, or do not autoclean if 0 --autocleaninvoice-expired-by If expired invoice autoclean enabled, invoices that have expired for at least this given seconds are cleaned - --fetchinvoice-noconnect Don't try to connect directly to fetch an invoice. - --disable-mpp Disable multi-part payments. + --autoclean-cycle Perform cleanup every given seconds + --autoclean-succeededforwards-age How old do successful forwards have to be before deletion (0 = never) + --autoclean-failedforwards-age How old do failed forwards have to be before deletion (0 = never) + --autoclean-succeededpays-age How old do successful pays have to be before deletion (0 = never) + --autoclean-failedpays-age How old do failed pays have to be before deletion (0 = never) + --autoclean-paidinvoices-age How old do paid invoices have to be before deletion (0 = never) + --autoclean-expiredinvoices-age How old do expired invoices have to be before deletion (0 = never) --bitcoin-datadir -datadir arg for bitcoin-cli --bitcoin-cli bitcoin-cli pathname --bitcoin-rpcuser bitcoind RPC username @@ -924,6 +1023,7 @@ Will need to pay through a peer which supports the onion messages which means yo --bitcoin-rpcport bitcoind RPC host's port --bitcoin-retry-timeout how long to keep retrying to contact bitcoind before fatally exiting --commit-fee Percentage of fee to request for their commitment + --disable-mpp Disable multi-part payments. --funder-policy Policy to use for dual-funding requests. [match, available, fixed] --funder-policy-mod Percent to apply policy at (match/available); or amount to fund (fixed) --funder-min-their-funding Minimum funding peer must open with to activate our policy @@ -939,5 +1039,8 @@ Will need to pay through a peer which supports the onion messages which means yo --lease-fee-basis Channel lease rates, basis charged for leased funds (per 10,000 satoshi.) --lease-funding-weight Channel lease rates, weight we'll ask opening peer to pay for in funding transaction --channel-fee-max-base-msat Channel lease rates, maximum channel fee base we'll charge for funds routed through a leased channel. - --channel-fee-max-proportional-thousandths Channel lease rates, maximum proportional fee (in thousandths, or ppt) we'll charge for funds routed through a leased channel. Note: 1ppt = 1,000ppm + --channel-fee-max-proportional-thousandths Channel lease rates, maximum proportional fee (in thousandths, or ppt) we'll charge for funds routed through a leased channel. + Note: 1ppt = 1,000ppm + --bookkeeper-dir Location for bookkeeper records. + --bookkeeper-db Location of the bookkeeper database ``` diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index c7a4f67d3..f50ceb53f 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -330,7 +330,7 @@ always-use-proxy=true echo sudo -u admin touch /home/admin/_aliases - if ! grep -Eq "${netprefix}lightning-cli" /home/admin/_aliases; then + if ! grep -Eq "^alias ${netprefix}lightning-cli" /home/admin/_aliases; then echo "# Adding aliases" echo "\ alias ${netprefix}lightning-cli=\"sudo -u bitcoin /usr/local/bin/lightning-cli\ From 3fe8f440063ca0214f5b598214b1871da7e2b842 Mon Sep 17 00:00:00 2001 From: DJ Booth Date: Wed, 8 Mar 2023 09:31:11 +1100 Subject: [PATCH 09/55] Update Tallycoin to version 1.8.0 (#3693) --- home.admin/config.scripts/bonus.tallycoin-connect.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.tallycoin-connect.sh b/home.admin/config.scripts/bonus.tallycoin-connect.sh index 2632e472a..fdf3c4eeb 100755 --- a/home.admin/config.scripts/bonus.tallycoin-connect.sh +++ b/home.admin/config.scripts/bonus.tallycoin-connect.sh @@ -8,7 +8,7 @@ HOME_DIR=/home/$USERNAME CONFIG_FILE=$APP_DATA_DIR/tallycoin_api.key RASPIBLITZ_INFO=/home/admin/raspiblitz.info SERVICE_FILE=/etc/systemd/system/tallycoin-connect.service -TC_VERSION=1.7.5 +TC_VERSION=1.8.0 # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From db2d26404557cd4aa842d756fe01fa8e1eac7854 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 7 Mar 2023 23:38:51 +0100 Subject: [PATCH 10/55] add tallycoin update info to CHANGES --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index fa2b552dd..1ad54304c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -30,7 +30,7 @@ - Update: lndmanage 0.14.2 [details](https://github.com/bitromortac/lndmanage) - Update: Circuitbreaker with webUI [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) - Update: Suez - Channel Visualization for LND & CL [details](https://github.com/prusnak/suez) -- Update: Tallycoin Connect v1.7.5 [details](https://github.com/djbooth007/tallycoin_connect/releases/tag/v1.7.5) +- Update: Tallycoin Connect v1.8.0 [details](https://github.com/djbooth007/tallycoin_connect/releases/tag/v1.8.0) - Fixed: SCB/Emergency-Backup to USB drive (now also with CLN emergency.recover file) - Info: Run RaspiBlitz on Proxmox [details](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/Proxmox) - Info: IP2Tor fix fulmo shop & added new ip2tor.com shop From 2b72ffda076a28777e2beb1b085fef4b1d8a9afb Mon Sep 17 00:00:00 2001 From: Yuck Fou <115867254+YuckFouBTC@users.noreply.github.com> Date: Tue, 7 Mar 2023 22:38:10 +0000 Subject: [PATCH 11/55] Fix typo in README.md (#3699) excepted -> accepted --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d6ea21649..bddf19798 100644 --- a/README.md +++ b/README.md @@ -1034,7 +1034,7 @@ To try out the IP2TOR tunnel choose in `MAINMENU` the extra menu point of the Se If you want a web service, like BTCPay Server or LNbits, to be available to the outside internet (like with IP2TOR) people expect you to offer an HTTPS address so that the communication between the client and your RaspiBlitz is encrypted. You could use the self-signed HTTPS certificate that RaspiBlitz is offering you, but this will give users Security Warnings in their browser and is not very user friendly. -That's where you can use a LetsEncrypt Subscription to get a free valid HTTPS certificate that is excepted without warning from almost all common browsers +That's where you can use a LetsEncrypt Subscription to get a free valid HTTPS certificate that is accepted without warning from almost all common browsers Because you also need a domain name for that you will need to open a free account, the following are presently supported, would be good to add more with the help of the community: [DuckDNS.org](https://www.duckdns.org) From 4c5e843d9462df171c8ee9192a9ba184d2c42932 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 8 Mar 2023 10:32:39 +0100 Subject: [PATCH 12/55] #3694 add LCD info --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bddf19798..e02edf762 100644 --- a/README.md +++ b/README.md @@ -132,9 +132,11 @@ _If the above mentioned LCD screen is sold out you can also use these different - Quimat 3,5'' Zoll Inch Touch - ELEGOO Display 3.5" Zoll TFT LCD -- kuman 3.5 Inch Touch Screen TFT Monitor +- kuman 3.5 Inch Touch Screen TFT Monitor - Waveshare 3.5inch Display for Raspberry Pi +With all LCD screen models dont use the ones that have an HDMI port/connector - what you need is a 3.5 inch LCD screen model (resolution of 480×320) that connects only thru the GPIO ports (SPI) and has an XPT2046 touch controller. + _You can even pay for your RaspiBlitz Amazon Shopping with Bitcoin & Lightning through [Bitrefill](https://blog.bitrefill.com/its-here-buy-amazon-vouchers-with-bitcoin-on-bitrefill-bb2a4449724a)._ [What other case options do I have?](FAQ.md#what-other-case-options-do-i-have) From 4de2f81e60a208ed34613e8b21a74d2a5da1cfb9 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Wed, 8 Mar 2023 13:01:06 +0100 Subject: [PATCH 13/55] #3664 att timeout 30s to ln monitor calls (#3665) --- home.admin/_background.scan.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/home.admin/_background.scan.sh b/home.admin/_background.scan.sh index cb18b113d..52176c47d 100755 --- a/home.admin/_background.scan.sh +++ b/home.admin/_background.scan.sh @@ -565,7 +565,7 @@ do fi if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_QUICK} ]; then echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status" - source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status) + source <(timeout 30s /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net status) /home/admin/_cache.sh set ln_lnd_${CHAIN}net_activated "1" /home/admin/_cache.sh set ln_lnd_${CHAIN}net_locked "${ln_lnd_locked}" /home/admin/_cache.sh set ln_lnd_${CHAIN}net_version "${ln_lnd_version}" @@ -595,7 +595,7 @@ do if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_LONG} ]; then error="" echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config" - source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config) + source <(timeout 30s /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net config) if [ "${error}" == "" ]; then /home/admin/_cache.sh set ln_lnd_${CHAIN}net_alias "${ln_lnd_alias}" if [ "${isDefaultLightning}" == "1" ] && [ "${isDefaultChain}" == "1" ]; then @@ -638,7 +638,7 @@ do if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then error="" echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info" - source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info) + source <(timeout 30s /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net info) if [ "${error}" == "" ]; then /home/admin/_cache.sh set ln_lnd_${CHAIN}net_address "${ln_lnd_address}" /home/admin/_cache.sh set ln_lnd_${CHAIN}net_tor "${ln_lnd_tor}" @@ -688,7 +688,7 @@ do if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_QUICK} ]; then error="" echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet" - source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet) + source <(timeout 30s /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net wallet) if [ "${error}" == "" ]; then /home/admin/_cache.sh set ln_lnd_${CHAIN}net_wallet_onchain_balance "${ln_lnd_wallet_onchain_balance}" /home/admin/_cache.sh set ln_lnd_${CHAIN}net_wallet_onchain_pending "${ln_lnd_wallet_onchain_pending}" @@ -720,7 +720,7 @@ do if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_LONG} ]; then error="" echo "updating: /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees" - source <(/home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees) + source <(timeout 30s /home/admin/config.scripts/lnd.monitor.sh ${CHAIN}net fees) if [ "${error}" == "" ]; then /home/admin/_cache.sh set ln_lnd_${CHAIN}net_fees_daily "${ln_lnd_fees_daily}" /home/admin/_cache.sh set ln_lnd_${CHAIN}net_fees_weekly "${ln_lnd_fees_weekly}" @@ -795,7 +795,7 @@ do fi if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_QUICK} ]; then echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status" - source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status) + source <(timeout 30s /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net status) /home/admin/_cache.sh set ln_cl_${CHAIN}net_activated "1" /home/admin/_cache.sh set ln_cl_${CHAIN}net_version "${ln_cl_version}" /home/admin/_cache.sh set ln_cl_${CHAIN}net_running "${ln_cl_running}" @@ -850,7 +850,7 @@ do if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then error="" echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info" - source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info) + source <(timeout 30s /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net info) if [ "${error}" == "" ]; then /home/admin/_cache.sh set ln_cl_${CHAIN}net_alias "${ln_cl_alias}" /home/admin/_cache.sh set ln_cl_${CHAIN}net_address "${ln_cl_address}" @@ -904,7 +904,7 @@ do if [ "${stillvalid}" == "0" ] || [ ${age} -gt ${CYCLE_MID} ]; then error="" echo "updating: /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet" - source <(/home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet) + source <(timeout 30s /home/admin/config.scripts/cl.monitor.sh ${CHAIN}net wallet) if [ "${error}" == "" ]; then /home/admin/_cache.sh set ln_cl_${CHAIN}net_wallet_onchain_balance "${ln_cl_wallet_onchain_balance}" /home/admin/_cache.sh set ln_cl_${CHAIN}net_wallet_onchain_pending "${ln_cl_wallet_onchain_pending}" From 9672c47652b43fee7544d4eedb44f0e6fb31db68 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Wed, 8 Mar 2023 12:03:00 +0000 Subject: [PATCH 14/55] fix setting LND_REST_ENDPOINT (#3689) --- home.admin/config.scripts/bonus.lnbits.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index ea0c493fc..103830b45 100644 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -502,7 +502,6 @@ if [ "$1" = "prestart" ]; then # set tls.cert path (use | as separator to avoid escaping file path slashes) sed -i "s|^LND_REST_CERT=.*|LND_REST_CERT=/mnt/hdd/app-data/lnd/tls.cert|g" /home/lnbits/lnbits/.env - # set macaroon path info in .env - USING HEX IMPORT chmod 600 /home/lnbits/lnbits/.env macaroonAdminHex=$(xxd -ps -u -c 1000 /mnt/hdd/app-data/lnd/data/chain/${LNBitsNetwork}/${LNBitsChain}net/admin.macaroon) @@ -511,7 +510,8 @@ if [ "$1" = "prestart" ]; then sed -i "s/^LND_REST_ADMIN_MACAROON=.*/LND_REST_ADMIN_MACAROON=${macaroonAdminHex}/g" /home/lnbits/lnbits/.env sed -i "s/^LND_REST_INVOICE_MACAROON=.*/LND_REST_INVOICE_MACAROON=${macaroonInvoiceHex}/g" /home/lnbits/lnbits/.env sed -i "s/^LND_REST_READ_MACAROON=.*/LND_REST_READ_MACAROON=${macaroonReadHex}/g" /home/lnbits/lnbits/.env - sed -i "s/^LND_REST_ENDPOINT=.*/LND_REST_ENDPOINT=https://127.0.0.1:${portprefix}8080/g" /home/lnbits/lnbits/.env + # set the REST endpoint (use | as separator to avoid escaping slashes) + sed -i "s|^LND_REST_ENDPOINT=.*|LND_REST_ENDPOINT=https://127.0.0.1:${portprefix}8080|g" /home/lnbits/lnbits/.env elif [ "${LNBitsLightning}" == "cl" ]; then From 6a677a6baacc98a89d99bf93cf9e7053dabfebd5 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Wed, 8 Mar 2023 13:18:37 +0000 Subject: [PATCH 15/55] btcpay update v1.8.2, postgres database fix (#3697) * btcpay update v1.8.0, postgres database fix * btcpayserver update to v1.8.2 --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.btcpayserver.sh | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1ad54304c..9ede4a8ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,7 +21,7 @@ - Update: RTL v0.13.6 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.13.6) - Update: Thunderhub v0.13.16 with balance sharing disabled [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.16) - Update: LNbits 0.9.6 [details](https://github.com/lnbits/lnbits-legend/releases/tag/0.9.6) -- Update: BTCPayServer 1.7.5 (using postgres for new installs) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.7.5) +- Update: BTCPayServer 1.8.2 (using postgres for new installs) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.8.2) - Update: ItchySats 0.7.0 [details](https://github.com/itchysats/itchysats/releases/tag/0.7.0) - Update: Channel Tools (chantools) v0.10.5 [details](https://github.com/guggero/chantools/releases/tag/v0.10.5) - Update: JoinMarket v0.9.9 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.9) diff --git a/home.admin/config.scripts/bonus.btcpayserver.sh b/home.admin/config.scripts/bonus.btcpayserver.sh index 13772ce68..d28bbb26f 100644 --- a/home.admin/config.scripts/bonus.btcpayserver.sh +++ b/home.admin/config.scripts/bonus.btcpayserver.sh @@ -3,9 +3,9 @@ # Based on: https://gist.github.com/normandmickey/3f10fc077d15345fb469034e3697d0d0 # https://github.com/dgarage/NBXplorer/tags -NBXplorerVersion="v2.3.59" +NBXplorerVersion="v2.3.62" # https://github.com/btcpayserver/btcpayserver/releases -BTCPayVersion="v1.7.5" +BTCPayVersion="v1.8.2" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -31,7 +31,7 @@ function NBXplorerConfig() { echo "# nbxplorermainnet database already exists" else echo "# Generate the database for nbxplorer" - sudo -u postgres psql -c "create database nbxplorermainnet;" + sudo -u postgres psql -c "CREATE DATABASE nbxplorermainnet TEMPLATE template0 LC_CTYPE 'C' LC_COLLATE 'C' ENCODING 'UTF8';" sudo -u postgres psql -c "create user nbxplorer with encrypted password 'raspiblitz';" sudo -u postgres psql -c "grant all privileges on database nbxplorermainnet to nbxplorer;" fi @@ -68,7 +68,7 @@ function BtcPayConfig() { echo "# btcpaymainnet database already exists" else echo "# Generate the database for btcpay" - sudo -u postgres psql -c "create database btcpaymainnet;" + sudo -u postgres psql -c "CREATE DATABASE btcpaymainnet TEMPLATE template0 LC_CTYPE 'C' LC_COLLATE 'C' ENCODING 'UTF8';" sudo -u postgres psql -c "create user btcpay with encrypted password 'raspiblitz';" sudo -u postgres psql -c "grant all privileges on database btcpaymainnet to btcpay;" fi @@ -696,6 +696,8 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then echo "# deleting data" sudo -u postgres psql -c "drop database nbxplorermainnet;" sudo -u postgres psql -c "drop user nbxplorer;" + sudo -u postgres psql -c "drop database btcpaymainnet;" + sudo -u postgres psql -c "drop user btcpay;" sudo rm -R /mnt/hdd/app-data/.btcpayserver/ else echo "# keeping data" From 1ae636b265a21edf2102787e5bbff0984727fc1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Mon, 13 Mar 2023 12:47:47 +0100 Subject: [PATCH 16/55] update lnbits to 0.10.2 and use poetry instead of venv (#3703) --- CHANGES.md | 1 + home.admin/config.scripts/bonus.lnbits.sh | 78 ++++++++++------------- 2 files changed, 36 insertions(+), 43 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9ede4a8ff..a2a168c73 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,5 @@ # CHANGES between Releases +- Update: LNbits 0.10.2 [details](https://github.com/lnbits/lnbits/releases/tag/0.10.2) ## What's new in Version 1.9.0 of RaspiBlitz? diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index 103830b45..a2c7a02dd 100644 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -1,9 +1,9 @@ #!/bin/bash -# https://github.com/lnbits/lnbits-legend +# https://github.com/lnbits/lnbits -# https://github.com/lnbits/lnbits-legend/releases -tag="0.9.6" +# https://github.com/lnbits/lnbits/releases +tag="0.10.2" VERSION="${tag}" # command info @@ -21,7 +21,7 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then echo "bonus.lnbits.sh repo [githubuser] [branch]" echo "bonus.lnbits.sh sync" echo "bonus.lnbits.sh backup" - echo "bonus.lnbits.sh restore [?FILE]" + echo "bonus.lnbits.sh restore [?FILE]" echo "bonus.lnbits.sh migrate" exit 1 fi @@ -53,7 +53,7 @@ function postgresConfig() { echo "# Setup PostgreSQL successful, new database found: $check" fi - /home/admin/config.scripts/blitz.conf.sh set LNBitsDB "PostgreSQL" + /home/admin/config.scripts/blitz.conf.sh set LNBitsDB "PostgreSQL" } function migrateMsg() { @@ -97,9 +97,9 @@ function revertMigration() { echo "# No backup file found!" fi - # update config + # update config echo "# Configure config .env" - + # clean up sudo sed -i "/^LNBITS_DATABASE_URL=/d" /home/lnbits/lnbits/.env sudo sed -i "/^LNBITS_DATA_FOLDER=/d" /home/lnbits/lnbits/.env @@ -293,25 +293,25 @@ Consider adding a IP2TOR Bridge under OPTIONS." else backup_target="/mnt/hdd/app-data/backup/lnbits_sqlite" backup_file=$(ls -t $backup_target/*.tar | head -n1) - fi + fi if [ "$backup_file" = "" ]; then echo "ABORT - No Backup found to restore from" exit 1 else # build dialog to choose backup file from menu OPTIONS_RESTORE=() - + counter=0 cd $backup_target - for f in `find *.* -maxdepth 1 -type f`; do + for f in `find *.* -maxdepth 1 -type f`; do [[ -f "$f" ]] || continue counter=$(($counter+1)) OPTIONS_RESTORE+=($counter "$f") done - WIDTH_RESTORE=66 + WIDTH_RESTORE=66 CHOICE_HEIGHT_RESTORE=$(("${#OPTIONS_RESTORE[@]}/2+1")) - HEIGHT_RESTORE=$((CHOICE_HEIGHT_RESTORE+7)) + HEIGHT_RESTORE=$((CHOICE_HEIGHT_RESTORE+7)) CHOICE_RESTORE=$(dialog --clear \ --title " LNbits - Backup restore" \ --ok-label "Select" \ @@ -339,19 +339,19 @@ Consider adding a IP2TOR Bridge under OPTIONS." dialog --title "MIGRATE LNBITS" --yesno " Do you want to proceed the migration? -Try to migrate your LNBits SQLite database to PostgreSQL. +Try to migrate your LNBits SQLite database to PostgreSQL. This can fail for unknown circumstances. Revert of this process is possible afterwards, a backup will be saved. " 12 65 if [ $? -eq 0 ]; then - clear + clear /home/admin/config.scripts/bonus.lnbits.sh migrate echo migrateMsg echo echo "OK please test your LNBits installation." echo "PRESS ENTER to continue" - read key + read key fi exit 0 ;; @@ -579,16 +579,11 @@ if [ "$1" = "sync" ] || [ "$1" = "repo" ]; then # pull latest code sudo -u lnbits git pull - # install - sudo -u lnbits python3 -m venv venv - sudo -u lnbits ./venv/bin/pip install -r requirements.txt - sudo -u lnbits ./venv/bin/pip install pylightning - sudo -u lnbits ./venv/bin/pip install secp256k1 - sudo -u lnbits ./venv/bin/pip install pyln-client - sudo -u lnbits ./venv/bin/pip install psycopg2 # conv.py postgres migration dependency + # check if poetry in installed, if not install it + sudo -u lnbits which poetry || sudo -u lnbits curl -sSL https://install.python-poetry.org | sudo -u lnbits python3 - + # do install like this + sudo -u lnbits poetry install - # build - sudo -u lnbits ./venv/bin/python build.py # restart lnbits service sudo systemctl restart lnbits echo "# server is restarting ... maybe takes some seconds until available" @@ -627,7 +622,7 @@ if [ "$1" = "install" ]; then echo "# get the github code user(${githubUser}) branch(${tag})" sudo rm -r /home/lnbits/lnbits 2>/dev/null cd /home/lnbits || exit 1 - sudo -u lnbits git clone https://github.com/${githubUser}/lnbits-legend lnbits + sudo -u lnbits git clone https://github.com/${githubUser}/lnbits lnbits cd /home/lnbits/lnbits || exit 1 sudo -u lnbits git checkout ${tag} || exit 1 @@ -635,16 +630,14 @@ if [ "$1" = "install" ]; then echo "# installing application dependencies" cd /home/lnbits/lnbits || exit 1 + # check if poetry in installed, if not install it + if ! sudo -u lnbits which poetry; then + echo "# install poetry" + sudo pip3 install --upgrade pip + sudo pip3 install poetry + fi # do install like this - sudo -u lnbits python3 -m venv venv - sudo -u lnbits ./venv/bin/pip install -r requirements.txt - sudo -u lnbits ./venv/bin/pip install pylightning - sudo -u lnbits ./venv/bin/pip install secp256k1 - sudo -u lnbits ./venv/bin/pip install pyln-client - sudo -u lnbits ./venv/bin/pip install psycopg2 # conv.py postgres migration dependency - - # build - sudo -u lnbits ./venv/bin/python build.py + sudo -u lnbits poetry install exit 0 fi @@ -739,7 +732,6 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# preparing env file" sudo rm /home/lnbits/lnbits/.env 2>/dev/null sudo -u lnbits touch /home/lnbits/lnbits/.env - sudo bash -c "echo 'LNBITS_FORCE_HTTPS=0' >> /home/lnbits/lnbits/.env" if [ ! -e /mnt/hdd/app-data/LNBits/database.sqlite3 ]; then echo "# install database: PostgreSQL" @@ -752,11 +744,11 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # config update # example: postgres://:@/ sudo bash -c "echo 'LNBITS_DATABASE_URL=postgres://lnbits_user:raspiblitz@localhost:5432/lnbits_db' >> /home/lnbits/lnbits/.env" - sudo bash -c "echo 'LNBITS_DATA_FOLDER=/mnt/hdd/app-data/LNBits/data' >> /home/lnbits/lnbits/.env" + sudo bash -c "echo 'LNBITS_DATA_FOLDER=/mnt/hdd/app-data/LNBits/data' >> /home/lnbits/lnbits/.env" else echo "# install database: SQLite" /home/admin/config.scripts/blitz.conf.sh set LNBitsDB "SQLite" - + # new data directory sudo mkdir -p /mnt/hdd/app-data/LNBits @@ -789,7 +781,7 @@ After=bitcoind.service [Service] WorkingDirectory=/home/lnbits/lnbits ExecStartPre=/home/admin/config.scripts/bonus.lnbits.sh prestart -ExecStart=/home/lnbits/lnbits/venv/bin/uvicorn lnbits.__main__:app --port 5000 +ExecStart=/bin/sh -c 'cd /home/lnbits/lnbits && poetry run lnbits --port 5000' User=lnbits Restart=always TimeoutSec=120 @@ -1081,7 +1073,7 @@ if [ "$1" = "restore" ]; then else echo "# Restore SQLite database" cd $backup_target - + if [ "$2" != "" ]; then if [ -e $2 ]; then backup_file=$2 @@ -1102,7 +1094,7 @@ if [ "$1" = "restore" ]; then # backup current db /home/admin/config.scripts/bonus.lnbits.sh backup - + # apply backup data sudo rm -R /mnt/hdd/app-data/LNBits/ sudo chown -R lnbits:lnbits LNBits/ @@ -1166,7 +1158,7 @@ if [ "$1" = "migrate" ]; then # example: postgres://:@/ # add new postgres config sudo bash -c "echo 'LNBITS_DATABASE_URL=postgres://lnbits_user:raspiblitz@localhost:5432/lnbits_db' >> /home/lnbits/lnbits/.env" - + # clean start on new postgres db prior migration echo "# LNBits first start with clean PostgreSQL" sudo systemctl start lnbits @@ -1192,7 +1184,7 @@ if [ "$1" = "migrate" ]; then sudo systemctl stop lnbits echo "# Start convert old SQLite to new PostgreSQL" - if ! sudo -u lnbits ./venv/bin/python tools/conv.py; then + if ! sudo -u lnbits poetry run python tools/conv.py; then echo "FAIL - Convert failed, revert migration process" revertMigration exit 1 @@ -1224,4 +1216,4 @@ if [ "$1" = "migrate" ]; then fi echo "FAIL - Unknown Parameter $1" -exit 1 \ No newline at end of file +exit 1 From 1f06f90b95da39f1593b4a9a483bf85f244b4fac Mon Sep 17 00:00:00 2001 From: PatrickScheich <50054697+PatrickScheich@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:12:04 +0100 Subject: [PATCH 17/55] fix apt update Key error for influx repo (#3711) Co-authored-by: Patrick Scheich --- home.admin/config.scripts/bonus.telegraf.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.telegraf.sh b/home.admin/config.scripts/bonus.telegraf.sh index 2f69092ac..350035fff 100644 --- a/home.admin/config.scripts/bonus.telegraf.sh +++ b/home.admin/config.scripts/bonus.telegraf.sh @@ -68,6 +68,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # # changed according suggestion from @frennkie in #1501 echo "deb https://repos.influxdata.com/debian ${DISTRIB_ID} stable" | sudo tee -a /etc/apt/sources.list.d/influxdb.list >/dev/null + # + # as the key is untrusted, this is a dirty fix + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D8FF8E1F7DF8B07E sudo apt-get update sudo apt-get install -y telegraf @@ -77,6 +80,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # # enable telegraf as admin for lnd sudo usermod telegraf -a -G lndadmin + # + # add telegraf to sudoers (for later application with smartmontools) + sudo usermod telegraf -a -G sudo # stop telegraf service sudo systemctl stop telegraf.service @@ -84,7 +90,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "*** telegraf installation: copying telegraf config templates" # copy custom "telegraf.conf" template to the telegraf target dir # the telegraf inputs part goes into telegraf.d subdir - # this split into "telegraf.conf" and "telegraf.d/teöegraf_inputs.conf" is necessary + # this split into "telegraf.conf" and "telegraf.d/telegraf_inputs.conf" is necessary # as the the [[inputs.***]] part contains lines with the keywords # "urls", "database", "username" "password" # so the sed-replacement-part would get confused From aa12a1be854251a329cd95298297b9adcd7829a6 Mon Sep 17 00:00:00 2001 From: PatrickScheich <50054697+PatrickScheich@users.noreply.github.com> Date: Mon, 20 Mar 2023 22:04:02 +0100 Subject: [PATCH 18/55] fix missing timeout value for nc cmnd (#3712) Co-authored-by: Patrick Scheich --- home.admin/config.scripts/internet.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/internet.sh b/home.admin/config.scripts/internet.sh index f70705412..fb0f3d9a8 100755 --- a/home.admin/config.scripts/internet.sh +++ b/home.admin/config.scripts/internet.sh @@ -134,7 +134,7 @@ if [ ${runOnline} -eq 1 ]; then fi if [ ${online} -eq 0 ]; then # test with netcat to avoid firewall issues with ICMP packets - online=$(nc -v -z -w 8.8.8.8 53 &> /dev/null && echo "1" || echo "0") + online=$(nc -v -z -w 3 8.8.8.8 53 &> /dev/null && echo "1" || echo "0") fi if [ ${online} -eq 0 ]; then # re-test with other server From 19584f5c11aaed83465a973acf06051bfdaaf7a7 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Wed, 22 Mar 2023 15:10:30 +0100 Subject: [PATCH 19/55] #3706 Update CLN v23.02.2 (#3716) * used patched/rolledback 23.02.2 release * check rusty sig * fix typo * fix default lightning setting --- home.admin/config.scripts/cl.install.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index f50ceb53f..d51c43469 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -2,20 +2,20 @@ # https://lightning.readthedocs.io/ # https://github.com/ElementsProject/lightning/releases -CLVERSION=v23.02 +CLVERSION=v23.02.2 # install the latest master by using the last commit id # https://github.com/ElementsProject/lightning/commit/master # CLVERSION="063366ed7e3b7cc12a8d1681acc2b639cf07fa23" -PGPsigner="endothermicdev" -PGPpubkeyLink="https://github.com/${PGPsigner}.gpg" -PGPpubkeyFingerprint="8F55EE750D950E3E" +# PGPsigner="endothermicdev" +# PGPpubkeyLink="https://github.com/${PGPsigner}.gpg" +# PGPpubkeyFingerprint="8F55EE750D950E3E" # https://github.com/ElementsProject/lightning/tree/master/contrib/keys -# PGPsigner="cdecker" # rustyrussel D9200E6CD1ADB8F1 # cdecker A26D6D9FE088ED58 # niftynei BFF0F67810C1EED1 -# PGPpubkeyLink="https://raw.githubusercontent.com/ElementsProject/lightning/master/contrib/keys/${PGPsigner}.txt" -# PGPpubkeyFingerprint="A26D6D9FE088ED58" +PGPsigner="rustyrussell" # rustyrussell D9200E6CD1ADB8F1 # cdecker A26D6D9FE088ED58 # niftynei BFF0F67810C1EED1 # endothermicdev 8F55EE750D950E3E +PGPpubkeyLink="https://raw.githubusercontent.com/ElementsProject/lightning/master/contrib/keys/${PGPsigner}.txt" +PGPpubkeyFingerprint="D9200E6CD1ADB8F1" # help if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then @@ -374,6 +374,7 @@ alias ${netprefix}clconf=\"sudo nano ${CLCONF}\" fi # if this is the first lightning mainnet turned on - make default + [ "${lightning}" == "none" ] && lightning="" if [ "${CHAIN}" == "mainnet" ] && [ "${lightning}" == "" ]; then echo "# CL is now the default lightning implementation" /home/admin/config.scripts/blitz.conf.sh set lightning cl From a7056fc894fd6de247619c8ab3967b53dbe2e851 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Wed, 22 Mar 2023 20:44:04 +0100 Subject: [PATCH 20/55] #3683 Update LIT to 0.8.6 (#3717) * update LIT to 0.8.6 * activate lnd rpcmiddleware * CHANGES.md --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.lit.sh | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a2a168c73..70c515449 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -18,7 +18,7 @@ - Update: Core Lightning v23.02 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02) - Update: C-lightningREST v0.10.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.1) - Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023) -- Update: Lightning Terminal v0.8.4-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.8.4-alpha) +- Update: Lightning Terminal v0.8.6-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.8.6-alpha) - Update: RTL v0.13.6 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.13.6) - Update: Thunderhub v0.13.16 with balance sharing disabled [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.16) - Update: LNbits 0.9.6 [details](https://github.com/lnbits/lnbits-legend/releases/tag/0.9.6) diff --git a/home.admin/config.scripts/bonus.lit.sh b/home.admin/config.scripts/bonus.lit.sh index c9cab54b3..b8b94c51d 100644 --- a/home.admin/config.scripts/bonus.lit.sh +++ b/home.admin/config.scripts/bonus.lit.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/lightninglabs/lightning-terminal/releases -LITVERSION="0.8.4-alpha" +LITVERSION="0.8.6-alpha" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -216,6 +216,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# BUILD FAILED --> LND PGP Verify not OK / signature(${goodSignature}) verify(${correctKey})" exit 1 fi + ########### # install # ########### @@ -231,6 +232,17 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then ########### # config # ########### + + # check if lnd.conf has rpcmiddleware.enable entry under section Application Options + entryExists=$(sudo cat /mnt/hdd/lnd/lnd.conf | grep -c "rpcmiddleware.enable=") + if [ "${entryExists}" == "0" ]; then + echo "# add rpcmiddleware.enable=true to lnd.conf" + sudo sed -i "/^\[Application Options\]$/arpcmiddleware.enable=true" /mnt/hdd/lnd/lnd.conf + fi + + # make sure lnd.conf has rpcmiddleware.enable=true + sudo sed -i "s/^rpcmiddleware.enable=.*/rpcmiddleware.enable=true/g" /mnt/hdd/lnd/lnd.conf + if [ "${runBehindTor}" = "on" ]; then echo "# Connect to the Pool, Loop and Terminal server through Tor" LOOPPROXY="loop.server.proxy=127.0.0.1:9050" @@ -240,7 +252,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then LOOPPROXY="" POOLPROXY="" fi - PASSWORD_B=$(sudo cat /mnt/hdd/${network}/${network}.conf | grep rpcpassword | cut -c 13-) + PASSWORD_B=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf | grep rpcpassword | cut -c 13-) echo " # Application Options httpslisten=0.0.0.0:8443 @@ -251,7 +263,7 @@ remote.lit-debuglevel=debug # Remote lnd options remote.lnd.rpcserver=127.0.0.1:10009 -remote.lnd.macaroonpath=/home/lit/.lnd/data/chain/${network}/${chain}net/admin.macaroon +remote.lnd.macaroonpath=/home/lit/.lnd/data/chain/bitcoin/${chain}net/admin.macaroon remote.lnd.tlscertpath=/home/lit/.lnd/tls.cert # Loop @@ -347,6 +359,7 @@ alias lit-frcli=\"frcli --rpcserver=localhost:8443 \ source <(/home/admin/_cache.sh get state) if [ "${state}" == "ready" ]; then echo "# OK - the litd.service is enabled, system is ready so starting service" + sudo systemctl restart lnd sudo systemctl start litd else echo "# OK - the litd.service is enabled, to start manually use: 'sudo systemctl start litd'" From 679effcecd84c5145f7eb7a8715521d68b47dfbc Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Mon, 3 Apr 2023 12:56:33 +0200 Subject: [PATCH 21/55] #3667 change all up/download from sftp tp scp (#3718) --- FAQ.cl.md | 2 +- home.admin/config.scripts/blitz.migration.sh | 18 +++++++++--------- home.admin/config.scripts/blitz.upload.sh | 2 +- home.admin/config.scripts/cl.backup.sh | 6 +++--- home.admin/config.scripts/lnd.backup.sh | 10 +++++----- home.admin/config.scripts/lnd.export.sh | 4 ++-- home.admin/config.scripts/lndlibs/README.md | 2 +- home.admin/setup.scripts/dialogMigration.sh | 2 +- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/FAQ.cl.md b/FAQ.cl.md index 693aeabb8..591047728 100644 --- a/FAQ.cl.md +++ b/FAQ.cl.md @@ -480,7 +480,7 @@ Will need to pay through a peer which supports the onion messages which means yo * If there is no such file and you have not funded the CLN wallet yet can reset the wallet and the next wallet will be created with a seed. ### How to display the hsm_secret in a human-readable format? -* If there is no seed available it is best to save the hsm_secret as a file with `sftp` or note down the alphanumeric characters in the two line displayed with: +* If there is no seed available it is best to save the hsm_secret as a file with `scp` or note down the alphanumeric characters in the two line displayed with: ``` sudo xxd /home/bitcoin/.lightning/bitcoin/hsm_secret ``` diff --git a/home.admin/config.scripts/blitz.migration.sh b/home.admin/config.scripts/blitz.migration.sh index a66dc3434..99b7556c0 100755 --- a/home.admin/config.scripts/blitz.migration.sh +++ b/home.admin/config.scripts/blitz.migration.sh @@ -26,21 +26,21 @@ defaultUploadPath="/mnt/hdd/temp/migration" # get local ip source <(/home/admin/config.scripts/internet.sh status local) -# SFTP download and upload links -sftpDownloadUnix="sftp -r 'bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz' ./" -sftpDownloadWin="sftp -r bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz ." -sftpUploadUnix="sftp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" -sftpUploadWin="sftp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" +# SCP download and upload links +downloadUnix="scp -r 'bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz' ./" +downloadWin="scp -r bitcoin@${localip}:${defaultUploadPath}/raspiblitz-*.tar.gz ." +uploadUnix="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" +uploadWin="scp -r ./raspiblitz-*.tar.gz bitcoin@${localip}:${defaultUploadPath}" # output status data & exit if [ "$1" = "status" ]; then echo "# RASPIBLITZ Data Import & Export" echo "localip=\"${localip}\"" echo "defaultUploadPath=\"${defaultUploadPath}\"" - echo "sftpDownloadUnix=\"${sftpDownloadUnix}\"" - echo "sftpUploadUnix=\"${sftpUploadUnix}\"" - echo "sftpDownloadWin=\"${sftpDownloadWin}\"" - echo "sftpUploadWin=\"${sftpUploadWin}\"" + echo "downloadUnix=\"${downloadUnix}\"" + echo "uploadUnix=\"${uploadUnix}\"" + echo "downloadWin=\"${downloadWin}\"" + echo "uploadWin=\"${uploadWin}\"" exit 1 fi diff --git a/home.admin/config.scripts/blitz.upload.sh b/home.admin/config.scripts/blitz.upload.sh index 7bc47bb49..f27ab1cd8 100644 --- a/home.admin/config.scripts/blitz.upload.sh +++ b/home.admin/config.scripts/blitz.upload.sh @@ -2,7 +2,7 @@ # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "# use to prepare & check sftp or web file upload to RaspiBlitz" + echo "# use to prepare & check scp or web file upload to RaspiBlitz" echo "# blitz.upload.sh prepare-upload" echo "# blitz.upload.sh check-upload ?[scb|lnd-rescue|migration]" exit 0 diff --git a/home.admin/config.scripts/cl.backup.sh b/home.admin/config.scripts/cl.backup.sh index d1debaad9..14b94f9c1 100644 --- a/home.admin/config.scripts/cl.backup.sh +++ b/home.admin/config.scripts/cl.backup.sh @@ -188,9 +188,9 @@ if [ ${mode} = "cl-export-gui" ]; then echo "*******************************************" echo echo "ON YOUR MAC & LINUX LAPTOP - RUN IN NEW TERMINAL:" - echo "sftp '${fileowner}@${localip}:${filename}' ./" + echo "scp '${fileowner}@${localip}:${filename}' ./" echo "ON WINDOWS - RUN IN CMD:" - echo "sftp ${fileowner}@${localip}:${filename} ." + echo "scp ${fileowner}@${localip}:${filename} ." echo echo "Use password A to authenticate file transfer." echo "Check for correct file size after transfer: ${size} byte" @@ -291,7 +291,7 @@ if [ ${mode} = "cl-import-gui" ]; then echo "To make upload open a new terminal on your laptop," echo "change into the directory where your cl-rescue file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "sftp -r ./cl-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "scp -r ./cl-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" echo echo "Use ${passwordInfo} to authenticate file transfer." echo "PRESS ENTER when upload is done" diff --git a/home.admin/config.scripts/lnd.backup.sh b/home.admin/config.scripts/lnd.backup.sh index 1eb13d93c..d1dbeb00c 100755 --- a/home.admin/config.scripts/lnd.backup.sh +++ b/home.admin/config.scripts/lnd.backup.sh @@ -198,9 +198,9 @@ if [ ${mode} = "lnd-export-gui" ]; then echo "********************************" echo echo "ON YOUR MAC & LINUX LAPTOP - RUN IN NEW TERMINAL:" - echo "sftp '${fileowner}@${localip}:${filename}' ./" + echo "scp '${fileowner}@${localip}:${filename}' ./" echo "ON WINDOWS - RUN IN CMD:" - echo "sftp ${fileowner}@${localip}:${filename} ." + echo "scp ${fileowner}@${localip}:${filename} ." echo "Use password A to authenticate file transfer." echo echo "Check for correct file size after transfer: ${size} byte" @@ -299,7 +299,7 @@ if [ ${mode} = "lnd-import-gui" ]; then echo "To make upload open a new terminal on your laptop," echo "change into the directory where your lnd-rescue file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "sftp -r ./lnd-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "scp -r ./lnd-rescue-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" echo echo "Use ${passwordInfo} to authenticate file transfer." echo "PRESS ENTER when upload is done" @@ -413,7 +413,7 @@ if [ ${mode} = "scb-export-gui" ]; then echo "**************************************" echo echo "RUN THE FOLLOWING COMMAND ON YOUR LAPTOP IN NEW TERMINAL:" - echo "sftp -r ${fileuser}@${localip}:${filename} ./" + echo "scp -r ${fileuser}@${localip}:${filename} ./" echo "" echo "Use password A to authenticate file transfer." echo @@ -492,7 +492,7 @@ if [ ${mode} = "scb-import-gui" ]; then echo "To make upload open a new terminal and change," echo "into the directory where your lnd-rescue file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "sftp ./channel.backup ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "scp ./channel.backup ${defaultUploadUser}@${localip}:${defaultUploadPath}/" echo "" echo "Use ${passwordInfo} to authenticate file transfer." echo "PRESS ENTER when upload is done." diff --git a/home.admin/config.scripts/lnd.export.sh b/home.admin/config.scripts/lnd.export.sh index fa6307898..940bf6821 100755 --- a/home.admin/config.scripts/lnd.export.sh +++ b/home.admin/config.scripts/lnd.export.sh @@ -154,10 +154,10 @@ elif [ "${exportType}" = "sftp" ]; then echo "The password needed during download is your Password A." echo "" echo "Macaroons:" - echo "sftp bitcoin@${local_ip}:/home/bitcoin/.lnd/data/chain/${network}/${chain}net/\*.macaroon ./" + echo "scp bitcoin@${local_ip}:/home/bitcoin/.lnd/data/chain/${network}/${chain}net/\*.macaroon ./" echo "" echo "TLS Certificate:" - echo "sftp bitcoin@${local_ip}:/home/bitcoin/.lnd/tls.cert ./" + echo "scp bitcoin@${local_ip}:/home/bitcoin/.lnd/tls.cert ./" echo "" ########################### diff --git a/home.admin/config.scripts/lndlibs/README.md b/home.admin/config.scripts/lndlibs/README.md index 94b003d8a..ee11f32d2 100644 --- a/home.admin/config.scripts/lndlibs/README.md +++ b/home.admin/config.scripts/lndlibs/README.md @@ -21,7 +21,7 @@ cp ./*.proto ./protobuffs Now copy the generated RPC libs per SFTP over to your Laptop and add them to the `/home/admin/config.scripts/lndlibs`. -sftp -r admin@192.168.X.X:/home/admin/protobuffs ./protobuffs +scp -r admin@192.168.X.X:/home/admin/protobuffs ./protobuffs Make sure the first lines (ignore comments) of the `lightning_pb2_grpc.py` look like the following for python3 compatibility: ``` diff --git a/home.admin/setup.scripts/dialogMigration.sh b/home.admin/setup.scripts/dialogMigration.sh index 2e7f183da..15bdbb1b3 100755 --- a/home.admin/setup.scripts/dialogMigration.sh +++ b/home.admin/setup.scripts/dialogMigration.sh @@ -55,7 +55,7 @@ if [ "${migrationOS}" == "raspiblitz" ]; then echo "ON YOUR LAPTOP open a new terminal and change into" echo "the directory where your migration file is and" echo "COPY, PASTE AND EXECUTE THE FOLLOWING COMMAND:" - echo "sftp -r ./raspiblitz-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" + echo "scp -r ./raspiblitz-*.tar.gz ${defaultUploadUser}@${localip}:${defaultUploadPath}/" echo "" echo "Use password 'raspiblitz' to authenticate file transfer." echo "PRESS ENTER when upload is done." From d9deaee1e2f238c70dda92920ef2b49ff896de58 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Mon, 3 Apr 2023 12:57:55 +0200 Subject: [PATCH 22/55] #3722 add no hostkeys available detection (#3723) --- home.admin/config.scripts/blitz.ssh.sh | 44 ++++++++++++++------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/home.admin/config.scripts/blitz.ssh.sh b/home.admin/config.scripts/blitz.ssh.sh index 7f900a8c5..409d092c9 100755 --- a/home.admin/config.scripts/blitz.ssh.sh +++ b/home.admin/config.scripts/blitz.ssh.sh @@ -32,11 +32,23 @@ fi ################### if [ "$1" = "renew" ]; then echo "# *** $0 $1" - sudo systemctl stop sshd - sudo rm /etc/ssh/ssh_host_* - sudo ssh-keygen -A - sudo dpkg-reconfigure openssh-server - sudo systemctl start sshd + + # stop sshd + systemctl stop sshd + + # remove old keys + rm /etc/ssh/ssh_host_* + + # generate new keys + ssh-keygen -A + dpkg-reconfigure openssh-server + + # clear journalctl logs + journalctl --rotate + journalctl --vacuum-time=1s + + # restart sshd + systemctl start sshd exit 0 fi @@ -70,23 +82,15 @@ if [ "$1" = "checkrepair" ]; then countKeyFiles=$(ls -la /etc/ssh/ssh_host_* 2>/dev/null | grep -c "/etc/ssh/ssh_host") echo "# countKeyFiles(${countKeyFiles})" if [ ${countKeyFiles} -lt 8 ]; then - echo "# DETECTED: MISSING SSHD KEYFILES --> Generating new ones" - systemctl stop ssh - echo "# ssh-keygen1" - cd /etc/ssh - ssh-keygen -A - systemctl start sshd - sleep 3 + /home/admin/config.scripts/blitz.ssh.sh renew + fi - countKeyFiles=$(ls -la /etc/ssh/ssh_host_* 2>/dev/null | grep -c "/etc/ssh/ssh_host") - echo "# countKeyFiles(${countKeyFiles})" - if [ ${countKeyFiles} -lt 8 ]; then - echo "# FAIL: Was not able to generate new sshd host keys" - else - echo "# OK: New sshd host keys generated" - fi - + # check logs for "no hostkeys available" + noHostKeys=$(journalctl -u sshd | grep -c "no hostkeys available") + if [ ${noHostKeys} -gt 0 ]; then + echo "# DETECTED: SSHD LOGS 'no hostkeys available' --> Generating new ones" + /home/admin/config.scripts/blitz.ssh.sh renew fi # check if SSHD service is NOT running & active From 5c9dc1855e1a8e98836705c31654a4406b6a3ff3 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Mon, 3 Apr 2023 12:59:45 +0200 Subject: [PATCH 23/55] #1186 FinTS/HBCI interface (#3704) * #1186 FinTS install script first draft * only start app when blitz is ready * improve menu * improve dit lnbits config * preserve edit * improve edit * improve edit * fix insertion * dont use fingerprint * now use main repo * add port * show local ip * fix typo * show port SSL --- CHANGES.md | 1 + home.admin/00mainMenu.sh | 6 + home.admin/00settingsMenuServices.sh | 13 + home.admin/_provision_.sh | 9 + home.admin/config.scripts/blitz.debug.sh | 11 + home.admin/config.scripts/bonus.fints.sh | 430 ++++++++++++++++++++ home.admin/config.scripts/bonus.template.sh | 21 +- 7 files changed, 487 insertions(+), 4 deletions(-) create mode 100755 home.admin/config.scripts/bonus.fints.sh diff --git a/CHANGES.md b/CHANGES.md index 70c515449..9b83c88a1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ - New: BOS Telegram Bot Support (see OPTIONS on LND Balance of Satoshis menu entry) - New: LightningTipBot v0.5 [details](https://github.com/LightningTipBot/LightningTipBot) - New: CLI shortcut for ↬lnproxy [details](https://github.com/rootzoll/raspiblitz/pull/3333) +- New: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186) - New on WebUI: Jam (JoinMarket Web UI) v0.1.4 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.4) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) - Update: LND v0.15.5 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.15.5-beta) diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index 33f7ae83a..8fe8e7a18 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -175,6 +175,9 @@ fi if [ "${lightningtipbot}" == "on" ]; then OPTIONS+=(LIGHTNINGTIPBOT "Show LightningTipBot details") fi +if [ "${fints}" == "on" ]; then + OPTIONS+=(FINTS "Show FinTS/HBCI details") +fi # dont offer to switch to "testnet view for now" - so no wswitch back to mainnet needed #if [ ${chain} != "main" ]; then @@ -347,6 +350,9 @@ case $CHOICE in CIRCUITBREAKER) sudo /home/admin/config.scripts/bonus.circuitbreaker.sh menu ;; + FINTS) + sudo /home/admin/config.scripts/bonus.fints.sh menu + ;; TESTNETS) /home/admin/00parallelChainsMenu.sh ;; diff --git a/home.admin/00settingsMenuServices.sh b/home.admin/00settingsMenuServices.sh index 4f4141f4e..8b469f8e7 100755 --- a/home.admin/00settingsMenuServices.sh +++ b/home.admin/00settingsMenuServices.sh @@ -36,6 +36,7 @@ if [ ${#bitcoinminds} -eq 0 ]; then bitcoinminds="off"; fi if [ ${#squeaknode} -eq 0 ]; then squeaknode="off"; fi if [ ${#itchysats} -eq 0 ]; then itchysats="off"; fi if [ ${#lightningtipbot} -eq 0 ]; then lightningtipbot="off"; fi +if [ ${#fints} -eq 0 ]; then fints="off"; fi # show select dialog echo "run dialog ..." @@ -86,6 +87,7 @@ if [ "${lightning}" == "cl" ] || [ "${cl}" == "on" ]; then fi OPTIONS+=(ma 'Homer Dashboard' ${homer}) +OPTIONS+=(fn 'FinTS/HBCI Interface (experimental)' ${fints}) CHOICES=$(dialog --title ' Additional Mainnet Services ' \ --checklist ' use spacebar to activate/de-activate ' \ @@ -734,6 +736,17 @@ else echo "ItchySats setting unchanged." fi +# fints process choice +choice="off"; check=$(echo "${CHOICES}" | grep -c "fn") +if [ ${check} -eq 1 ]; then choice="on"; fi +if [ "${fints}" != "${choice}" ]; then + echo "fints setting changed .." + anychange=1 + sudo -u admin /home/admin/config.scripts/bonus.fints.sh ${choice} +else + echo "fints setting unchanged." +fi + if [ ${anychange} -eq 0 ]; then dialog --msgbox "NOTHING CHANGED!\nUse Spacebar to check/uncheck services." 8 58 exit 0 diff --git a/home.admin/_provision_.sh b/home.admin/_provision_.sh index 7c55cba4b..0c272b30c 100755 --- a/home.admin/_provision_.sh +++ b/home.admin/_provision_.sh @@ -814,6 +814,15 @@ else echo "Provisioning LightningTipBot - keep default" >> ${logFile} fi +# FinTS +if [ "${fints}" = "on" ]; then + echo "Provisioning FinTS - run config script" >> ${logFile} + /home/admin/_cache.sh set message "Setup FinTS" + sudo -u admin /home/admin/config.scripts/bonus.fints.sh on >> ${logFile} 2>&1 +else + echo "Provisioning FinTS - keep default" >> ${logFile} +fi + # custom install script from user customInstallAvailable=$(ls /mnt/hdd/app-data/custom-installs.sh 2>/dev/null | grep -c "custom-installs.sh") if [ ${customInstallAvailable} -gt 0 ]; then diff --git a/home.admin/config.scripts/blitz.debug.sh b/home.admin/config.scripts/blitz.debug.sh index d02c39cd0..a3743fc5c 100755 --- a/home.admin/config.scripts/blitz.debug.sh +++ b/home.admin/config.scripts/blitz.debug.sh @@ -406,6 +406,17 @@ else echo "- SPHINX is OFF by config" fi +if [ "${fints}" == "on" ]; then + echo + echo "*** LAST 20 FINTS LOGS ***" + echo "sudo journalctl -u fints -b --no-pager -n20" + sudo journalctl -u fints -b --no-pager -n20 + echo "sudo tail -n 30 /home/fints/log/fuelifints.log" + sudo tail -n 30 /home/fints/log/fuelifints.log +else + echo "- FINTS is OFF by config" +fi + echo echo "*** MOUNTED DRIVES ***" echo "df -T -h" diff --git a/home.admin/config.scripts/bonus.fints.sh b/home.admin/config.scripts/bonus.fints.sh new file mode 100755 index 000000000..e0992948a --- /dev/null +++ b/home.admin/config.scripts/bonus.fints.sh @@ -0,0 +1,430 @@ +#!/bin/bash + +APPID="fints" +VERSION="2.23" + +# the git repo to get the source code from for install +GITHUB_REPO="https://github.com/drmartinberger/FueliFinTS" + +# the github tag of the version of the source code to install +# can also be a commit hash +# if empty it will use the latest source version +GITHUB_TAG="" + +# the github signature to verify the author +# leave GITHUB_SIGN_AUTHOR empty to skip verifying +GITHUB_SIGN_AUTHOR="" #web-flow +GITHUB_SIGN_PUBKEYLINK="https://github.com/web-flow.gpg" +GITHUB_SIGN_FINGERPRINT="4AEE18F83AFDEB23" + +# port numbers the app should run on +# delete if not an web app +PORT_CLEAR="3110" +PORT_SSL="3111" + +# BASIC COMMANDLINE OPTIONS +# you can add more actions or parameters if needed - for example see the bonus.rtl.sh +# to see how you can deal with an app that installs multiple instances depending on +# lightning implementation or testnets - but this should be OK for a start: +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then + echo "# Github Repo: ${GITHUB_REPO}" + echo "# Telegram Community Support: https://t.me/LN_FinTS" + echo "# bonus.${APPID}.sh status -> status information (key=value)" + echo "# bonus.${APPID}.sh on -> install the app" + echo "# bonus.${APPID}.sh off -> uninstall the app" + echo "# bonus.${APPID}.sh menu -> SSH menu dialog" + echo "# bonus.${APPID}.sh prestart -> will be called by systemd before start" + exit 1 +fi + +# echoing comments is useful for logs - but start output with # when not a key=value +echo "# Running: 'bonus.${APPID}.sh $*'" + +# check & load raspiblitz config +source /mnt/hdd/raspiblitz.conf + +######################### +# INFO +######################### + +# this section is always executed to gather status information that +# all the following commands can use & execute on + +# check if app is already installed +isInstalled=$(sudo ls /etc/systemd/system/${APPID}.service 2>/dev/null | grep -c "${APPID}.service") + +# check if service is running +isRunning=$(systemctl status ${APPID} 2>/dev/null | grep -c 'active (running)') + +if [ "${isInstalled}" == "1" ]; then + + # gather address info (whats needed to call the app) + localIP=$(hostname -I | awk '{print $1}') + toraddress=$(sudo cat /mnt/hdd/tor/${APPID}/hostname 2>/dev/null) + #fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) + +fi + +# if the action parameter `status` was called - just stop here and output all +# status information as a key=value list +if [ "$1" = "status" ]; then + echo "appID='${APPID}'" + echo "version='${VERSION}'" + echo "githubRepo='${GITHUB_REPO}'" + echo "githubVersion='${GITHUB_TAG}'" + echo "githubSignature='${GITHUB_SIGNATURE}'" + echo "isInstalled=${isInstalled}" + echo "isRunning=${isRunning}" + if [ "${isInstalled}" == "1" ]; then + echo "portCLEAR=${PORT_CLEAR}" + echo "portSSL=${PORT_SSL}" + echo "localIP='${localIP}'" + echo "toraddress='${toraddress}'" + #echo "fingerprint='${fingerprint}'" + echo "toraddress='${toraddress}'" + fi + exit +fi + +########################## +# MENU +######################### + +# The `menu` action should give at least a SSH info dialog - when an webapp show +# URL to call (http & https+fingerprint) otherwise some instruction how to start it. + +# This SSH dialog will be later called by the MAIN MENU to be available to the user +# when app is installed. + +# This menu can also have some more complex structure if you want to make it easy +# to the user to set configurations or maintenance options - example bonus.lnbits.sh + +# show info menu +if [ "$1" = "menu" ]; then + + # get local ip + localIP=$(hostname -I | awk '{print $1}') + + # set the title for the dialog + dialogTitle=" FinTS / HBCI Interface " + + # basic info text - for an web app how to call with http & self-signed https + dialogText="This is an very early experimental feature.\nServer-URL: ${localIP}:${PORT_SSL}\n\nSee GitHub Repo for more Details:\n${GITHUB_REPO}\n\nTelegram Community Chat & Support (say hi):\nhttps://t.me/LN_FinTS\n\nUse OPTIONS to config with LNbits & Debug.\n\n" + + # add tor info (if available) + if [ "${toraddress}" != "" ]; then + dialogText="${dialogText}Hidden Service address for Tor Connection:\n${toraddress}" + fi + + # use whiptail to show SSH dialog & exit + whiptail --title "${dialogTitle}" --yes-button "OK" --no-button "OPTIONS" --yesno "${dialogText}" 19 67 + result=$? + if [ ${result} -eq 0 ]; then + exit 0 + fi + + OPTIONS=() + OPTIONS+=(LNBITS "Edit lnbits.properties") + OPTIONS+=(DEBUG "Print Logs") + + WIDTH=66 + CHOICE_HEIGHT=$(("${#OPTIONS[@]}/2+1")) + HEIGHT=$((CHOICE_HEIGHT+7)) + CHOICE=$(dialog --clear \ + --title " ${APPID} - Options" \ + --ok-label "Select" \ + --cancel-label "Back" \ + --menu "Choose one of the following options:" \ + $HEIGHT $WIDTH $CHOICE_HEIGHT \ + "${OPTIONS[@]}" \ + 2>&1 >/dev/tty) + case $CHOICE in + DEBUG) + clear + echo "# sudo tail -n 100 /home/fints/log/fuelifints.log" + sudo tail -n 100 /home/fints/log/fuelifints.log + echo "# PRESS ENTER to continue" + read key + ;; + LNBITS) + edittemp=$(mktemp -p /dev/shm/) + sudo -u fints dialog --title "Editing /home/fints/config/lnbits.properties" --editbox "/home/fints/config/lnbits.properties" 200 200 2> "${edittemp}" + result=$? + clear + if [ "${result}" == "0" ]; then + echo "# saving changes to /home/fints/config/lnbits.properties" + sudo rm /home/fints/config/lnbits.properties + sudo mv ${edittemp} /home/fints/config/lnbits.properties + sudo chown fints:fints /home/fints/config/lnbits.properties + else + echo "# (${result}) no changes - dont save" + fi + echo "# restarting fints service" + sudo systemctl restart fints + sleep 2 + ;; + esac + + echo "please wait ..." + exit 0 +fi + +########################## +# ON / INSTALL +########################## + +# This section takes care of installing the app. +# The template contains some basic steps but also look at other install scripts +# to see how special cases are solved. + +if [ "$1" = "1" ] || [ "$1" = "on" ]; then + + # dont run install if already installed + if [ ${isInstalled} -eq 1 ]; then + echo "# ${APPID}.service is already installed." + exit 1 + fi + + echo "# Installing ${APPID} ..." + + # install java & build tool + sudo apt install -y default-jdk + sudo apt install -y maven + + # make sure mysql/myria db is available + sudo apt-get install -y mariadb-server mariadb-client + + # create a dedicated user for the app + echo "# create user" + sudo adduser --disabled-password --gecos "" ${APPID} || exit 1 + + # add user to special groups with special access rights + # echo "# add use to special groups" + # sudo /usr/sbin/usermod --append --groups lndadmin ${APPID} + + # create a data directory on /mnt/hdd/app-data/ for the app + if ! [ -d /mnt/hdd/app-data/${APPID} ]; then + echo "# create app-data directory" + sudo mkdir /mnt/hdd/app-data/${APPID} 2>/dev/null + sudo chown ${APPID}:${APPID} -R /mnt/hdd/app-data/${APPID} + else + echo "# reuse existing app-directory" + sudo chown ${APPID}:${APPID} -R /mnt/hdd/app-data/${APPID} + fi + + # download source code and verify + # BACKGROUND is that now you download the code from github, reset to a given version tag/commit, + # verify the author. If you app provides its source/binaries in another way, may check + # other install scripts to see how that implement code download & verify. + echo "# download the source code & verify" + sudo -u ${APPID} git clone ${GITHUB_REPO} /home/${APPID}/${APPID} + cd /home/${APPID}/${APPID} + + if [ "${GITHUB_TAG}" != "" ]; then + sudo -u ${APPID} git reset --hard $GITHUB_TAG + fi + if [ "${GITHUB_SIGN_AUTHOR}" != "" ]; then + sudo -u ${APPID} /home/admin/config.scripts/blitz.git-verify.sh \ + "${GITHUB_SIGN_AUTHOR}" "${GITHUB_SIGN_PUBKEYLINK}" "${GITHUB_SIGN_FINGERPRINT}" "${GITHUB_TAG}" || exit 1 + fi + + # compile/install the app + echo "# compile/install the app" + cd /home/${APPID}/${APPID} + # install dependencies from pom.xml + sudo -u fints mvn package + if ! [ $? -eq 0 ]; then + echo "# FAIL - mvn package did not run correctly - deleting code & exit" + sudo rm -r /home/${APPID}/${APPID} + exit 1 + fi + sudo -u fints cp /home/fints/fints/target/LN-FinTS-jar-with-dependencies.jar /home/fints/fints-fat.jar + if ! [ $? -eq 0 ]; then + echo "# FAIL - was not able to copy /home/fints/fints-fat.jar" + sudo rm -r /home/${APPID}/${APPID} + exit 1 + fi + + # init database + sudo mariadb -e "DROP DATABASE IF EXISTS fints;" + sudo mariadb -e "CREATE DATABASE fints;" + sudo mariadb -e "GRANT ALL PRIVILEGES ON fints.* TO 'fintsuser' IDENTIFIED BY 'fints';" + sudo mariadb -e "FLUSH PRIVILEGES;" + if [ -f "dbsetup.sql" ]; then + mariadb -ufintsuser -pfints fints < dbsetup.sql + else + echo "# FAIL - dbsetup.sql not found - deleting code & exit" + sudo rm -r /home/${APPID}/${APPID} + exit 1 + fi + + # open the ports in the firewall + echo "# updating Firewall" + sudo ufw allow ${PORT_CLEAR} comment "${APPID} HTTP" + sudo ufw allow ${PORT_SSL} comment "${APPID} HTTPS" + + # every app has their own systemd service that cares about starting & + # running the app in the background - see the PRESTART section for adhoc config + echo "# create systemd service: ${APPID}.service" + echo " +[Unit] +Description=${APPID} +Wants=bitcoind +After=bitcoind + +[Service] +WorkingDirectory=/home/${APPID} +Environment=\"HOME_PATH=/mnt/hdd/app-data/${APPID}\" +ExecStartPre=-/home/admin/config.scripts/bonus.${APPID}.sh prestart +ExecStart=java -jar /home/${APPID}/fints-fat.jar +User=${APPID} +Restart=always +TimeoutSec=120 +RestartSec=30 +StandardOutput=null +StandardError=journal + +# Hardening measures +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + +[Install] +WantedBy=multi-user.target +" | sudo tee /etc/systemd/system/${APPID}.service + sudo chown root:root /etc/systemd/system/${APPID}.service + + # when tor is set on also install the hidden service + if [ "${runBehindTor}" = "on" ]; then + # activating tor hidden service + /home/admin/config.scripts/tor.onion-service.sh ${APPID} 80 ${PORT_CLEAR} 443 ${PORT_SSL} + fi + + # create keystore if needed + keystoreExists=$(sudo ls /mnt/hdd/app-data/fints/keystore.jks 2>/dev/null | grep -c 'keystore.jks') + if [ ${keystoreExists} -eq 0 ]; then + echo "# creating keystore" + sudo -u fints keytool -genkey -keyalg RSA -alias fints -keystore /mnt/hdd/app-data/fints/keystore.jks -storepass raspiblitz -noprompt -dname "CN=raspiblitz, OU=IT, O=raspiblitz, L=world, S=world, C=BZ" + else + echo "# keystore already exists" + fi + + # config app basics: lnbits.properties + sudo -u fints mkdir /home/fints/config + sudo -u fints cp /home/fints/fints/config/fuelifints.properties /home/fints/config/fuelifints.properties + sudo sed -i "s/^productinfo.csv.check=.*/productinfo.csv.check=false/g" /home/fints/config/fuelifints.properties + sudo sed -i "s/^rdh_port =.*/rdh_port = ${PORT_CLEAR}/g" /home/fints/config/fuelifints.properties + sudo sed -i "s/^ssl_port =.*/ssl_port = ${PORT_SSL}/g" /home/fints/config/fuelifints.properties + sudo sed -i "s/^keystore_location =.*/keystore_location = \/mnt\/hdd\/app-data\/fints\/keystore.jks/g" /home/fints/config/fuelifints.properties + sudo sed -i "s/^keystore_password =.*/keystore_password = raspiblitz/g" /home/fints/config/fuelifints.properties + + # config app basics: blz.banking2.properties.example + sudo -u fints cp /home/fints/fints/config/blz.banking2.properties.example /home/fints/config/blz.banking2.properties + + # config app basics: lnbits.properties + sudo -u fints cp /home/fints/fints/config/lnbits.properties.example /home/fints/config/lnbits.properties + # in file lnbits.properties replace the line starting with lnbitsUrl with the following line 'lnbitsUrl = http://127.0.0.1:5000' + sudo sed -i "s/lnbitsUrl =.*/lnbitsUrl = http:\/\/127.0.0.1:5000/g" /home/fints/config/lnbits.properties + + # mark app as installed in raspiblitz config + /home/admin/config.scripts/blitz.conf.sh set ${APPID} "on" + + # enable app up thru systemd + sudo systemctl enable ${APPID} + echo "# OK - the ${APPID}.service is now enabled" + + # start app (only when blitz is ready) + source <(/home/admin/_cache.sh get state) + if [ "${state}" == "ready" ]; then + sudo systemctl start ${APPID} + echo "# OK - the ${APPID}.service is now started" + fi + + echo "# Monitor with: sudo journalctl -f -u ${APPID}" + exit 0 + +fi + +########################## +# PRESTART +########################## + +# BACKGROUND is that this script will be called with `prestart` on every start & restart +# of this apps systemd service. This has the benefit that right before the app is started +# config parameters for this app can be updated so that it always starts with the most updated +# values. With such an "adhoc config" it is for example possible to check right before start +# what other apps are installed and configure connections. Even if those configs outdate later +# while the app is running with the next restart they will then automatically update their config +# again. If you dont need such "adhoc" config for your app - just leave it empty as it is, so +# you maybe later on have the option to use it. + +if [ "$1" = "prestart" ]; then + + # needs to be run as the app user - stop if not run as the app user + # keep in mind that in the prestart section you cannot use `sudo` command + if [ "$USER" != "${APPID}" ]; then + echo "# FAIL: run as user ${APPID}" + exit 1 + fi + + echo "## PRESTART CONFIG START for ${APPID} (called by systemd prestart)" + # at the moment no on the fly config is needed + echo "## PRESTART CONFIG DONE for ${APPID}" + exit 0 +fi + +########################################### +# OFF / UNINSTALL +# call with parameter `delete-data` to also +# delete the persistent data directory +########################################### + +# BACKGROUND is that this section removes entries in systemd, nginx, etc and then +# deletes the user with its home directory to nuke all installed code + +# switch off +if [ "$1" = "0" ] || [ "$1" = "off" ]; then + + echo "# stop & remove systemd service" + sudo systemctl stop ${APPID} 2>/dev/null + sudo systemctl disable ${APPID}.service + sudo rm /etc/systemd/system/${APPID}.service + + #echo "# remove nginx symlinks" + #sudo rm -f /etc/nginx/sites-enabled/${APPID}_ssl.conf 2>/dev/null + #sudo rm -f /etc/nginx/sites-enabled/${APPID}_tor.conf 2>/dev/null + #sudo rm -f /etc/nginx/sites-enabled/${APPID}_tor_ssl.conf 2>/dev/null + #sudo rm -f /etc/nginx/sites-available/${APPID}_ssl.conf 2>/dev/null + #sudo rm -f /etc/nginx/sites-available/${APPID}_tor.conf 2>/dev/null + #sudo rm -f /etc/nginx/sites-available/${APPID}_tor_ssl.conf 2>/dev/null + #sudo nginx -t + #sudo systemctl reload nginx + + echo "# close ports on firewall" + sudo ufw deny "${PORT_CLEAR}" + sudo ufw deny "${PORT_SSL}" + + echo "# delete user" + sudo userdel -rf ${APPID} + + echo "# removing Tor hidden service (if active)" + /home/admin/config.scripts/tor.onion-service.sh off ${APPID} + + echo "# mark app as uninstalled in raspiblitz config" + /home/admin/config.scripts/blitz.conf.sh set ${APPID} "off" + + # only if 'delete-data' is an additional parameter then also the data directory gets deleted + if [ "$(echo "$@" | grep -c delete-data)" -gt 0 ]; then + echo "# found 'delete-data' parameter --> also deleting the app-data" + sudo rm -r /mnt/hdd/app-data/${APPID} + fi + + echo "# OK - app should be uninstalled now" + exit 0 + +fi + +# just a basic error message when unknown action parameter was given +echo "# FAIL - Unknown Parameter $1" +exit 1 \ No newline at end of file diff --git a/home.admin/config.scripts/bonus.template.sh b/home.admin/config.scripts/bonus.template.sh index a8585e403..9d6f0eb7b 100755 --- a/home.admin/config.scripts/bonus.template.sh +++ b/home.admin/config.scripts/bonus.template.sh @@ -202,7 +202,9 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "# download the source code & verify" sudo -u ${APPID} git clone ${GITHUB_REPO} /home/${APPID}/${APPID} cd /home/${APPID}/${APPID} - sudo -u ${APPID} git reset --hard $GITHUB_TAG + if [ "${GITHUB_TAG}" != "" ]; then + sudo -u ${APPID} git reset --hard $GITHUB_TAG + fi if [ "${GITHUB_SIGN_AUTHOR}" != "" ]; then sudo -u ${APPID} /home/admin/config.scripts/blitz.git-verify.sh \ "${GITHUB_SIGN_AUTHOR}" "${GITHUB_SIGN_PUBKEYLINK}" "${GITHUB_SIGN_FINGERPRINT}" "${GITHUB_TAG}" || exit 1 @@ -237,6 +239,7 @@ Wants=bitcoind After=bitcoind [Service] +WorkingDirectory=/home/${APPID} Environment=\"HOME_PATH=/mnt/hdd/app-data/${APPID}\" ExecStartPre=-/home/admin/config.scripts/bonus.${APPID}.sh prestart ExecStart=/usr/bin/node /home/${APPID}/${APPID}/${APPID} @@ -327,10 +330,17 @@ server { # mark app as installed in raspiblitz config /home/admin/config.scripts/blitz.conf.sh set ${APPID} "on" - # start app up thru systemd + # enable app up thru systemd sudo systemctl enable ${APPID} - sudo systemctl start ${APPID} - echo "# OK - the ${APPID}.service is now enabled & started" + echo "# OK - the ${APPID}.service is now enabled" + + # start app (only when blitz is ready) + source <(/home/admin/_cache.sh get state) + if [ "${state}" == "ready" ]; then + sudo systemctl start ${APPID} + echo "# OK - the ${APPID}.service is now started" + fi + echo "# Monitor with: sudo journalctl -f -u ${APPID}" exit 0 @@ -422,6 +432,9 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then sudo ufw deny "${PORT_CLEAR}" sudo ufw deny "${PORT_SSL}" + echo "# delete user" + sudo userdel -rf ${APPID} + echo "# removing Tor hidden service (if active)" /home/admin/config.scripts/tor.onion-service.sh off ${APPID} From cfae7d81f98f9df9207d769f193a1f2ab4feb44a Mon Sep 17 00:00:00 2001 From: allyourbankarebelongtous <100060902+allyourbankarebelongtous@users.noreply.github.com> Date: Mon, 3 Apr 2023 06:01:58 -0500 Subject: [PATCH 24/55] Update bonus.lndg.sh (#3725) * Update bonus.lndg.sh Changes version to v1.6.0. Fixes update menu bug. Cleans up code a bit (removes tabs and changes to spaces to match raspiblitz formats). * Update bonus.lndg.sh Cleaned up code, added requirements.txt install to updates (needed for this update, may be needed in future). --- home.admin/config.scripts/bonus.lndg.sh | 56 +++++++++++++------------ 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/home.admin/config.scripts/bonus.lndg.sh b/home.admin/config.scripts/bonus.lndg.sh index 3924aaa3e..122555c13 100644 --- a/home.admin/config.scripts/bonus.lndg.sh +++ b/home.admin/config.scripts/bonus.lndg.sh @@ -1,13 +1,13 @@ #!/bin/bash # https://github.com/cryptosharks131/lndg -VERSION="1.5.0 " +VERSION="1.6.0 " # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then - echo "config script to install, update or uninstall LNDG" - echo "bonus.lndg.sh [on|off|menu|update|setpassword|status]" - exit 1 + echo "config script to install, update or uninstall LNDG" + echo "bonus.lndg.sh [on|off|menu|update|setpassword|status]" + exit 1 fi # check and load raspiblitz config @@ -110,7 +110,7 @@ if __name__ == '__main__': sudo chmod 644 /home/lndg/lndg/changepassword.py sudo chown lndg:lndg /home/lndg/lndg/changepassword.py - sudo -u lndg /home/lndg/lndg/.venv/bin/python /home/lndg/lndg/changepassword.py "$2" + sudo -u lndg /home/lndg/lndg/.venv/bin/python /home/lndg/lndg/changepassword.py "$2" fi echo "ok, password changed to $2" exit 0 @@ -152,28 +152,28 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then # first check and see if a database exists isDatabase=$(sudo ls /mnt/hdd/app-data/lndg/data/db.sqlite3 2>/dev/null | grep -c 'db.sqlite3') if ! [ ${isDatabase} -eq 0 ]; then - if [ "$2" == "deletedatabase" ]; then - - # deleting old database and moving new database - echo "Deleting existing database and creating new one" + if [ "$2" == "deletedatabase" ]; then + + # deleting old database and moving new database + echo "Deleting existing database and creating new one" sudo rm -rf /mnt/hdd/app-data/lndg/data sudo cp -p -r /home/lndg/lndg/data /mnt/hdd/app-data/lndg/data sudo rm /home/lndg/lndg/data/db.sqlite3 sudo ln -sf /mnt/hdd/app-data/lndg/data/db.sqlite3 /home/lndg/lndg/data/db.sqlite3 sudo chown lndg:lndg -R /mnt/hdd/app-data/lndg/ - else - + else + # using existing database, so remove newly created database and link to existing one echo "Database already exists, using existing database" sudo rm /home/lndg/lndg/data/db.sqlite3 - sudo chown -R lndg:lndg /mnt/hdd/app-data/lndg - sudo chmod -R 755 /mnt/hdd/app-data/lndg - sudo chmod 644 /mnt/hdd/app-data/lndg/data/db.sqlite3 + sudo chown -R lndg:lndg /mnt/hdd/app-data/lndg + sudo chmod -R 755 /mnt/hdd/app-data/lndg + sudo chmod 644 /mnt/hdd/app-data/lndg/data/db.sqlite3 sudo -u lndg ln -sf /mnt/hdd/app-data/lndg/data/db.sqlite3 /home/lndg/lndg/data/db.sqlite3 - sudo -u lndg /home/lndg/lndg/.venv/bin/python manage.py migrate + sudo -u lndg /home/lndg/lndg/.venv/bin/python manage.py migrate fi else - + # database doesn't exist, so move to HDD and simlink sudo mkdir -p /mnt/hdd/app-data/lndg sudo cp -p -r /home/lndg/lndg/data /mnt/hdd/app-data/lndg/data @@ -222,15 +222,15 @@ if __name__ == '__main__': ################## # first install and configure whitenoise - sudo /home/lndg/lndg/.venv/bin/pip install whitenoise - sudo rm /home/lndg/lndg/lndg/settings.py + sudo /home/lndg/lndg/.venv/bin/pip install whitenoise + sudo rm /home/lndg/lndg/lndg/settings.py sudo /home/lndg/lndg/.venv/bin/python initialize.py -wn - - # install gunicorn application server + + # install gunicorn application server sudo /home/lndg/lndg/.venv/bin/python -m pip install 'gunicorn==20.1.*' - - # switch back to home directory - cd /home/admin/ + + # switch back to home directory + cd /home/admin/ echo "# Install gunicorn.service file for gunicorn lndg.wsgi application server" echo " @@ -258,13 +258,13 @@ WantedBy=multi-user.target # setup nginx .conf files if ! [ -f /etc/nginx/sites-available/lndg_ssl.conf ]; then - sudo cp -f /home/admin/assets/nginx/sites-available/lndg_ssl.conf /etc/nginx/sites-available/lndg_ssl.conf + sudo cp -f /home/admin/assets/nginx/sites-available/lndg_ssl.conf /etc/nginx/sites-available/lndg_ssl.conf fi if ! [ -f /etc/nginx/sites-available/lndg_tor.conf ]; then - sudo cp -f /home/admin/assets/nginx/sites-available/lndg_tor.conf /etc/nginx/sites-available/lndg_tor.conf + sudo cp -f /home/admin/assets/nginx/sites-available/lndg_tor.conf /etc/nginx/sites-available/lndg_tor.conf fi if ! [ -f /etc/nginx/sites-available/lndg_tor_ssl.conf ]; then - sudo cp -f /home/admin/assets/nginx/sites-available/lndg_tor_ssl.conf /etc/nginx/sites-available/lndg_tor_ssl.conf + sudo cp -f /home/admin/assets/nginx/sites-available/lndg_tor_ssl.conf /etc/nginx/sites-available/lndg_tor_ssl.conf fi # setup nginx symlinks @@ -449,11 +449,13 @@ if [ "$1" = "update" ]; then cd /home/lndg/lndg || exit 1 sudo -u lndg git pull sudo -u lndg .venv/bin/pip install requests + sudo -u lndg .venv/bin/pip install -r requirements.txt sudo -u lndg .venv/bin/python manage.py migrate # reinitialize settings.py in case update requires it sudo rm /home/lndg/lndg/lndg/settings.py - sudo /home/lndg/lndg/.venv/bin/python /home/lndg/lndg/initialize.py -wn + sudo /home/lndg/lndg/.venv/bin/python initialize.py -wn + cd /home/admin # restart services sudo systemctl restart nginx From 880714283b774c4fa0a3c1a87ca4e29b11f269f7 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 3 Apr 2023 13:03:05 +0200 Subject: [PATCH 25/55] #3725 update lndg version in CHANGES --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 9b83c88a1..a216db709 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,7 +7,7 @@ - New: Fatpack & Minimal sd card builds [details](SECURITY.md#minimal-sd-card-build) - New: I2P support for Bitcoin Core (i2pacceptincoming=1) [details](https://github.com/rootzoll/raspiblitz/issues/2413) - New: CLN Watchtower (The Eye of Satoshi) [details](https://github.com/talaia-labs/rust-teos/tree/master/watchtower-plugin) -- New: LNDg v1.4.0 [details](https://github.com/cryptosharks131/lndg) +- New: LNDg v1.6.0 [details](https://github.com/cryptosharks131/lndg) - New: Support of X708 UPS HAT [details](https://github.com/rootzoll/raspiblitz/pull/3087) - New: BOS Telegram Bot Support (see OPTIONS on LND Balance of Satoshis menu entry) - New: LightningTipBot v0.5 [details](https://github.com/LightningTipBot/LightningTipBot) From 71b3d6148f79957c0ee423f23fb1319b49e1aea8 Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Mon, 3 Apr 2023 19:25:02 +0200 Subject: [PATCH 26/55] #3692 update lnd to v0.16.0-beta (#3732) --- CHANGES.md | 2 +- home.admin/config.scripts/lnd.install.sh | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a216db709..3ce6617ac 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,7 +15,7 @@ - New: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186) - New on WebUI: Jam (JoinMarket Web UI) v0.1.4 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.4) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) -- Update: LND v0.15.5 [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.15.5-beta) +- Update: LND v0.16.0-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.0-beta) - Update: Core Lightning v23.02 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02) - Update: C-lightningREST v0.10.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.1) - Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023) diff --git a/home.admin/config.scripts/lnd.install.sh b/home.admin/config.scripts/lnd.install.sh index 378f985a9..c6e946f99 100644 --- a/home.admin/config.scripts/lnd.install.sh +++ b/home.admin/config.scripts/lnd.install.sh @@ -4,17 +4,17 @@ ## based on https://raspibolt.github.io/raspibolt/raspibolt_40_lnd.html#lightning-lnd ## see LND releases: https://github.com/lightningnetwork/lnd/releases ### If you change here - make sure to also change interims version in lnd.update.sh #! -lndVersion="0.15.5-beta" +lndVersion="0.16.0-beta" # olaoluwa -PGPauthor="roasbeef" -PGPpkeys="https://keybase.io/roasbeef/pgp_keys.asc" -PGPcheck="E4D85299674B2D31FAA1892E372CBD7633C61696" +#PGPauthor="roasbeef" +#PGPpkeys="https://keybase.io/roasbeef/pgp_keys.asc" +#PGPcheck="E4D85299674B2D31FAA1892E372CBD7633C61696" # guggero -#PGPauthor="guggero" -#PGPpkeys="https://keybase.io/guggero/pgp_keys.asc" -#PGPcheck="F4FC70F07310028424EFC20A8E4256593F177720" +PGPauthor="guggero" +PGPpkeys="https://keybase.io/guggero/pgp_keys.asc" +PGPcheck="F4FC70F07310028424EFC20A8E4256593F177720" # bitconner #PGPauthor="bitconner" From 2397b3847cf022d9d8a44024923d86142baa7826 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 Apr 2023 01:21:06 +0200 Subject: [PATCH 27/55] update SD CARD base image info --- build_sdcard.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_sdcard.sh b/build_sdcard.sh index 5e6397e3e..be7d9956f 100644 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -2,8 +2,8 @@ ######################################################################### # Build your SD card image based on: 2022-04-04-raspios-bullseye-arm64.img.xz -# https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/ -# SHA256: c42856ffca096480180b5aff66e1dad2f727fdc33359b24e0d2d49cc7676b576 +# https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2023-02-21/ +# SHA256: 4c963bcd53b9a77fa8235e2dc16785cc7d56372ec83c3090eac9073bd262833f # PGP fingerprint: 8738CD6B956F460C # PGP key: https://www.raspberrypi.org/raspberrypi_downloads.gpg.key # setup fresh SD card with image above - login per SSH and run this script: From c6a202ede0aa3b37ca92ddb29e604d258593af3d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Tue, 4 Apr 2023 01:21:25 +0200 Subject: [PATCH 28/55] Clenaup CHANGES info --- CHANGES.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 3ce6617ac..1030af0b9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,3 @@ -# CHANGES between Releases -- Update: LNbits 0.10.2 [details](https://github.com/lnbits/lnbits/releases/tag/0.10.2) - ## What's new in Version 1.9.0 of RaspiBlitz? - New: Automated disk image build for amd64 (VM, laptop, desktop, server) and arm64-rpi (Raspberry Pi) [details](https://github.com/rootzoll/raspiblitz/tree/dev/ci/README.md) @@ -22,7 +19,7 @@ - Update: Lightning Terminal v0.8.6-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.8.6-alpha) - Update: RTL v0.13.6 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.13.6) - Update: Thunderhub v0.13.16 with balance sharing disabled [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.16) -- Update: LNbits 0.9.6 [details](https://github.com/lnbits/lnbits-legend/releases/tag/0.9.6) +- Update: LNbits 0.10.2 [details](https://github.com/lnbits/lnbits/releases/tag/0.10.2) - Update: BTCPayServer 1.8.2 (using postgres for new installs) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.8.2) - Update: ItchySats 0.7.0 [details](https://github.com/itchysats/itchysats/releases/tag/0.7.0) - Update: Channel Tools (chantools) v0.10.5 [details](https://github.com/guggero/chantools/releases/tag/v0.10.5) From 48f4054a9cc8f08284d11dd6b10bcdd816fa68c4 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Fri, 7 Apr 2023 14:35:11 +0200 Subject: [PATCH 29/55] RTL install fix (#3739) * c-lightning-REST update to 0.10.2, fmt * rtl: npm insatll with --legacy-peer-deps * purge c-lightning-REST as well with RTL --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.rtl.sh | 18 +-- home.admin/config.scripts/cl.rest.sh | 148 ++++++++++++------------- 3 files changed, 84 insertions(+), 84 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 1030af0b9..86164b139 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,7 +14,7 @@ - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) - Update: LND v0.16.0-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.0-beta) - Update: Core Lightning v23.02 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02) -- Update: C-lightningREST v0.10.1 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.1) +- Update: C-lightningREST v0.10.2 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.2) - Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023) - Update: Lightning Terminal v0.8.6-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.8.6-alpha) - Update: RTL v0.13.6 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.13.6) diff --git a/home.admin/config.scripts/bonus.rtl.sh b/home.admin/config.scripts/bonus.rtl.sh index b898d6098..76e7f490c 100755 --- a/home.admin/config.scripts/bonus.rtl.sh +++ b/home.admin/config.scripts/bonus.rtl.sh @@ -162,7 +162,7 @@ if [ "$1" = "install" ]; then # install echo "# Running npm install ..." export NG_CLI_ANALYTICS=false - sudo -u rtl npm install --omit=dev + sudo -u rtl npm install --omit=dev --legacy-peer-deps if ! [ $? -eq 0 ]; then echo "# FAIL - npm install did not run correctly - deleting code and exit" sudo rm -r /home/rtl/RTL @@ -251,7 +251,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then fi echo "# Updating Firewall" - sudo ufw allow ${RTLHTTP} comment "${systemdService} HTTP" + sudo ufw allow "${RTLHTTP}" comment "${systemdService} HTTP" sudo ufw allow $((RTLHTTP + 1)) comment "${systemdService} HTTPS" echo @@ -546,17 +546,17 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then # only if 'purge' is an additional parameter (other instances/services might need this) if [ "$(echo "$@" | grep -c purge)" -gt 0 ]; then - home/admin/config.scripts/bonus.rtl.sh uninstall + /home/admin/config.scripts/bonus.rtl.sh uninstall if [ $LNTYPE = cl ]; then - /home/admin/config.scripts/cl.rest.sh off ${CHAIN} + /home/admin/config.scripts/cl.rest.sh off ${CHAIN} purge fi echo "# Delete all configs" sudo rm -rf /mnt/hdd/app-data/rtl fi # close ports on firewall - sudo ufw deny "${RTLHTTP}" - sudo ufw deny $((RTLHTTP + 1)) + sudo ufw delete allow "${RTLHTTP}" + sudo ufw delete allow $((RTLHTTP + 1)) # needed for API/WebUI as signal that install ran thru echo "result='OK'" @@ -589,7 +589,7 @@ if [ "$1" = "update" ]; then # https://github.com/Ride-The-Lightning/RTL#or-update-existing-dependencies echo "# Running npm install ..." export NG_CLI_ANALYTICS=false - sudo -u rtl npm install --omit=dev + sudo -u rtl npm install --omit=dev --legacy-peer-deps if ! [ $? -eq 0 ]; then echo "# FAIL - npm install did not run correctly - deleting code and exit" sudo rm -r /home/rtl/RTL @@ -605,7 +605,7 @@ if [ "$1" = "update" ]; then sudo -u rtl git pull -p echo "# Running npm install ..." export NG_CLI_ANALYTICS=false - sudo -u rtl npm install --only=prod --logLevel warn + sudo -u rtl npm install --omit=dev --legacy-peer-deps if ! [ $? -eq 0 ]; then echo "# FAIL - npm install did not run correctly - deleting code and exit" sudo rm -r /home/rtl/RTL @@ -615,7 +615,7 @@ if [ "$1" = "update" ]; then echo fi currentRTLcommit=$( - cd /home/rtl/RTL + cd /home/rtl/RTL || exit 1 git describe --tags ) echo "# Updated RTL to $currentRTLcommit" diff --git a/home.admin/config.scripts/cl.rest.sh b/home.admin/config.scripts/cl.rest.sh index cb2c3f1ce..2ce73aaf2 100644 --- a/home.admin/config.scripts/cl.rest.sh +++ b/home.admin/config.scripts/cl.rest.sh @@ -1,10 +1,10 @@ #!/bin/bash # https://github.com/Ride-The-Lightning/c-lightning-REST/releases/ -CLRESTVERSION="v0.10.1" +CLRESTVERSION="v0.10.2" # help -if [ $# -eq 0 ]||[ "$1" = "-h" ]||[ "$1" = "--help" ];then +if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then echo "Core-Lightning-REST install script" echo "The default version is: $CLRESTVERSION" echo "mainnet | testnet | signet instances can run parallel" @@ -29,7 +29,7 @@ source <(/home/admin/config.scripts/network.aliases.sh getvars cl $2) echo "# Running 'cl.rest.sh $*'" -if [ "$1" = connect ];then +if [ "$1" = connect ]; then if ! systemctl is-active --quiet ${netprefix}clrest; then /home/admin/config.scripts/cl.rest.sh on ${CHAIN} fi @@ -58,74 +58,74 @@ if [ "$1" = connect ];then # deactivated function showStepByStepQR() { - clear - echo - sudo /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" - echo "The Tor address is shown as a QRcode below and on the LCD" - echo "Scan it to your phone with a QR scanner app and paste it to: 'Host'" - echo - echo "Host: ${toraddress}" - echo "REST Port: 443" - echo - qrencode -t ANSIUTF8 "${toraddress}" - echo - echo - echo "Alternatively to connect through the LAN the address is:" - echo "https://${localip}" - echo "REST Port: ${portprefix}6100" - echo - echo "# Press enter to continue to show the Macaroon" - read key - sudo /home/admin/config.scripts/blitz.display.sh hide - sudo /home/admin/config.scripts/blitz.display.sh qr "${hex_macaroon}" - clear - echo - echo "The Macaroon is shown as a QRcode below and on the LCD" - echo "Scan it to your phone with a QR scanner app and paste it to: 'Macaroon (Hex format)'" - echo - echo "Macaroon: ${hex_macaroon}" - echo - qrencode -t ANSIUTF8 "${hex_macaroon}" - echo - echo "# Press enter to hide the QRcode from the LCD" - read key - sudo /home/admin/config.scripts/blitz.display.sh hide - exit 0 + clear + echo + sudo /home/admin/config.scripts/blitz.display.sh qr "${toraddress}" + echo "The Tor address is shown as a QRcode below and on the LCD" + echo "Scan it to your phone with a QR scanner app and paste it to: 'Host'" + echo + echo "Host: ${toraddress}" + echo "REST Port: 443" + echo + qrencode -t ANSIUTF8 "${toraddress}" + echo + echo + echo "Alternatively to connect through the LAN the address is:" + echo "https://${localip}" + echo "REST Port: ${portprefix}6100" + echo + echo "# Press enter to continue to show the Macaroon" + read key + sudo /home/admin/config.scripts/blitz.display.sh hide + sudo /home/admin/config.scripts/blitz.display.sh qr "${hex_macaroon}" + clear + echo + echo "The Macaroon is shown as a QRcode below and on the LCD" + echo "Scan it to your phone with a QR scanner app and paste it to: 'Macaroon (Hex format)'" + echo + echo "Macaroon: ${hex_macaroon}" + echo + qrencode -t ANSIUTF8 "${hex_macaroon}" + echo + echo "# Press enter to hide the QRcode from the LCD" + read key + sudo /home/admin/config.scripts/blitz.display.sh hide + exit 0 } function showClRestQr() { - # c-lightning-rest://http://your_hidden_service.onion:your_port?&macaroon=your_macaroon_file_in_HEX&protocol=http - clear - echo - sudo /home/admin/config.scripts/blitz.display.sh qr "${clresttor}" - echo "The string to connect over Tor is shown as a QRcode below and on the LCD" - echo "Scan it to Zeus using the c-lightning-REST option" - echo - echo "c-lightning-REST connection string:" - echo "${clresttor}" - echo - qrencode -t ANSIUTF8 "${clresttor}" - echo - echo "# Press enter to show the string to connect over LAN" - read key - sudo /home/admin/config.scripts/blitz.display.sh hide - sudo /home/admin/config.scripts/blitz.display.sh qr "${clrestlan}" - clear - echo - echo "The string to connect over the local the network is shown as a QRcode below and on the LCD" - echo "Scan it to Zeus using the c-lightning-REST option" - echo "This will only work if your node si connected to the same network" - echo "To connect reemotely consider using a VPN like ZeroTier or Tailscale" - echo - echo "c-lightning-REST connection string:" - echo "${clrestlan}" - echo - qrencode -t ANSIUTF8 "${clrestlan}" - echo - echo "# Press enter to hide the QRcode from the LCD" - read key - sudo /home/admin/config.scripts/blitz.display.sh hide - exit 0 + # c-lightning-rest://http://your_hidden_service.onion:your_port?&macaroon=your_macaroon_file_in_HEX&protocol=http + clear + echo + sudo /home/admin/config.scripts/blitz.display.sh qr "${clresttor}" + echo "The string to connect over Tor is shown as a QRcode below and on the LCD" + echo "Scan it to Zeus using the c-lightning-REST option" + echo + echo "c-lightning-REST connection string:" + echo "${clresttor}" + echo + qrencode -t ANSIUTF8 "${clresttor}" + echo + echo "# Press enter to show the string to connect over LAN" + read key + sudo /home/admin/config.scripts/blitz.display.sh hide + sudo /home/admin/config.scripts/blitz.display.sh qr "${clrestlan}" + clear + echo + echo "The string to connect over the local the network is shown as a QRcode below and on the LCD" + echo "Scan it to Zeus using the c-lightning-REST option" + echo "This will only work if your node si connected to the same network" + echo "To connect reemotely consider using a VPN like ZeroTier or Tailscale" + echo + echo "c-lightning-REST connection string:" + echo "${clrestlan}" + echo + qrencode -t ANSIUTF8 "${clrestlan}" + echo + echo "# Press enter to hide the QRcode from the LCD" + read key + sudo /home/admin/config.scripts/blitz.display.sh hide + exit 0 } showClRestQr @@ -138,14 +138,14 @@ if [ "$1" = on ]; then sudo systemctl stop ${netprefix}clrest sudo systemctl disable ${netprefix}clrest - if [ ! -f /home/bitcoin/c-lightning-REST/cl-rest.js ];then + if [ ! -f /home/bitcoin/c-lightning-REST/cl-rest.js ]; then cd /home/bitcoin || exit 1 sudo -u bitcoin git clone https://github.com/saubyk/c-lightning-REST cd c-lightning-REST || exit 1 sudo -u bitcoin git reset --hard $CLRESTVERSION sudo -u bitcoin /home/admin/config.scripts/blitz.git-verify.sh \ - "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" "${CLRESTVERSION}" || exit 1 + "${PGPsigner}" "${PGPpubkeyLink}" "${PGPpubkeyFingerprint}" "${CLRESTVERSION}" || exit 1 sudo -u bitcoin npm install fi @@ -163,10 +163,10 @@ if [ "$1" = on ]; then \"RPCCOMMANDS\": [\"*\"] }" | sudo -u bitcoin tee ./${CLNETWORK}/cl-rest-config.json - # copy clrest to a CLNETWORK subdor to make parallel networks possible + # copy clrest to a CLNETWORK subdir to make parallel networks possible sudo -u bitcoin mkdir /home/bitcoin/c-lightning-REST/${CLNETWORK} sudo -u bitcoin cp -r /home/bitcoin/c-lightning-REST/* \ - /home/bitcoin/c-lightning-REST/${CLNETWORK} + /home/bitcoin/c-lightning-REST/${CLNETWORK} echo " # systemd unit for c-lightning-REST for ${CHAIN} @@ -209,7 +209,7 @@ WantedBy=multi-user.target echo fi -if [ "$1" = off ];then +if [ "$1" = off ]; then echo "# Removing c-lightning-REST for ${CHAIN}" sudo systemctl stop ${netprefix}clrest sudo systemctl disable ${netprefix}clrest @@ -217,7 +217,7 @@ if [ "$1" = off ];then echo "# Deny port ${portprefix}6100 through the firewall" sudo ufw deny "${portprefix}6100" /home/admin/config.scripts/tor.onion-service.sh off ${netprefix}clrest - if [ "$(echo "$@" | grep -c purge)" -gt 0 ];then + if [ "$(echo "$@" | grep -c purge)" -gt 0 ]; then echo "# Removing the source code and binaries" sudo rm -rf /home/bitcoin/c-lightning-REST fi From 83a6413bb4c9903e2a9a14b5ce22665c8f792151 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Sat, 8 Apr 2023 17:10:38 +0200 Subject: [PATCH 30/55] jam update to v0.1.5 (#3736) --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.jam.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 86164b139..c0bf35e2c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,7 +10,7 @@ - New: LightningTipBot v0.5 [details](https://github.com/LightningTipBot/LightningTipBot) - New: CLI shortcut for ↬lnproxy [details](https://github.com/rootzoll/raspiblitz/pull/3333) - New: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186) -- New on WebUI: Jam (JoinMarket Web UI) v0.1.4 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.4) +- New on WebUI: Jam (JoinMarket Web UI) v0.1.5 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.5) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) - Update: LND v0.16.0-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.0-beta) - Update: Core Lightning v23.02 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02) diff --git a/home.admin/config.scripts/bonus.jam.sh b/home.admin/config.scripts/bonus.jam.sh index bede07838..b7466f104 100644 --- a/home.admin/config.scripts/bonus.jam.sh +++ b/home.admin/config.scripts/bonus.jam.sh @@ -2,7 +2,7 @@ # https://github.com/joinmarket-webui/jam -WEBUI_VERSION=0.1.4 +WEBUI_VERSION=0.1.5 REPO=joinmarket-webui/jam USERNAME=jam HOME_DIR=/home/$USERNAME From e998f19a8cf0ce85abe6b282a969bd9adc5718bc Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Sat, 8 Apr 2023 21:00:26 +0200 Subject: [PATCH 31/55] 3733 CLN GRPC > JRPC (#3741) * change exit code * change to cln_jrpc * deactivate the cln_grpc settings --- home.admin/config.scripts/blitz.web.api.sh | 27 +++++++++++----------- home.admin/config.scripts/cl.install.sh | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/home.admin/config.scripts/blitz.web.api.sh b/home.admin/config.scripts/blitz.web.api.sh index ed7f5bc27..ec9831c65 100644 --- a/home.admin/config.scripts/blitz.web.api.sh +++ b/home.admin/config.scripts/blitz.web.api.sh @@ -95,25 +95,26 @@ if [ "$1" = "update-config" ]; then elif [ "${lightning}" == "cl" ]; then echo "# CONFIG Web API Lightning --> CL" - sed -i "s/^ln_node=.*/ln_node=cln_grpc/g" ./.env + sed -i "s/^ln_node=.*/ln_node=cln_jrpc/g" ./.env + sed -i "s/^cln_jrpc_path=.*/cln_jrpc_path="/mnt/hdd/app-data/.lightning/bitcoin/lightning-rpc"/g" ./.env # make sure cln-grpc is on - sudo /home/admin/config.scripts/cl-plugin.cln-grpc.sh on mainnet + # sudo /home/admin/config.scripts/cl-plugin.cln-grpc.sh on mainnet # get hex values of pem files - hexClient=$(sudo xxd -p -c2000 /home/bitcoin/.lightning/bitcoin/client.pem) - hexClientKey=$(sudo xxd -p -c2000 /home/bitcoin/.lightning/bitcoin/client-key.pem) - hexCa=$(sudo xxd -p -c2000 /home/bitcoin/.lightning/bitcoin/ca.pem) - if [ "${hexClient}" == "" ]; then - echo "# FAIL /home/bitcoin/.lightning/bitcoin/*.pem files maybe missing" - fi + # hexClient=$(sudo xxd -p -c2000 /home/bitcoin/.lightning/bitcoin/client.pem) + # hexClientKey=$(sudo xxd -p -c2000 /home/bitcoin/.lightning/bitcoin/client-key.pem) + # hexCa=$(sudo xxd -p -c2000 /home/bitcoin/.lightning/bitcoin/ca.pem) + # if [ "${hexClient}" == "" ]; then + # echo "# FAIL /home/bitcoin/.lightning/bitcoin/*.pem files maybe missing" + # fi # update config with hex values - sed -i "s/^cln_grpc_cert=.*/cln_grpc_cert=${hexClient}/g" ./.env - sed -i "s/^cln_grpc_key=.*/cln_grpc_key=${hexClientKey}/g" ./.env - sed -i "s/^cln_grpc_ca=.*/cln_grpc_ca=${hexCa}/g" ./.env - sed -i "s/^cln_grpc_ip=.*/cln_grpc_ip=127.0.0.1/g" ./.env - sed -i "s/^cln_grpc_port=.*/cln_grpc_port=4772/g" ./.env + # sed -i "s/^cln_grpc_cert=.*/cln_grpc_cert=${hexClient}/g" ./.env + # sed -i "s/^cln_grpc_key=.*/cln_grpc_key=${hexClientKey}/g" ./.env + # sed -i "s/^cln_grpc_ca=.*/cln_grpc_ca=${hexCa}/g" ./.env + # sed -i "s/^cln_grpc_ip=.*/cln_grpc_ip=127.0.0.1/g" ./.env + # sed -i "s/^cln_grpc_port=.*/cln_grpc_port=4772/g" ./.env else echo "# CONFIG Web API Lightning --> OFF" diff --git a/home.admin/config.scripts/cl.install.sh b/home.admin/config.scripts/cl.install.sh index d51c43469..424d576e3 100644 --- a/home.admin/config.scripts/cl.install.sh +++ b/home.admin/config.scripts/cl.install.sh @@ -118,7 +118,7 @@ if [ "$1" = "install" ]; then # check if the binary is already installed if [ -f /usr/local/bin/lightningd ]; then echo "Core Lightning binary already installed - done" - exit 1 + exit 0 fi # download and verify the source from github From bc42a2a343d8c69fe723f75ee54c1f1a01582c80 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sat, 8 Apr 2023 23:06:51 +0200 Subject: [PATCH 32/55] set v1.9.0rc3 version --- home.admin/_version.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_version.info b/home.admin/_version.info index 477181820..1d07fcd9a 100644 --- a/home.admin/_version.info +++ b/home.admin/_version.info @@ -1,3 +1,3 @@ # RaspiBlitz Version - always [major].[main].[sub] (sub can be a string like '2rc1') -codeVersion="1.9.0rc2" +codeVersion="1.9.0rc3" # keep last line with comment \ No newline at end of file From f383624abec078913f9e65baf9e77fa3350355cc Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 9 Apr 2023 23:00:39 +0200 Subject: [PATCH 33/55] improve git verify --- home.admin/config.scripts/blitz.git-verify.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/home.admin/config.scripts/blitz.git-verify.sh b/home.admin/config.scripts/blitz.git-verify.sh index 5a58dcc13..91ebc6a58 100644 --- a/home.admin/config.scripts/blitz.git-verify.sh +++ b/home.admin/config.scripts/blitz.git-verify.sh @@ -31,6 +31,18 @@ PGPpubkeyLink="$2" PGPpubkeyFingerprint="$3" wget -O /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc "${PGPpubkeyLink}" + +# in the case the wget above fails, try to use curl instead +if [ $? -ne 0 ]; then + echo "# WARNING --> wget failed to download the PGP key, trying curl instead" >&2 + curl -o /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc "${PGPpubkeyLink}" + if [ $? -ne 0 ]; then + echo "# ERROR --> curl failed to download the PGP key" >&2 + echo "# Exiting" >&2 + exit 6 + fi +fi + gpg --import --import-options show-only /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc fingerprint=$(gpg --show-keys --keyid-format LONG /var/cache/raspiblitz/pgp_keys_${PGPsigner}.asc 2>/dev/null | grep "${PGPpubkeyFingerprint}" -c) if [ "${fingerprint}" -lt 1 ]; then From 19a54e1641c1c260e279750efd536d9784941d2b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Sun, 9 Apr 2023 23:19:22 +0200 Subject: [PATCH 34/55] move fatpack into external script --- build_sdcard.sh | 51 +------------------ home.admin/_commands.sh | 9 ++++ home.admin/config.scripts/blitz.fatpack.sh | 57 ++++++++++++++++++++++ 3 files changed, 68 insertions(+), 49 deletions(-) create mode 100755 home.admin/config.scripts/blitz.fatpack.sh diff --git a/build_sdcard.sh b/build_sdcard.sh index be7d9956f..5fc8478d8 100644 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -796,55 +796,8 @@ echo "Provisioning BLITZ WEB SERVICE" # *** FATPACK *** (can be activated by parameter - see details at start of script) if ${fatpack}; then - echo -e "\n*** FATPACK ***" - - echo "* Adding nodeJS Framework ..." - sudo /home/admin/config.scripts/bonus.nodejs.sh on || exit 1 - - echo "* Optional Packages (may be needed for extended features)" - apt_install qrencode secure-delete fbi msmtp unclutter xterm python3-pyqt5 xfonts-terminus apache2-utils nginx python3-jinja2 socat libatlas-base-dev hexyl autossh - - echo "* Adding LND ..." - /home/admin/config.scripts/lnd.install.sh install || exit 1 - - echo "* Adding Core Lightning ..." - /home/admin/config.scripts/cl.install.sh install || exit 1 - echo "* Adding the cln-grpc plugin ..." - /home/admin/config.scripts/cl-plugin.cln-grpc.sh install || exit 1 - - # *** AUTO UPDATE FALLBACK NODE LIST FROM INTERNET (only in fatpack) - echo "*** FALLBACK NODE LIST ***" - # see https://github.com/rootzoll/raspiblitz/issues/1888 - sudo -u admin curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/snapshots/latest/ -o /home/admin/fallback.bitnodes.nodes - # Fallback Nodes List from Bitcoin Core - sudo -u admin curl https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/seeds/nodes_main.txt -o /home/admin/fallback.bitcoin.nodes - - echo "* Adding Code&Compile for WEBUI-APP: LNBITS" - /home/admin/config.scripts/bonus.lnbits.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: JAM" - /home/admin/config.scripts/bonus.jam.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: BTCPAYSERVER" - /home/admin/config.scripts/bonus.btcpayserver.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: RTL" - /home/admin/config.scripts/bonus.rtl.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: THUNDERHUB" - /home/admin/config.scripts/bonus.thunderhub.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: BTC RPC EXPLORER" - /home/admin/config.scripts/bonus.btc-rpc-explorer.sh install || exit 1 - echo "* Adding Code&Compile for WEBUI-APP: MEMPOOL" - /home/admin/config.scripts/bonus.mempool.sh install || exit 1 - - echo "* Adding Raspiblitz API ..." - sudo /home/admin/config.scripts/blitz.web.api.sh on "${defaultAPIuser}" "${defaultAPIrepo}" "blitz-${branch}" || exit 1 - echo "* Adding Raspiblitz WebUI ..." - sudo /home/admin/config.scripts/blitz.web.ui.sh on "${defaultWEBUIuser}" "${defaultWEBUIrepo}" "release/${branch}" || exit 1 - - # set build code as new default - sudo rm -r /home/admin/assets/nginx/www_public - sudo cp -a /home/blitzapi/blitz_web/build/* /home/admin/assets/nginx/www_public - sudo chown admin:admin /home/admin/assets/nginx/www_public - sudo rm -r /home/blitzapi/blitz_web/build/* - + echo "* FATPACK activated" + /home/admin/config.scripts/blitz.fatpack.sh || exit 1 else echo "* skipping FATPACK" fi diff --git a/home.admin/_commands.sh b/home.admin/_commands.sh index 7c575f799..990e7ea1b 100755 --- a/home.admin/_commands.sh +++ b/home.admin/_commands.sh @@ -150,6 +150,15 @@ function release() { fi } +# command: fatpack +function fatpack() { + echo "Command to be called only on a fresh stopped minimal build to re-pack installs." + confirmMsg fatpack + if [ $confirm -eq 1 ]; then + sudo /home/admin/config.scripts/blitz.fatpack.sh + fi +} + # command: debug function debug() { clear diff --git a/home.admin/config.scripts/blitz.fatpack.sh b/home.admin/config.scripts/blitz.fatpack.sh new file mode 100755 index 000000000..2a09486ab --- /dev/null +++ b/home.admin/config.scripts/blitz.fatpack.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# setup script - to be called by build_sdcard.sh or on a stopped minimal build sd card image + +echo -e "\n*** FATPACK ***" + +# check if su +if [ "$EUID" -ne 0 ] + then echo "Please run as root (with sudo)" + exit 1 +fi + +echo "* Adding nodeJS Framework ..." +/home/admin/config.scripts/bonus.nodejs.sh on || exit 1 + +echo "* Optional Packages (may be needed for extended features)" +apt_install qrencode secure-delete fbi msmtp unclutter xterm python3-pyqt5 xfonts-terminus apache2-utils nginx python3-jinja2 socat libatlas-base-dev hexyl autossh + +echo "* Adding LND ..." +/home/admin/config.scripts/lnd.install.sh install || exit 1 + +echo "* Adding Core Lightning ..." +/home/admin/config.scripts/cl.install.sh install || exit 1 +echo "* Adding the cln-grpc plugin ..." +/home/admin/config.scripts/cl-plugin.cln-grpc.sh install || exit 1 + +# *** AUTO UPDATE FALLBACK NODE LIST FROM INTERNET (only in fatpack) +echo "*** FALLBACK NODE LIST ***" +# see https://github.com/rootzoll/raspiblitz/issues/1888 +sudo -u admin curl -H "Accept: application/json; indent=4" https://bitnodes.io/api/v1/snapshots/latest/ -o /home/admin/fallback.bitnodes.nodes +# Fallback Nodes List from Bitcoin Core +sudo -u admin curl https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/seeds/nodes_main.txt -o /home/admin/fallback.bitcoin.nodes + +echo "* Adding Code&Compile for WEBUI-APP: LNBITS" +/home/admin/config.scripts/bonus.lnbits.sh install || exit 1 +echo "* Adding Code&Compile for WEBUI-APP: JAM" +/home/admin/config.scripts/bonus.jam.sh install || exit 1 +echo "* Adding Code&Compile for WEBUI-APP: BTCPAYSERVER" +/home/admin/config.scripts/bonus.btcpayserver.sh install || exit 1 +echo "* Adding Code&Compile for WEBUI-APP: RTL" +/home/admin/config.scripts/bonus.rtl.sh install || exit 1 +echo "* Adding Code&Compile for WEBUI-APP: THUNDERHUB" +/home/admin/config.scripts/bonus.thunderhub.sh install || exit 1 +echo "* Adding Code&Compile for WEBUI-APP: BTC RPC EXPLORER" +/home/admin/config.scripts/bonus.btc-rpc-explorer.sh install || exit 1 +echo "* Adding Code&Compile for WEBUI-APP: MEMPOOL" +/home/admin/config.scripts/bonus.mempool.sh install || exit 1 + +echo "* Adding Raspiblitz API ..." +sudo /home/admin/config.scripts/blitz.web.api.sh on "${defaultAPIuser}" "${defaultAPIrepo}" "blitz-${branch}" || exit 1 +echo "* Adding Raspiblitz WebUI ..." +sudo /home/admin/config.scripts/blitz.web.ui.sh on "${defaultWEBUIuser}" "${defaultWEBUIrepo}" "release/${branch}" || exit 1 + +# set build code as new www default +sudo rm -r /home/admin/assets/nginx/www_public +sudo cp -a /home/blitzapi/blitz_web/build/* /home/admin/assets/nginx/www_public +sudo chown admin:admin /home/admin/assets/nginx/www_public +sudo rm -r /home/blitzapi/blitz_web/build/* \ No newline at end of file From 9bb7cb12f1397e1709609ad63fb0b3d4f4762eab Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 10 Apr 2023 03:59:07 +0200 Subject: [PATCH 35/55] get brach& repo infos --- home.admin/config.scripts/blitz.fatpack.sh | 39 ++++++++++++++++------ 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/home.admin/config.scripts/blitz.fatpack.sh b/home.admin/config.scripts/blitz.fatpack.sh index 2a09486ab..c4b488649 100755 --- a/home.admin/config.scripts/blitz.fatpack.sh +++ b/home.admin/config.scripts/blitz.fatpack.sh @@ -3,6 +3,22 @@ echo -e "\n*** FATPACK ***" +echo "# getting default user/repo from build_sdcard.sh" +sudo cp /home/admin/raspiblitz/build_sdcard.sh /home/admin/build_sdcard.sh +sudo chmod +x /home/admin/build_sdcard.sh 2>/dev/null +source <(sudo /home/admin/build_sdcard.sh -EXPORT) +branch="${githubBranch}" +echo "# branch(${branch})" +echo "# defaultAPIuser(${defaultAPIuser})" +echo "# defaultAPIrepo(${defaultAPIrepo})" +echo "# defaultWEBUIuser(${defaultWEBUIuser})" +echo "# defaultWEBUIrepo(${defaultWEBUIrepo})" + +# from cloned github repo +cd /home/admin/raspiblitz 2>/dev/null +repo=$(git config --get remote.origin.url | sed -n 's/.*\:\/\/github.com\/\([^\/]*\)\/.*/\1/p') +branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) + # check if su if [ "$EUID" -ne 0 ] then echo "Please run as root (with sudo)" @@ -30,6 +46,17 @@ sudo -u admin curl -H "Accept: application/json; indent=4" https://bitnodes.io/a # Fallback Nodes List from Bitcoin Core sudo -u admin curl https://raw.githubusercontent.com/bitcoin/bitcoin/master/contrib/seeds/nodes_main.txt -o /home/admin/fallback.bitcoin.nodes +echo "* Adding Raspiblitz API ..." +sudo /home/admin/config.scripts/blitz.web.api.sh on "${defaultAPIuser}" "${defaultAPIrepo}" "blitz-${branch}" || exit 1 +echo "* Adding Raspiblitz WebUI ..." +sudo /home/admin/config.scripts/blitz.web.ui.sh on "${defaultWEBUIuser}" "${defaultWEBUIrepo}" "release/${branch}" || exit 1 + +# set build code as new www default +sudo rm -r /home/admin/assets/nginx/www_public +sudo cp -a /home/blitzapi/blitz_web/build/* /home/admin/assets/nginx/www_public +sudo chown admin:admin /home/admin/assets/nginx/www_public +sudo rm -r /home/blitzapi/blitz_web/build/* + echo "* Adding Code&Compile for WEBUI-APP: LNBITS" /home/admin/config.scripts/bonus.lnbits.sh install || exit 1 echo "* Adding Code&Compile for WEBUI-APP: JAM" @@ -45,13 +72,5 @@ echo "* Adding Code&Compile for WEBUI-APP: BTC RPC EXPLORER" echo "* Adding Code&Compile for WEBUI-APP: MEMPOOL" /home/admin/config.scripts/bonus.mempool.sh install || exit 1 -echo "* Adding Raspiblitz API ..." -sudo /home/admin/config.scripts/blitz.web.api.sh on "${defaultAPIuser}" "${defaultAPIrepo}" "blitz-${branch}" || exit 1 -echo "* Adding Raspiblitz WebUI ..." -sudo /home/admin/config.scripts/blitz.web.ui.sh on "${defaultWEBUIuser}" "${defaultWEBUIrepo}" "release/${branch}" || exit 1 - -# set build code as new www default -sudo rm -r /home/admin/assets/nginx/www_public -sudo cp -a /home/blitzapi/blitz_web/build/* /home/admin/assets/nginx/www_public -sudo chown admin:admin /home/admin/assets/nginx/www_public -sudo rm -r /home/blitzapi/blitz_web/build/* \ No newline at end of file +# set default display to LCD +sudo /home/admin/config.scripts/blitz.display.sh set-display lcd \ No newline at end of file From d94412984c5fafc48f53f505d6bd2285b4a94b3d Mon Sep 17 00:00:00 2001 From: rootzoll Date: Mon, 10 Apr 2023 04:04:03 +0200 Subject: [PATCH 36/55] clean up fatpack --- home.admin/config.scripts/blitz.fatpack.sh | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/home.admin/config.scripts/blitz.fatpack.sh b/home.admin/config.scripts/blitz.fatpack.sh index c4b488649..4ad62f6dc 100755 --- a/home.admin/config.scripts/blitz.fatpack.sh +++ b/home.admin/config.scripts/blitz.fatpack.sh @@ -3,6 +3,12 @@ echo -e "\n*** FATPACK ***" +# check if su +if [ "$EUID" -ne 0 ] + then echo "Please run as root (with sudo)" + exit 1 +fi + echo "# getting default user/repo from build_sdcard.sh" sudo cp /home/admin/raspiblitz/build_sdcard.sh /home/admin/build_sdcard.sh sudo chmod +x /home/admin/build_sdcard.sh 2>/dev/null @@ -14,17 +20,6 @@ echo "# defaultAPIrepo(${defaultAPIrepo})" echo "# defaultWEBUIuser(${defaultWEBUIuser})" echo "# defaultWEBUIrepo(${defaultWEBUIrepo})" -# from cloned github repo -cd /home/admin/raspiblitz 2>/dev/null -repo=$(git config --get remote.origin.url | sed -n 's/.*\:\/\/github.com\/\([^\/]*\)\/.*/\1/p') -branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) - -# check if su -if [ "$EUID" -ne 0 ] - then echo "Please run as root (with sudo)" - exit 1 -fi - echo "* Adding nodeJS Framework ..." /home/admin/config.scripts/bonus.nodejs.sh on || exit 1 From 4f93dee6979b36714392976cf722a27cf105a3e7 Mon Sep 17 00:00:00 2001 From: flyerbear <104665796+flyerbear@users.noreply.github.com> Date: Thu, 13 Apr 2023 03:03:23 -0700 Subject: [PATCH 37/55] Update README.md for LND and CLN versions (#3745) Update README to include updated LND and CLN versions from CHANGES.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e02edf762..d94688476 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ _Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with an optional Display._ -`Version 1.9.0RC2 with bitcoin 24.0.1, lnd 0.15.5 & Core Lightning 22.11.1` ([api](https://github.com/fusion44/blitz_api)|[web](https://github.com/cstenglein/raspiblitz-web)) +`Version 1.9.0RC2 with bitcoin 24.0.1, lnd 0.16.0 & Core Lightning 23.02` ([api](https://github.com/fusion44/blitz_api)|[web](https://github.com/cstenglein/raspiblitz-web)) ![RaspiBlitz](pictures/raspiblitz.jpg) From 3b52569be5f44b3d03eb289532560c9e0d9e8e3c Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Thu, 13 Apr 2023 11:05:23 +0100 Subject: [PATCH 38/55] web.api: fix sed syntax and format (#3749) --- home.admin/config.scripts/blitz.web.api.sh | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/home.admin/config.scripts/blitz.web.api.sh b/home.admin/config.scripts/blitz.web.api.sh index ec9831c65..e90abb981 100644 --- a/home.admin/config.scripts/blitz.web.api.sh +++ b/home.admin/config.scripts/blitz.web.api.sh @@ -33,7 +33,7 @@ if [ "$1" = "update-config" ]; then fi # prepare config update - cd /home/blitzapi/blitz_api + cd /home/blitzapi/blitz_api || exit 1 secret=$(cat ./.env 2>/dev/null | grep "secret=" | cut -d "=" -f2) cp ./.env_sample ./.env dateStr=$(date) @@ -44,7 +44,7 @@ if [ "$1" = "update-config" ]; then # configure access token secret if [ "${secret}" == "" ] || [ "${secret}" == "please_please_update_me_please" ]; then echo "# init secret ..." - secret=$(dd if=/dev/urandom bs=256 count=1 2> /dev/null | shasum -a256 | cut -d " " -f1) + secret=$(dd if=/dev/urandom bs=256 count=1 2>/dev/null | shasum -a256 | cut -d " " -f1) else echo "# use existing secret" fi @@ -78,13 +78,13 @@ if [ "$1" = "update-config" ]; then sed -i "s/^lnd_grpc_ip=.*/lnd_grpc_ip=127.0.0.1/g" ./.env sed -i "s/^lnd_macaroon=.*/lnd_macaroon=${adminMacaroon}/g" ./.env sed -i "s/^lnd_cert=.*/lnd_cert=${tlsCert}/g" ./.env - if [ "${chain}" == "main" ];then + if [ "${chain}" == "main" ]; then L2rpcportmod=0 portprefix="" - elif [ "${chain}" == "test" ];then + elif [ "${chain}" == "test" ]; then L2rpcportmod=1 portprefix=1 - elif [ "${chain}" == "sig" ];then + elif [ "${chain}" == "sig" ]; then L2rpcportmod=3 portprefix=3 fi @@ -96,7 +96,7 @@ if [ "$1" = "update-config" ]; then echo "# CONFIG Web API Lightning --> CL" sed -i "s/^ln_node=.*/ln_node=cln_jrpc/g" ./.env - sed -i "s/^cln_jrpc_path=.*/cln_jrpc_path="/mnt/hdd/app-data/.lightning/bitcoin/lightning-rpc"/g" ./.env + sed -i "s#^cln_jrpc_path=.*#cln_jrpc_path=\"/mnt/hdd/app-data/.lightning/bitcoin/lightning-rpc\"#g" ./.env # make sure cln-grpc is on # sudo /home/admin/config.scripts/cl-plugin.cln-grpc.sh on mainnet @@ -122,9 +122,9 @@ if [ "$1" = "update-config" ]; then fi else - echo "# CONFIG Web API ... still in setup, skip bitcoin & lightning" - sed -i "s/^network=.*/network=/g" ./.env - sed -i "s/^ln_node=.*/ln_node=/g" ./.env + echo "# CONFIG Web API ... still in setup, skip bitcoin & lightning" + sed -i "s/^network=.*/network=/g" ./.env + sed -i "s/^ln_node=.*/ln_node=/g" ./.env fi echo "# '.env' config updates - blitzapi maybe needs to be restarted" @@ -230,12 +230,12 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then fi /usr/sbin/usermod --append --groups bitcoin blitzapi # symlink the CLN data dir for blitzapi - sudo rm -rf /home/blitzapi/.lightning # not a symlink.. delete it silently + sudo rm -rf /home/blitzapi/.lightning # not a symlink.. delete it silently # create symlink sudo -u blitzapi ln -s /mnt/hdd/app-data/.lightning /home/blitzapi/ cd /home/blitzapi || exit 1 - + # git clone https://github.com/fusion44/blitz_api.git /home/blitzapi/blitz_api echo "# clone github: ${GITHUB_USER}/${GITHUB_REPO}" if ! sudo -u blitzapi git clone https://github.com/${GITHUB_USER}/${GITHUB_REPO}.git blitz_api; then @@ -264,7 +264,7 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then echo "error='pip install failed'" exit 1 fi - + # prepare systemd service echo " [Unit] @@ -330,7 +330,7 @@ if [ "$1" = "update-code" ]; then echo "# Update Web API CODE" systemctl stop blitzapi sudo chown -R blitzapi:blitzapi /home/blitzapi/blitz_api - cd /home/blitzapi/blitz_api + cd /home/blitzapi/blitz_api || exit 1 if [ "$currentBranch" == "" ]; then currentBranch=$(sudo -u blitzapi git rev-parse --abbrev-ref HEAD) fi From fa156fbd526c76c8ea8edd55de908e5ae63028d2 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Thu, 13 Apr 2023 11:51:48 +0100 Subject: [PATCH 39/55] fulcrum update to v1.9.1, add notes (#3748) --- CHANGES.md | 1 + home.admin/config.scripts/bonus.fulcrum.sh | 37 +++++++++++----------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c0bf35e2c..6bc20e26e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -30,6 +30,7 @@ - Update: Circuitbreaker with webUI [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) - Update: Suez - Channel Visualization for LND & CL [details](https://github.com/prusnak/suez) - Update: Tallycoin Connect v1.8.0 [details](https://github.com/djbooth007/tallycoin_connect/releases/tag/v1.8.0) +- Update: Fulcrum install script (CLI only) v1.9.1 [details](https://github.com/cculianu/Fulcrum/releases/tag/v1.9.1) - Fixed: SCB/Emergency-Backup to USB drive (now also with CLN emergency.recover file) - Info: Run RaspiBlitz on Proxmox [details](https://github.com/rootzoll/raspiblitz/tree/dev/alternative.platforms/Proxmox) - Info: IP2Tor fix fulmo shop & added new ip2tor.com shop diff --git a/home.admin/config.scripts/bonus.fulcrum.sh b/home.admin/config.scripts/bonus.fulcrum.sh index bf008cc9a..fcc1d1502 100644 --- a/home.admin/config.scripts/bonus.fulcrum.sh +++ b/home.admin/config.scripts/bonus.fulcrum.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/cculianu/Fulcrum/releases -fulcrumVersion="1.7.0" +fulcrumVersion="1.9.1" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -12,7 +12,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then exit 1 fi - if [ "$1" = on ]; then # ?wait until txindex finishes? /home/admin/config.scripts/network.txindex.sh on @@ -26,6 +25,7 @@ if [ "$1" = on ]; then source <(/home/admin/_cache.sh get state) if [ "${state}" == "ready" ]; then + echo "# Restarting bitcoind" sudo systemctl restart bitcoind fi @@ -51,26 +51,25 @@ if [ "$1" = on ]; then # get the PGP key curl https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt | sudo -u fulcrum gpg --import - # look for 'Good signature' + echo "# Look for 'Good signature'" sudo -u fulcrum gpg --verify Fulcrum-${fulcrumVersion}-${build}.tar.gz.asc || exit 1 - # look for 'OK' + echo "# Look for 'OK'" sudo -u fulcrum sha256sum -c Fulcrum-${fulcrumVersion}-${build}.tar.gz.sha256sum --ignore-missing || exit 1 - # decompress + echo "# Unpack" sudo -u fulcrum tar -xvf Fulcrum-${fulcrumVersion}-${build}.tar.gz - # create the database directory in /mnt/hdd/app-storage (on the disk) + echo "# Create the database directory in /mnt/hdd/app-storage (on the disk)" sudo mkdir -p /mnt/hdd/app-storage/fulcrum/db sudo chown -R fulcrum:fulcrum /mnt/hdd/app-storage/fulcrum - # create a symlink to /home/fulcrum/.fulcrum + echo "# Create a symlink to /home/fulcrum/.fulcrum" sudo ln -s /mnt/hdd/app-storage/fulcrum /home/fulcrum/.fulcrum sudo chown -R fulcrum:fulcrum /home/fulcrum/.fulcrum - # Create a config file - echo "# Getting RPC credentials from the bitcoin.conf" - #read PASSWORD_B + echo "# Create a config file" + echo "# Get the RPC credentials from the bitcoin.conf" RPC_USER=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf | grep rpcuser | cut -c 9-) PASSWORD_B=$(sudo cat /mnt/hdd/bitcoin/bitcoin.conf | grep rpcpassword | cut -c 13-) echo "\ @@ -96,7 +95,7 @@ tcp = 0.0.0.0:50021 # ssl via nginx " | sudo -u fulcrum tee /home/fulcrum/.fulcrum/fulcrum.conf - # Create a systemd service + echo "# Create a systemd service" echo "\ [Unit] Description=Fulcrum @@ -119,12 +118,10 @@ WantedBy=multi-user.target sudo systemctl enable fulcrum if [ "${state}" == "ready" ]; then + echo "# Starting the fulcrum.service" sudo systemctl start fulcrum fi - # sudo journalctl -fu fulcrum - # sudo systemctl status fulcrum - sudo ufw allow 50021 comment 'Fulcrum TCP' sudo ufw allow 50022 comment 'Fulcrum SSL' @@ -135,7 +132,7 @@ WantedBy=multi-user.target elif [ ${isConfigured} -eq 0 ]; then isStream=$(sudo cat /etc/nginx/nginx.conf 2>/dev/null | grep -c 'stream {') if [ ${isStream} -eq 0 ]; then - echo " + echo " stream { upstream fulcrum { server 127.0.0.1:50021; @@ -152,9 +149,9 @@ stream { } }" | sudo tee -a /etc/nginx/nginx.conf - elif [ ${isStream} -eq 1 ]; then - sudo truncate -s-2 /etc/nginx/nginx.conf - echo " + elif [ ${isStream} -eq 1 ]; then + sudo truncate -s-2 /etc/nginx/nginx.conf + echo " upstream fulcrum { server 127.0.0.1:50021; } @@ -184,8 +181,10 @@ stream { # setting value in raspiblitz config /home/admin/config.scripts/blitz.conf.sh set fulcrum "on" -fi + echo "# Follow the logs with the command:" + echo "sudo journalctl -fu fulcrum" +fi if [ "$1" = off ]; then sudo systemctl disable fulcrum From 158c077dee0a928c137912b75c0c52896206000a Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Mon, 17 Apr 2023 11:07:26 +0200 Subject: [PATCH 40/55] Create pull_request_template.md (#3762) --- pull_request_template.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 pull_request_template.md diff --git a/pull_request_template.md b/pull_request_template.md new file mode 100644 index 000000000..85fd51d8e --- /dev/null +++ b/pull_request_template.md @@ -0,0 +1,2 @@ +Thank you for your contribution to RaspiBlitz. Before submitting this PR, please make sure: +- [ ] That its based against the `dev` brach - not the default release branch. From 4217baa71443aafc40f267eeaf0fb1564e7e38f7 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Wed, 19 Apr 2023 10:53:08 +0100 Subject: [PATCH 41/55] joinmarket: check for the bitcoin core wallet last (#3752) --- home.admin/config.scripts/bonus.joinmarket.sh | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/home.admin/config.scripts/bonus.joinmarket.sh b/home.admin/config.scripts/bonus.joinmarket.sh index d36f00b46..1df8b2f50 100755 --- a/home.admin/config.scripts/bonus.joinmarket.sh +++ b/home.admin/config.scripts/bonus.joinmarket.sh @@ -159,25 +159,6 @@ if [ "$1" = "1" ] || [ "$1" = "on" ]; then sudo /home/admin/config.scripts/bonus.joinmarket.sh install fi - # make sure the Bitcoin Core wallet is on - /home/admin/config.scripts/network.wallet.sh on - if [ $(/usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf listwallets | grep -c wallet.dat) -eq 0 ]; then - echo "# Create a non-descriptor wallet.dat" - /usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf -named createwallet wallet_name=wallet.dat descriptors=false - else - isDescriptor=$(/usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf -rpcwallet=wallet.dat getwalletinfo | grep -c '"descriptors": true,') - if [ "$isDescriptor" -gt 0 ]; then - # unload - bitcoin-cli unloadwallet wallet.dat - echo "# Move the wallet.dat with descriptors to /mnt/hdd/bitcoin/descriptors" - sudo mv /mnt/hdd/bitcoin/wallet.dat /mnt/hdd/bitcoin/descriptors - echo "# Create a non-descriptor wallet.dat" - bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf -named createwallet wallet_name=wallet.dat descriptors=false - else - echo "# The non-descriptor wallet.dat is loaded in bitcoind." - fi - fi - # store JoinMarket data on HDD mkdir /mnt/hdd/app-data/.joinmarket 2>/dev/null @@ -212,6 +193,25 @@ if [ -z \"\$TMUX\" ]; then fi " | sudo -u joinmarket tee -a /home/joinmarket/.bashrc + # make sure the Bitcoin Core wallet is on + /home/admin/config.scripts/network.wallet.sh on + if [ $(/usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf listwallets | grep -c wallet.dat) -eq 0 ]; then + echo "# Create a non-descriptor wallet.dat" + /usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf -named createwallet wallet_name=wallet.dat descriptors=false + else + isDescriptor=$(/usr/local/bin/bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf -rpcwallet=wallet.dat getwalletinfo | grep -c '"descriptors": true,') + if [ "$isDescriptor" -gt 0 ]; then + # unload + bitcoin-cli unloadwallet wallet.dat + echo "# Move the wallet.dat with descriptors to /mnt/hdd/bitcoin/descriptors" + sudo mv /mnt/hdd/bitcoin/wallet.dat /mnt/hdd/bitcoin/descriptors + echo "# Create a non-descriptor wallet.dat" + bitcoin-cli -conf=/mnt/hdd/bitcoin/bitcoin.conf -named createwallet wallet_name=wallet.dat descriptors=false + else + echo "# The non-descriptor wallet.dat is loaded in bitcoind." + fi + fi + # configure joinmarket (includes a check if it is installed) if sudo -u joinmarket /home/joinmarket/start.joininbox.sh; then echo "# Start to use by logging in to the 'joinmarket' user with:" From 34bac321f496aebbd990d51919563f2511e51113 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Sat, 22 Apr 2023 20:14:25 +0100 Subject: [PATCH 42/55] joininbox update to v0.7.7 (#3768) --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.joinmarket.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 6bc20e26e..527b1962a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,7 +24,7 @@ - Update: ItchySats 0.7.0 [details](https://github.com/itchysats/itchysats/releases/tag/0.7.0) - Update: Channel Tools (chantools) v0.10.5 [details](https://github.com/guggero/chantools/releases/tag/v0.10.5) - Update: JoinMarket v0.9.9 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.9) -- Update: JoininBox v0.7.6 [details](https://github.com/openoms/joininbox/releases/tag/v0.7.6) +- Update: JoininBox v0.7.7 [details](https://github.com/openoms/joininbox/releases/tag/v0.7.7) - Update: Balance of Satoshis 13.15.0 (bos) [details](https://github.com/alexbosworth/balanceofsatoshis/blob/master/CHANGELOG.md#13150) - Update: lndmanage 0.14.2 [details](https://github.com/bitromortac/lndmanage) - Update: Circuitbreaker with webUI [details](https://github.com/lightningequipment/circuitbreaker/blob/master/README.md) diff --git a/home.admin/config.scripts/bonus.joinmarket.sh b/home.admin/config.scripts/bonus.joinmarket.sh index 1df8b2f50..36cfdc503 100755 --- a/home.admin/config.scripts/bonus.joinmarket.sh +++ b/home.admin/config.scripts/bonus.joinmarket.sh @@ -6,7 +6,7 @@ # https://github.com/openoms/joininbox # https://github.com/openoms/joininbox/tags -JBTAG="v0.7.6" # installs JoinMarket v0.9.9 +JBTAG="v0.7.7" # installs JoinMarket v0.9.9 # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then From 084304531abc0cff6136531acafb29e20f2959bf Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Sun, 23 Apr 2023 23:14:44 +0100 Subject: [PATCH 43/55] btcpay update to v1.9.1, migration to postgres (#3756) * btcpay update to v1.9.0, migration to postgres * update CHANGES.md * always fix postgres files ownership * add socksendpoint=127.0.0.1:9050 to fix #3729 * btcpay update to v1.9.1 * update changes * create config directory in BtcPayConfig --- CHANGES.md | 4 +-- .../config.scripts/bonus.btcpayserver.sh | 33 ++++++++----------- home.admin/config.scripts/bonus.postgresql.sh | 4 +++ 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 527b1962a..4631e9b58 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,14 +13,14 @@ - New on WebUI: Jam (JoinMarket Web UI) v0.1.5 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.5) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) - Update: LND v0.16.0-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.0-beta) -- Update: Core Lightning v23.02 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02) +- Update: Core Lightning v23.02.2 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02.2) - Update: C-lightningREST v0.10.2 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.2) - Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023) - Update: Lightning Terminal v0.8.6-alpha [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.8.6-alpha) - Update: RTL v0.13.6 with update option [details](https://github.com/Ride-The-Lightning/RTL/releases/tag/v0.13.6) - Update: Thunderhub v0.13.16 with balance sharing disabled [details](https://github.com/apotdevin/thunderhub/releases/tag/v0.13.16) - Update: LNbits 0.10.2 [details](https://github.com/lnbits/lnbits/releases/tag/0.10.2) -- Update: BTCPayServer 1.8.2 (using postgres for new installs) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.8.2) +- Update: BTCPayServer 1.9.1 (postgres by default with sqlite migration) [details](https://github.com/btcpayserver/btcpayserver/releases/tag/v1.9.1) - Update: ItchySats 0.7.0 [details](https://github.com/itchysats/itchysats/releases/tag/0.7.0) - Update: Channel Tools (chantools) v0.10.5 [details](https://github.com/guggero/chantools/releases/tag/v0.10.5) - Update: JoinMarket v0.9.9 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.9) diff --git a/home.admin/config.scripts/bonus.btcpayserver.sh b/home.admin/config.scripts/bonus.btcpayserver.sh index d28bbb26f..625487456 100644 --- a/home.admin/config.scripts/bonus.btcpayserver.sh +++ b/home.admin/config.scripts/bonus.btcpayserver.sh @@ -5,7 +5,7 @@ # https://github.com/dgarage/NBXplorer/tags NBXplorerVersion="v2.3.62" # https://github.com/btcpayserver/btcpayserver/releases -BTCPayVersion="v1.8.2" +BTCPayVersion="v1.9.1" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -58,25 +58,20 @@ nomigrateevts=1 function BtcPayConfig() { # set thumbprint FINGERPRINT=$(openssl x509 -noout -fingerprint -sha256 -inform pem -in /home/btcpay/.lnd/tls.cert | cut -d"=" -f2) - if sudo ls /mnt/hdd/app-data/.btcpayserver/Main/sqllite.db 1>/dev/null 2>&1; then - echo "# sqlite database exists" - databaseOption="# keep using sqlite as /mnt/hdd/app-data/.btcpayserver/Main/sqllite.db exists (configured in the btcpayserver.service)" + # set up postgres + if sudo -u postgres psql -c '\l' | grep btcpaymainnet; then + echo "# btcpaymainnet database already exists" else - echo "# sqlite database does not exist, using postgresql" - databaseOption="postgres=User ID=btcpay;Host=localhost;Port=5432;Application Name=btcpay;MaxPoolSize=20;Database=btcpaymainnet;Password='raspiblitz';" - if sudo -u postgres psql -c '\l' | grep btcpaymainnet; then - echo "# btcpaymainnet database already exists" - else - echo "# Generate the database for btcpay" - sudo -u postgres psql -c "CREATE DATABASE btcpaymainnet TEMPLATE template0 LC_CTYPE 'C' LC_COLLATE 'C' ENCODING 'UTF8';" - sudo -u postgres psql -c "create user btcpay with encrypted password 'raspiblitz';" - sudo -u postgres psql -c "grant all privileges on database btcpaymainnet to btcpay;" - fi - echo "# List databases with: sudo -u postgres psql -c '\l'" - sudo -u postgres psql -c '\l' + echo "# Generate the database for btcpay" + sudo -u postgres psql -c "CREATE DATABASE btcpaymainnet TEMPLATE template0 LC_CTYPE 'C' LC_COLLATE 'C' ENCODING 'UTF8';" + sudo -u postgres psql -c "create user btcpay with encrypted password 'raspiblitz';" + sudo -u postgres psql -c "grant all privileges on database btcpaymainnet to btcpay;" fi + echo "# List databases with: sudo -u postgres psql -c '\l'" + sudo -u postgres psql -c '\l' echo "# Regenerate the btcpayserver settings (includes the LND TLS thumbprint)" # https://docs.btcpayserver.org/Deployment/ManualDeploymentExtended/#3-create-a-configuration-file + sudo -u btcpay mkdir -p /home/btcpay/.btcpayserver/Main echo " ### Global settings ### network=mainnet @@ -85,20 +80,21 @@ network=mainnet port=23000 bind=127.0.0.1 externalurl=https://$BTCPayDomain +socksendpoint=127.0.0.1:9050 ### NBXplorer settings ### BTC.explorer.url=http://127.0.0.1:24444/ BTC.lightning=type=lnd-rest;server=https://127.0.0.1:8080/;macaroonfilepath=/home/btcpay/admin.macaroon;certthumbprint=$FINGERPRINT ### Database ### -${databaseOption} +postgres=User ID=btcpay;Host=localhost;Port=5432;Application Name=btcpay;MaxPoolSize=20;Database=btcpaymainnet;Password='raspiblitz'; explorer.postgres=User ID=nbxplorer;Host=localhost;Port=5432;Application Name=nbxplorer;MaxPoolSize=20;Database=nbxplorermainnet;Password='raspiblitz'; " | sudo -u btcpay tee /home/btcpay/.btcpayserver/Main/settings.config } function BtcPayService() { if sudo ls /mnt/hdd/app-data/.btcpayserver/Main/sqllite.db 1>/dev/null 2>&1; then - echo "# sqlite database exists" + echo "# sqlite database exists - will be ignored after the migration to postgresql" databaseOption=" -- --sqlitefile=sqllite.db" else echo "# sqlite database does not exist, using postgresql" @@ -619,7 +615,6 @@ WantedBy=multi-user.target echo "# Because the system is not 'ready' the service 'btcpayserver' will not be started at this point .. it is enabled and will start on next reboot" fi - sudo -u btcpay mkdir -p /home/btcpay/.btcpayserver/Main/ if [ "${lnd}" = on ]; then /home/admin/config.scripts/bonus.btcpayserver.sh write-tls-macaroon fi diff --git a/home.admin/config.scripts/bonus.postgresql.sh b/home.admin/config.scripts/bonus.postgresql.sh index ed5fd10bb..61ae25ebb 100644 --- a/home.admin/config.scripts/bonus.postgresql.sh +++ b/home.admin/config.scripts/bonus.postgresql.sh @@ -59,6 +59,10 @@ if [ "$command" = "1" ] || [ "$command" = "on" ]; then sudo rm -rf $postgres_datadir # not a symlink.. delete it silently sudo ln -s /mnt/hdd/app-data/postgresql /var/lib/ fi + + # always fix ownership + sudo chown -R postgres:postgres /mnt/hdd/app-data/postgresql + sudo systemctl enable postgresql sudo systemctl start postgresql From 42126c47ebf77da74de77cc4eba4f37a8dbe1a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Mon, 24 Apr 2023 00:38:11 +0200 Subject: [PATCH 44/55] bump lnbits to 0.10.4.1 (#3769) :) updates! --- home.admin/config.scripts/bonus.lnbits.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index a2c7a02dd..579664b88 100644 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -3,7 +3,7 @@ # https://github.com/lnbits/lnbits # https://github.com/lnbits/lnbits/releases -tag="0.10.2" +tag="0.10.4.1" VERSION="${tag}" # command info From 6f4f77b1eb6c8f22b40d35c4e8ba19f6595abbe1 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:54:55 +0100 Subject: [PATCH 45/55] lnd update to v0.16.1-beta (#3774) --- CHANGES.md | 2 +- README.md | 2 +- home.admin/config.scripts/lnd.install.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4631e9b58..b0e9100da 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,7 +12,7 @@ - New: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186) - New on WebUI: Jam (JoinMarket Web UI) v0.1.5 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.5) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) -- Update: LND v0.16.0-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.0-beta) +- Update: LND v0.16.1-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.1-beta) - Update: Core Lightning v23.02.2 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02.2) - Update: C-lightningREST v0.10.2 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.2) - Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023) diff --git a/README.md b/README.md index d94688476..8c122b6e9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ _Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with an optional Display._ -`Version 1.9.0RC2 with bitcoin 24.0.1, lnd 0.16.0 & Core Lightning 23.02` ([api](https://github.com/fusion44/blitz_api)|[web](https://github.com/cstenglein/raspiblitz-web)) +`Version 1.9.0RC2 with bitcoin 24.0.1, lnd 0.16.1 & Core Lightning 23.02` ([api](https://github.com/fusion44/blitz_api)|[web](https://github.com/cstenglein/raspiblitz-web)) ![RaspiBlitz](pictures/raspiblitz.jpg) diff --git a/home.admin/config.scripts/lnd.install.sh b/home.admin/config.scripts/lnd.install.sh index c6e946f99..afe5622cf 100644 --- a/home.admin/config.scripts/lnd.install.sh +++ b/home.admin/config.scripts/lnd.install.sh @@ -4,7 +4,7 @@ ## based on https://raspibolt.github.io/raspibolt/raspibolt_40_lnd.html#lightning-lnd ## see LND releases: https://github.com/lightningnetwork/lnd/releases ### If you change here - make sure to also change interims version in lnd.update.sh #! -lndVersion="0.16.0-beta" +lndVersion="0.16.1-beta" # olaoluwa #PGPauthor="roasbeef" From 8109114d9e53856e9e47f0ea1b3c7315b046cae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Fri, 28 Apr 2023 10:58:36 +0200 Subject: [PATCH 46/55] fix reverse proxz issue, bind to 0.0.0.0 (#3776) --- home.admin/config.scripts/bonus.lnbits.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/config.scripts/bonus.lnbits.sh b/home.admin/config.scripts/bonus.lnbits.sh index 579664b88..1337f7b6c 100644 --- a/home.admin/config.scripts/bonus.lnbits.sh +++ b/home.admin/config.scripts/bonus.lnbits.sh @@ -781,7 +781,7 @@ After=bitcoind.service [Service] WorkingDirectory=/home/lnbits/lnbits ExecStartPre=/home/admin/config.scripts/bonus.lnbits.sh prestart -ExecStart=/bin/sh -c 'cd /home/lnbits/lnbits && poetry run lnbits --port 5000' +ExecStart=/bin/sh -c 'cd /home/lnbits/lnbits && poetry run lnbits --port 5000 --host 0.0.0.0' User=lnbits Restart=always TimeoutSec=120 From c3715c2194453dfbf9709a291c43dc0c1d0bb06c Mon Sep 17 00:00:00 2001 From: Dipun Mistry Date: Wed, 3 May 2023 18:21:44 +0300 Subject: [PATCH 47/55] minor fixes I found as I ran scripts manually (#3767) * minor fixes I found as I ran scripts manually * removed use of sudo & added sudo root check --- build_sdcard.sh | 266 +++++++++++++------------ home.admin/config.scripts/blitz.web.sh | 2 +- 2 files changed, 137 insertions(+), 131 deletions(-) diff --git a/build_sdcard.sh b/build_sdcard.sh index 5fc8478d8..280ab807e 100644 --- a/build_sdcard.sh +++ b/build_sdcard.sh @@ -48,6 +48,12 @@ if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then usage fi +# check if started with sudo +if [ "$EUID" -ne 0 ]; then + echo "error='run as root / may use sudo'" + exit 1 +fi + if [ "$1" = "-EXPORT" ] || [ "$1" = "EXPORT" ]; then cd /home/admin/raspiblitz 2>/dev/null activeBranch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) @@ -143,7 +149,7 @@ range_argument(){ } apt_install(){ - sudo apt install -y ${@} + apt install -y ${@} if [ $? -eq 100 ]; then echo "FAIL! apt failed to install needed packages!" echo ${@} @@ -159,7 +165,7 @@ done ## if any of the required programs are not installed, update and if successfull, install packages if [ -n "${general_utils_install}" ]; then echo -e "\n*** SOFTWARE UPDATE ***" - sudo apt update -y || exit 1 + apt update -y || exit 1 apt_install ${general_utils_install} fi @@ -274,17 +280,17 @@ sleep 3 ## give time to cancel export DEBIAN_FRONTEND=noninteractive echo "*** Prevent sleep ***" # on all platforms https://wiki.debian.org/Suspend -sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target -sudo mkdir /etc/systemd/sleep.conf.d +systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target +mkdir /etc/systemd/sleep.conf.d echo "[Sleep] AllowSuspend=no AllowHibernation=no AllowSuspendThenHibernate=no -AllowHybridSleep=no" | sudo tee /etc/systemd/sleep.conf.d/nosuspend.conf -sudo mkdir /etc/systemd/logind.conf.d +AllowHybridSleep=no" | tee /etc/systemd/sleep.conf.d/nosuspend.conf +mkdir /etc/systemd/logind.conf.d echo "[Login] HandleLidSwitch=ignore -HandleLidSwitchDocked=ignore" | sudo tee /etc/systemd/logind.conf.d/nosuspend.conf +HandleLidSwitchDocked=ignore" | tee /etc/systemd/logind.conf.d/nosuspend.conf # FIXING LOCALES # https://github.com/rootzoll/raspiblitz/issues/138 @@ -293,25 +299,25 @@ HandleLidSwitchDocked=ignore" | sudo tee /etc/systemd/logind.conf.d/nosuspend.co if [ "${baseimage}" = "raspios_arm64" ]||[ "${baseimage}" = "debian_rpi64" ]||[ "${baseimage}" = "armbian" ]; then echo -e "\n*** FIXING LOCALES FOR BUILD ***" - sudo sed -i "s/^# en_US.UTF-8 UTF-8.*/en_US.UTF-8 UTF-8/g" /etc/locale.gen - sudo sed -i "s/^# en_US ISO-8859-1.*/en_US ISO-8859-1/g" /etc/locale.gen - sudo locale-gen + sed -i "s/^# en_US.UTF-8 UTF-8.*/en_US.UTF-8 UTF-8/g" /etc/locale.gen + sed -i "s/^# en_US ISO-8859-1.*/en_US ISO-8859-1/g" /etc/locale.gen + locale-gen export LANGUAGE=en_US.UTF-8 export LANG=en_US.UTF-8 if [ ! -f /etc/apt/sources.list.d/raspi.list ]; then echo "# Add the archive.raspberrypi.org/debian/ to the sources.list" - echo "deb http://archive.raspberrypi.org/debian/ bullseye main" | sudo tee /etc/apt/sources.list.d/raspi.list + echo "deb http://archive.raspberrypi.org/debian/ bullseye main" | tee /etc/apt/sources.list.d/raspi.list fi fi echo "*** Remove unnecessary packages ***" -sudo apt remove --purge -y libreoffice* oracle-java* chromium-browser nuscratch scratch sonic-pi plymouth python2 vlc* cups -sudo apt clean -y -sudo apt autoremove -y +apt remove --purge -y libreoffice* oracle-java* chromium-browser nuscratch scratch sonic-pi plymouth python2 vlc* cups +apt clean -y +apt autoremove -y echo -e "\n*** UPDATE Debian***" -sudo apt update -y -sudo apt upgrade -f -y +apt update -y +apt upgrade -f -y echo -e "\n*** SOFTWARE UPDATE ***" # based on https://raspibolt.org/system-configuration.html#system-update @@ -342,23 +348,23 @@ server_utils="rsync net-tools xxd netcat openssh-client openssh-sftp-server sshp [ "${architecture}" = "amd64" ] && amd64_dependencies="network-manager" # add amd64 dependency apt_install ${general_utils} ${python_dependencies} ${server_utils} ${armbian_dependencies} ${amd64_dependencies} -sudo apt clean -y -sudo apt autoremove -y +apt clean -y +apt autoremove -y echo -e "\n*** Python DEFAULT libs & dependencies ***" if [ -f "/usr/bin/python3.9" ]; then # use python 3.9 if available - sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 + update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 echo "python calls python3.9" elif [ -f "/usr/bin/python3.10" ]; then # use python 3.10 if available - sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 - sudo ln -s /usr/bin/python3.10 /usr/bin/python3.9 + update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 + ln -s /usr/bin/python3.10 /usr/bin/python3.9 echo "python calls python3.10" elif [ -f "/usr/bin/python3.8" ]; then # use python 3.8 if available - sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 + update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 echo "python calls python3.8" else echo "# FAIL #" @@ -367,7 +373,7 @@ else fi # make sure /usr/bin/pip exists (and calls pip3 in Debian Buster) -sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 +update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 # 1. libs (for global python scripts) # grpcio==1.42.0 googleapis-common-protos==1.53.0 toml==0.10.2 j2cli==0.3.10 requests[socks]==2.21.0 # 2. For TorBox bridges python scripts (pip3) https://github.com/radio24/TorBox/blob/master/requirements.txt @@ -383,8 +389,8 @@ echo -e "\n*** PREPARE ${baseimage} ***" # make sure the pi user is present if [ "$(compgen -u | grep -c pi)" -eq 0 ];then echo "# Adding the user pi" - sudo adduser --disabled-password --gecos "" pi - sudo adduser pi sudo + adduser --disabled-password --gecos "" pi + adduser pi sudo fi # special prepare when Raspbian @@ -393,12 +399,12 @@ if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; echo -e "\n*** PREPARE RASPBERRY OS VARIANTS ***" apt_install raspi-config # do memory split (16MB) - sudo raspi-config nonint do_memory_split 16 + raspi-config nonint do_memory_split 16 # set to wait until network is available on boot (0 seems to yes) - sudo raspi-config nonint do_boot_wait 0 + raspi-config nonint do_boot_wait 0 # set WIFI country so boot does not block # this will undo the softblock of rfkill on RaspiOS - [ "${wifi_region}" != "off" ] && sudo raspi-config nonint do_wifi_country $wifi_region + [ "${wifi_region}" != "off" ] && raspi-config nonint do_wifi_country $wifi_region # see https://github.com/rootzoll/raspiblitz/issues/428#issuecomment-472822840 configFile="/boot/config.txt" @@ -406,9 +412,9 @@ if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; max_usb_currentDone=$(grep -c "$max_usb_current" $configFile) if [ ${max_usb_currentDone} -eq 0 ]; then - echo | sudo tee -a $configFile - echo "# Raspiblitz" | sudo tee -a $configFile - echo "$max_usb_current" | sudo tee -a $configFile + echo | tee -a $configFile + echo "# Raspiblitz" | tee -a $configFile + echo "$max_usb_current" | tee -a $configFile else echo "$max_usb_current already in $configFile" fi @@ -416,10 +422,10 @@ if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; # run fsck on sd root partition on every startup to prevent "maintenance login" screen # see: https://github.com/rootzoll/raspiblitz/issues/782#issuecomment-564981630 # see https://github.com/rootzoll/raspiblitz/issues/1053#issuecomment-600878695 - # use command to check last fsck check: sudo tune2fs -l /dev/mmcblk0p2 + # use command to check last fsck check: tune2fs -l /dev/mmcblk0p2 if [ "${tweak_boot_drive}" == "true" ]; then echo "* running tune2fs" - sudo tune2fs -c 1 /dev/mmcblk0p2 + tune2fs -c 1 /dev/mmcblk0p2 else echo "* skipping tweak_boot_drive" fi @@ -432,13 +438,13 @@ if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; fsOption2InFile=$(grep -c ${fsOption2} ${kernelOptionsFile}) if [ ${fsOption1InFile} -eq 0 ]; then - sudo sed -i "s/^/$fsOption1 /g" "$kernelOptionsFile" + sed -i "s/^/$fsOption1 /g" "$kernelOptionsFile" echo "$fsOption1 added to $kernelOptionsFile" else echo "$fsOption1 already in $kernelOptionsFile" fi if [ ${fsOption2InFile} -eq 0 ]; then - sudo sed -i "s/^/$fsOption2 /g" "$kernelOptionsFile" + sed -i "s/^/$fsOption2 /g" "$kernelOptionsFile" echo "$fsOption2 added to $kernelOptionsFile" else echo "$fsOption2 already in $kernelOptionsFile" @@ -448,15 +454,15 @@ fi # special prepare when Nvidia Jetson Nano if [ $(uname -a | grep -c 'tegra') -gt 0 ] ; then echo "Nvidia --> disable GUI on boot" - sudo systemctl set-default multi-user.target + systemctl set-default multi-user.target fi echo -e "\n*** CONFIG ***" # based on https://raspibolt.github.io/raspibolt/raspibolt_20_pi.html#raspi-config # set new default password for root user -echo "root:raspiblitz" | sudo chpasswd -echo "pi:raspiblitz" | sudo chpasswd +echo "root:raspiblitz" | chpasswd +echo "pi:raspiblitz" | chpasswd # prepare auto-start of 00infoLCD.sh script on pi user login (just kicks in if auto-login of pi is activated in HDMI or LCD mode) if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ] || \ @@ -467,10 +473,10 @@ if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ] | # bash autostart for pi # run as exec to dont allow easy physical access by keyboard # see https://github.com/rootzoll/raspiblitz/issues/54 - sudo bash -c 'echo "# automatic start the LCD info loop" >> /home/pi/.bashrc' - sudo bash -c 'echo "SCRIPT=/home/admin/00infoLCD.sh" >> /home/pi/.bashrc' - sudo bash -c 'echo "# replace shell with script => logout when exiting script" >> /home/pi/.bashrc' - sudo bash -c 'echo "exec \$SCRIPT" >> /home/pi/.bashrc' + bash -c 'echo "# automatic start the LCD info loop" >> /home/pi/.bashrc' + bash -c 'echo "SCRIPT=/home/admin/00infoLCD.sh" >> /home/pi/.bashrc' + bash -c 'echo "# replace shell with script => logout when exiting script" >> /home/pi/.bashrc' + bash -c 'echo "exec \$SCRIPT" >> /home/pi/.bashrc' echo "autostart LCD added to $homeFile" else echo "autostart LCD already in $homeFile" @@ -480,8 +486,8 @@ else fi # limit journald system use -sudo sed -i "s/^#SystemMaxUse=.*/SystemMaxUse=250M/g" /etc/systemd/journald.conf -sudo sed -i "s/^#SystemMaxFileSize=.*/SystemMaxFileSize=50M/g" /etc/systemd/journald.conf +sed -i "s/^#SystemMaxUse=.*/SystemMaxUse=250M/g" /etc/systemd/journald.conf +sed -i "s/^#SystemMaxFileSize=.*/SystemMaxFileSize=50M/g" /etc/systemd/journald.conf # change log rotates # see https://github.com/rootzoll/raspiblitz/issues/394#issuecomment-471535483 @@ -549,25 +555,25 @@ echo " invoke-rc.d rsyslog rotate > /dev/null endscript } -" | sudo tee ./rsyslog -sudo mv ./rsyslog /etc/logrotate.d/rsyslog -sudo chown root:root /etc/logrotate.d/rsyslog -sudo service rsyslog restart +" | tee ./rsyslog +mv ./rsyslog /etc/logrotate.d/rsyslog +chown root:root /etc/logrotate.d/rsyslog +service rsyslog restart echo -e "\n*** ADDING MAIN USER admin ***" # based on https://raspibolt.org/system-configuration.html#add-users # using the default password 'raspiblitz' -sudo adduser --disabled-password --gecos "" admin -echo "admin:raspiblitz" | sudo chpasswd -sudo adduser admin sudo -sudo chsh admin -s /bin/bash +adduser --disabled-password --gecos "" admin +echo "admin:raspiblitz" | chpasswd +adduser admin sudo +chsh admin -s /bin/bash # configure sudo for usage without password entry echo '%sudo ALL=(ALL) NOPASSWD:ALL' | sudo EDITOR='tee -a' visudo # check if group "admin" was created if [ $(sudo cat /etc/group | grep -c "^admin") -lt 1 ]; then echo -e "\nMissing group admin - creating it ..." - sudo /usr/sbin/groupadd --force --gid 1002 admin - sudo usermod -a -G admin admin + /usr/sbin/groupadd --force --gid 1002 admin + usermod -a -G admin admin else echo -e "\nOK group admin exists" fi @@ -575,31 +581,31 @@ fi echo -e "\n*** ADDING SERVICE USER bitcoin" # based on https://raspibolt.org/guide/raspberry-pi/system-configuration.html # create user and set default password for user -sudo adduser --disabled-password --gecos "" bitcoin -echo "bitcoin:raspiblitz" | sudo chpasswd +adduser --disabled-password --gecos "" bitcoin +echo "bitcoin:raspiblitz" | chpasswd # make home directory readable -sudo chmod 755 /home/bitcoin +chmod 755 /home/bitcoin # WRITE BASIC raspiblitz.info to sdcard # if further info gets added .. make sure to keep that on: blitz.preparerelease.sh -sudo touch /home/admin/raspiblitz.info +touch /home/admin/raspiblitz.info echo "baseimage=${baseimage}" | tee raspiblitz.info echo "cpu=${cpu}" | tee -a raspiblitz.info echo "displayClass=headless" | tee -a raspiblitz.info -sudo mv raspiblitz.info /home/admin/ -sudo chmod 755 /home/admin/raspiblitz.info -sudo chown admin:admin /home/admin/raspiblitz.info +mv raspiblitz.info /home/admin/ +chmod 755 /home/admin/raspiblitz.info +chown admin:admin /home/admin/raspiblitz.info echo -e "\n*** ADDING GROUPS FOR CREDENTIALS STORE ***" # access to credentials (e.g. macaroon files) in a central location is managed with unix groups and permissions -sudo /usr/sbin/groupadd --force --gid 9700 lndadmin -sudo /usr/sbin/groupadd --force --gid 9701 lndinvoice -sudo /usr/sbin/groupadd --force --gid 9702 lndreadonly -sudo /usr/sbin/groupadd --force --gid 9703 lndinvoices -sudo /usr/sbin/groupadd --force --gid 9704 lndchainnotifier -sudo /usr/sbin/groupadd --force --gid 9705 lndsigner -sudo /usr/sbin/groupadd --force --gid 9706 lndwalletkit -sudo /usr/sbin/groupadd --force --gid 9707 lndrouter +/usr/sbin/groupadd --force --gid 9700 lndadmin +/usr/sbin/groupadd --force --gid 9701 lndinvoice +/usr/sbin/groupadd --force --gid 9702 lndreadonly +/usr/sbin/groupadd --force --gid 9703 lndinvoices +/usr/sbin/groupadd --force --gid 9704 lndchainnotifier +/usr/sbin/groupadd --force --gid 9705 lndsigner +/usr/sbin/groupadd --force --gid 9706 lndwalletkit +/usr/sbin/groupadd --force --gid 9707 lndrouter echo -e "\n*** SHELL SCRIPTS & ASSETS ***" # copy raspiblitz repo from github @@ -629,10 +635,10 @@ file="/home/admin/config.scripts/lndlibs/lightning_pb2_grpc.py" ! grep -Eq "^from . import.*" "${file}" && sed -i -E 's/^(import.*_pb2)/from . \1/' "${file}" # add /sbin to path for all -sudo bash -c "echo 'PATH=\$PATH:/sbin' >> /etc/profile" +bash -c "echo 'PATH=\$PATH:/sbin' >> /etc/profile" # replace boot splash image when raspbian -[ "${baseimage}" = "raspios_arm64" ] && { echo "* replacing boot splash"; sudo cp /home/admin/raspiblitz/pictures/splash.png /usr/share/plymouth/themes/pix/splash.png; } +[ -d /usr/share/plymouth ] && [ "${baseimage}" = "raspios_arm64" ] && { echo "* replacing boot splash"; cp /home/admin/raspiblitz/pictures/splash.png /usr/share/plymouth/themes/pix/splash.png; } echo -e "\n*** RASPIBLITZ EXTRAS ***" @@ -641,26 +647,26 @@ echo -e "\n*** RASPIBLITZ EXTRAS ***" # fzf install a command-line fuzzy finder (https://github.com/junegunn/fzf) apt_install tmux screen fzf -sudo bash -c "echo '' >> /home/admin/.bashrc" -sudo bash -c "echo '# https://github.com/rootzoll/raspiblitz/issues/1784' >> /home/admin/.bashrc" -sudo bash -c "echo 'NG_CLI_ANALYTICS=ci' >> /home/admin/.bashrc" +bash -c "echo '' >> /home/admin/.bashrc" +bash -c "echo '# https://github.com/rootzoll/raspiblitz/issues/1784' >> /home/admin/.bashrc" +bash -c "echo 'NG_CLI_ANALYTICS=ci' >> /home/admin/.bashrc" # raspiblitz custom command prompt #2400 if ! grep -Eq "^[[:space:]]*PS1.*₿" /home/admin/.bashrc; then - sudo sed -i '/^unset color_prompt force_color_prompt$/i # raspiblitz custom command prompt https://github.com/rootzoll/raspiblitz/issues/2400' /home/admin/.bashrc - sudo sed -i '/^unset color_prompt force_color_prompt$/i raspiIp=$(hostname -I | cut -d " " -f1)' /home/admin/.bashrc - sudo sed -i '/^unset color_prompt force_color_prompt$/i if [ "$color_prompt" = yes ]; then' /home/admin/.bashrc - sudo sed -i '/^unset color_prompt force_color_prompt$/i \ PS1=\x27${debian_chroot:+($debian_chroot)}\\[\\033[00;33m\\]\\u@$raspiIp:\\[\\033[00;34m\\]\\w\\[\\033[01;35m\\]$(__git_ps1 "(%s)") \\[\\033[01;33m\\]₿\\[\\033[00m\\] \x27' /home/admin/.bashrc - sudo sed -i '/^unset color_prompt force_color_prompt$/i else' /home/admin/.bashrc - sudo sed -i '/^unset color_prompt force_color_prompt$/i \ PS1=\x27${debian_chroot:+($debian_chroot)}\\u@$raspiIp:\\w₿ \x27' /home/admin/.bashrc - sudo sed -i '/^unset color_prompt force_color_prompt$/i fi' /home/admin/.bashrc + sed -i '/^unset color_prompt force_color_prompt$/i # raspiblitz custom command prompt https://github.com/rootzoll/raspiblitz/issues/2400' /home/admin/.bashrc + sed -i '/^unset color_prompt force_color_prompt$/i raspiIp=$(hostname -I | cut -d " " -f1)' /home/admin/.bashrc + sed -i '/^unset color_prompt force_color_prompt$/i if [ "$color_prompt" = yes ]; then' /home/admin/.bashrc + sed -i '/^unset color_prompt force_color_prompt$/i \ PS1=\x27${debian_chroot:+($debian_chroot)}\\[\\033[00;33m\\]\\u@$raspiIp:\\[\\033[00;34m\\]\\w\\[\\033[01;35m\\]$(__git_ps1 "(%s)") \\[\\033[01;33m\\]₿\\[\\033[00m\\] \x27' /home/admin/.bashrc + sed -i '/^unset color_prompt force_color_prompt$/i else' /home/admin/.bashrc + sed -i '/^unset color_prompt force_color_prompt$/i \ PS1=\x27${debian_chroot:+($debian_chroot)}\\u@$raspiIp:\\w₿ \x27' /home/admin/.bashrc + sed -i '/^unset color_prompt force_color_prompt$/i fi' /home/admin/.bashrc fi echo -e "\n*** FUZZY FINDER KEY BINDINGS ***" homeFile=/home/admin/.bashrc keyBindingsDone=$(grep -c "source /usr/share/doc/fzf/examples/key-bindings.bash" $homeFile) if [ ${keyBindingsDone} -eq 0 ]; then - sudo bash -c "echo 'source /usr/share/doc/fzf/examples/key-bindings.bash' >> /home/admin/.bashrc" + bash -c "echo 'source /usr/share/doc/fzf/examples/key-bindings.bash' >> /home/admin/.bashrc" echo "key-bindings added to $homeFile" else echo "key-bindings already in $homeFile" @@ -671,13 +677,13 @@ homeFile=/home/admin/.bashrc autostartDone=$(grep -c "automatically start main menu" $homeFile) if [ ${autostartDone} -eq 0 ]; then # bash autostart for admin - sudo bash -c "echo '# shortcut commands' >> /home/admin/.bashrc" - sudo bash -c "echo 'source /home/admin/_commands.sh' >> /home/admin/.bashrc" - sudo bash -c "echo '# automatically start main menu for admin unless' >> /home/admin/.bashrc" - sudo bash -c "echo '# when running in a tmux session' >> /home/admin/.bashrc" - sudo bash -c "echo 'if [ -z \"\$TMUX\" ]; then' >> /home/admin/.bashrc" - sudo bash -c "echo ' ./00raspiblitz.sh newsshsession' >> /home/admin/.bashrc" - sudo bash -c "echo 'fi' >> /home/admin/.bashrc" + bash -c "echo '# shortcut commands' >> /home/admin/.bashrc" + bash -c "echo 'source /home/admin/_commands.sh' >> /home/admin/.bashrc" + bash -c "echo '# automatically start main menu for admin unless' >> /home/admin/.bashrc" + bash -c "echo '# when running in a tmux session' >> /home/admin/.bashrc" + bash -c "echo 'if [ -z \"\$TMUX\" ]; then' >> /home/admin/.bashrc" + bash -c "echo ' ./00raspiblitz.sh newsshsession' >> /home/admin/.bashrc" + bash -c "echo 'fi' >> /home/admin/.bashrc" echo "autostart added to $homeFile" else echo "autostart already in $homeFile" @@ -686,21 +692,21 @@ fi echo -e "\n*** SWAP FILE ***" # based on https://stadicus.github.io/RaspiBolt/raspibolt_20_pi.html#move-swap-file # but just deactivating and deleting old (will be created alter when user adds HDD) -sudo dphys-swapfile swapoff -sudo dphys-swapfile uninstall +dphys-swapfile swapoff +dphys-swapfile uninstall echo -e "\n*** INCREASE OPEN FILE LIMIT ***" # based on https://raspibolt.org/guide/raspberry-pi/security.html#increase-your-open-files-limit -sudo sed --in-place -i "56s/.*/* soft nofile 256000/" /etc/security/limits.conf -sudo bash -c "echo '* hard nofile 256000' >> /etc/security/limits.conf" -sudo bash -c "echo 'root soft nofile 256000' >> /etc/security/limits.conf" -sudo bash -c "echo 'root hard nofile 256000' >> /etc/security/limits.conf" -sudo bash -c "echo '# End of file' >> /etc/security/limits.conf" -sudo sed --in-place -i "23s/.*/session required pam_limits.so/" /etc/pam.d/common-session -sudo sed --in-place -i "25s/.*/session required pam_limits.so/" /etc/pam.d/common-session-noninteractive -sudo bash -c "echo '# end of pam-auth-update config' >> /etc/pam.d/common-session-noninteractive" +sed --in-place -i "56s/.*/* soft nofile 256000/" /etc/security/limits.conf +bash -c "echo '* hard nofile 256000' >> /etc/security/limits.conf" +bash -c "echo 'root soft nofile 256000' >> /etc/security/limits.conf" +bash -c "echo 'root hard nofile 256000' >> /etc/security/limits.conf" +bash -c "echo '# End of file' >> /etc/security/limits.conf" +sed --in-place -i "23s/.*/session required pam_limits.so/" /etc/pam.d/common-session +sed --in-place -i "25s/.*/session required pam_limits.so/" /etc/pam.d/common-session-noninteractive +bash -c "echo '# end of pam-auth-update config' >> /etc/pam.d/common-session-noninteractive" # increase the possible number of running processes from 128 -sudo bash -c "echo 'fs.inotify.max_user_instances=4096' >> /etc/sysctl.conf" +bash -c "echo 'fs.inotify.max_user_instances=4096' >> /etc/sysctl.conf" # *** fail2ban *** # based on https://raspibolt.org/security.html#fail2ban @@ -709,16 +715,16 @@ apt_install --no-install-recommends python3-systemd fail2ban # *** CACHE DISK IN RAM & KEYVALUE-STORE*** echo "Activating CACHE RAM DISK ... " -sudo /home/admin/_cache.sh ramdisk on -sudo /home/admin/_cache.sh keyvalue on +/home/admin/_cache.sh ramdisk on +/home/admin/_cache.sh keyvalue on # *** Wifi, Bluetooth & other RaspberryPi configs *** if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; then if [ "${wifi_region}" == "off" ]; then echo -e "\n*** DISABLE WIFI ***" - sudo systemctl disable wpa_supplicant.service - sudo ifconfig wlan0 down + systemctl disable wpa_supplicant.service + ifconfig wlan0 down fi echo -e "\n*** DISABLE BLUETOOTH ***" @@ -728,46 +734,46 @@ if [ "${baseimage}" = "raspios_arm64" ] || [ "${baseimage}" = "debian_rpi64" ]; if [ "${disableBTDone}" -eq 0 ]; then # disable bluetooth module - echo "" | sudo tee -a $configFile - echo "# Raspiblitz" | sudo tee -a $configFile - echo 'dtoverlay=pi3-disable-bt' | sudo tee -a $configFile - echo 'dtoverlay=disable-bt' | sudo tee -a $configFile + echo "" | tee -a $configFile + echo "# Raspiblitz" | tee -a $configFile + echo 'dtoverlay=pi3-disable-bt' | tee -a $configFile + echo 'dtoverlay=disable-bt' | tee -a $configFile else echo "disable BT already in $configFile" fi # remove bluetooth services - sudo systemctl disable bluetooth.service - sudo systemctl disable hciuart.service + systemctl disable bluetooth.service + systemctl disable hciuart.service # remove bluetooth packages - sudo apt remove -y --purge pi-bluetooth bluez bluez-firmware + apt remove -y --purge pi-bluetooth bluez bluez-firmware # disable audio echo -e "\n*** DISABLE AUDIO (snd_bcm2835) ***" - sudo sed -i "s/^dtparam=audio=on/# dtparam=audio=on/g" /boot/config.txt + sed -i "s/^dtparam=audio=on/# dtparam=audio=on/g" /boot/config.txt # disable DRM VC4 V3D echo -e "\n*** DISABLE DRM VC4 V3D driver ***" dtoverlay=vc4-fkms-v3d - sudo sed -i "s/^dtoverlay=${dtoverlay}/# dtoverlay=${dtoverlay}/g" /boot/config.txt + sed -i "s/^dtoverlay=${dtoverlay}/# dtoverlay=${dtoverlay}/g" /boot/config.txt # I2C fix (make sure dtparam=i2c_arm is not on) # see: https://github.com/rootzoll/raspiblitz/issues/1058#issuecomment-739517713 - sudo sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt + sed -i "s/^dtparam=i2c_arm=.*//g" /boot/config.txt fi # *** BOOTSTRAP *** echo -e "\n*** RASPI BOOTSTRAP SERVICE ***" -sudo chmod +x /home/admin/_bootstrap.sh -sudo cp /home/admin/assets/bootstrap.service /etc/systemd/system/bootstrap.service -sudo systemctl enable bootstrap +chmod +x /home/admin/_bootstrap.sh +cp /home/admin/assets/bootstrap.service /etc/systemd/system/bootstrap.service +systemctl enable bootstrap # *** BACKGROUND TASKS *** echo -e "\n*** RASPI BACKGROUND SERVICE ***" -sudo chmod +x /home/admin/_background.sh -sudo cp /home/admin/assets/background.service /etc/systemd/system/background.service -sudo systemctl enable background +chmod +x /home/admin/_background.sh +cp /home/admin/assets/background.service /etc/systemd/system/background.service +systemctl enable background # *** BACKGROUND SCAN *** /home/admin/_background.scan.sh install @@ -806,23 +812,23 @@ fi byteSizeList=$(sudo -u admin stat -c %s /home/admin/fallback.bitnodes.nodes) if [ ${#byteSizeList} -eq 0 ] || [ ${byteSizeList} -lt 10240 ]; then echo "Using fallback list from repo: bitnodes" - sudo rm /home/admin/fallback.bitnodes.nodes 2>/dev/null - sudo cp /home/admin/assets/fallback.bitnodes.nodes /home/admin/fallback.bitnodes.nodes + rm /home/admin/fallback.bitnodes.nodes 2>/dev/null + cp /home/admin/assets/fallback.bitnodes.nodes /home/admin/fallback.bitnodes.nodes fi -sudo chown admin:admin /home/admin/fallback.bitnodes.nodes +chown admin:admin /home/admin/fallback.bitnodes.nodes # check fallback list bitcoin core byteSizeList=$(sudo -u admin stat -c %s /home/admin/fallback.bitcoin.nodes) if [ ${#byteSizeList} -eq 0 ] || [ ${byteSizeList} -lt 10240 ]; then echo "Using fallback list from repo: bitcoin core" - sudo rm /home/admin/fallback.bitcoin.nodes 2>/dev/null - sudo cp /home/admin/assets/fallback.bitcoin.nodes /home/admin/fallback.bitcoin.nodes + rm /home/admin/fallback.bitcoin.nodes 2>/dev/null + cp /home/admin/assets/fallback.bitcoin.nodes /home/admin/fallback.bitcoin.nodes fi -sudo chown admin:admin /home/admin/fallback.bitcoin.nodes +chown admin:admin /home/admin/fallback.bitcoin.nodes echo echo "*** raspiblitz.info ***" -sudo cat /home/admin/raspiblitz.info +cat /home/admin/raspiblitz.info # *** RASPIBLITZ IMAGE READY INFO *** echo -e "\n**********************************************" @@ -835,13 +841,13 @@ echo "1. login fresh --> user:admin password:raspiblitz" echo -e "2. run --> release\n" # make sure that at least the code is available (also if no internet) -sudo /home/admin/config.scripts/blitz.display.sh prepare-install +/home/admin/config.scripts/blitz.display.sh prepare-install # (do last - because might trigger reboot) if [ "${display}" != "headless" ] || [ "${baseimage}" = "raspios_arm64" ]; then echo "*** ADDITIONAL DISPLAY OPTIONS ***" echo "- calling: blitz.display.sh set-display ${display}" - sudo /home/admin/config.scripts/blitz.display.sh set-display ${display} - sudo /home/admin/config.scripts/blitz.display.sh rotate 1 + /home/admin/config.scripts/blitz.display.sh set-display ${display} + /home/admin/config.scripts/blitz.display.sh rotate 1 fi echo "# BUILD DONE - see above" diff --git a/home.admin/config.scripts/blitz.web.sh b/home.admin/config.scripts/blitz.web.sh index ce3ffb1b2..510a5c147 100755 --- a/home.admin/config.scripts/blitz.web.sh +++ b/home.admin/config.scripts/blitz.web.sh @@ -72,7 +72,7 @@ EOF sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge sudo chown -R admin:www-data /var/www/letsencrypt sudo cp -a /home/admin/assets/nginx/www_public/ /var/www/public - sudo chown www-data:www-data /var/www/public + sudo chown -R www-data:www-data /var/www/public sudo cp /home/admin/assets/nginx/snippets/* /etc/nginx/snippets/ # enable public site & API redirect From 082cf33f880dbf38d985eb12c76409e3cf92fd6c Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Wed, 3 May 2023 16:32:23 +0100 Subject: [PATCH 48/55] refactor bitcoin update script with new keys (#3758) --- home.admin/config.scripts/bitcoin.update.sh | 113 ++++++++++---------- 1 file changed, 54 insertions(+), 59 deletions(-) diff --git a/home.admin/config.scripts/bitcoin.update.sh b/home.admin/config.scripts/bitcoin.update.sh index 862abcdfa..991d555dc 100755 --- a/home.admin/config.scripts/bitcoin.update.sh +++ b/home.admin/config.scripts/bitcoin.update.sh @@ -17,37 +17,36 @@ fi mode="$1" # RECOMMENDED UPDATE BY RASPIBLITZ TEAM -# comment will be shown as "BEWARE Info" when option is choosen (can be multiple lines) +# comment will be shown as "BEWARE Info" when option is choosen (can be multiple lines) bitcoinVersion="" # example: 22.0 .. keep empty if no newer version as sd card build is available # needed to check code signing -# https://github.com/laanwj -laanwjPGP="71A3 B167 3540 5025 D447 E8F2 7481 0B01 2346 C9A6" +# https://github.com/sipa.gpg +fallbackSigner=sipa # GATHER DATA # setting download directory to the current user downloadDir="/home/$(whoami)/download/bitcoin.update" # detect CPU architecture & fitting download link -if [ $(uname -m | grep -c 'arm') -eq 1 ] ; then +if [ $(uname -m | grep -c 'arm') -eq 1 ]; then bitcoinOSversion="arm-linux-gnueabihf" fi -if [ $(uname -m | grep -c 'aarch64') -eq 1 ] ; then +if [ $(uname -m | grep -c 'aarch64') -eq 1 ]; then bitcoinOSversion="aarch64-linux-gnu" fi -if [ $(uname -m | grep -c 'x86_64') -eq 1 ] ; then +if [ $(uname -m | grep -c 'x86_64') -eq 1 ]; then bitcoinOSversion="x86_64-linux-gnu" fi # installed version -installedVersion=$(sudo -u bitcoin bitcoind --version | head -n1| cut -d" " -f4|cut -c 2-) +installedVersion=$(sudo -u bitcoin bitcoind --version | head -n1 | cut -d" " -f4 | cut -c 2-) # test if the installed version already the tested/recommended update version bitcoinUpdateInstalled=$(echo "${installedVersion}" | grep -c "${bitcoinVersion}") # get latest release from GitHub releases -gitHubLatestReleaseJSON="$(curl --header "X-GitHub-Api-Version:2022-11-28" -s https://api.github.com/repos/bitcoin/bitcoin/releases | jq '.[0]')" -bitcoinLatestVersion=$(echo "${gitHubLatestReleaseJSON}"|jq -r '.tag_name'|cut -c 2-) +bitcoinLatestVersion=$(curl --header "X-GitHub-Api-Version:2022-11-28" -s https://api.github.com/repos/bitcoin/bitcoin/releases | jq -r '.[].tag_name' | sort | tail -n1 | cut -c 2-) # INFO function displayInfo() { @@ -75,7 +74,7 @@ if [ "${mode}" = "tested" ]; then # check for optional second parameter: forced update version # --> only does the tested update if its the given version - # this is needed for recovery/update. + # this is needed for recovery/update. fixedBitcoinVersion="$2" if [ ${#fixedBitcoinVersion} -gt 0 ]; then echo "# checking for fixed version update: askedFor(${bitcoinVersion}) available(${bitcoinVersion})" @@ -106,10 +105,10 @@ elif [ "${mode}" = "custom" ]; then echo "# Input the version you would like to install and press ENTER." echo "# Examples (versions below 22 are not supported):" echo "22.0rc3" - echo "22.0" + echo "24.0.1" echo read bitcoinVersion - if [ $(echo ${bitcoinVersion} | grep -c "rc") -gt 0 ];then + if [ $(echo ${bitcoinVersion} | grep -c "rc") -gt 0 ]; then cutVersion=$(echo ${bitcoinVersion} | awk -F"r" '{print $1}') rcVersion=$(echo ${bitcoinVersion} | awk -F"r" '{print $2}') # https://bitcoincore.org/bin/bitcoin-core-22.0/test.rc3/ @@ -119,11 +118,11 @@ elif [ "${mode}" = "custom" ]; then fi if curl --output /dev/null --silent --head --fail \ - https://bitcoincore.org/bin/bitcoin-core-${pathVersion}/SHA256SUMS.asc; then + https://bitcoincore.org/bin/bitcoin-core-${pathVersion}/SHA256SUMS.asc; then echo "# OK version exists at https://bitcoincore.org/bin/bitcoin-core-${pathVersion}" echo "# Press ENTER to proceed to install Bitcoin Core $bitcoinVersion or CTRL+C to abort." read key - else + else echo "# FAIL $bitcoinVersion does not exist" echo echo "# Press ENTER to return to the main menu" @@ -133,8 +132,8 @@ elif [ "${mode}" = "custom" ]; then fi # JOINED INSTALL -if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" ]; then - +if [ "${mode}" = "tested" ] || [ "${mode}" = "reckless" ] || [ "${mode}" = "custom" ]; then + displayInfo if [ "$installedVersion" = "$bitcoinVersion" ]; then @@ -143,48 +142,48 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" exit 0 fi - echo + echo echo "# clean & change into download directory" sudo rm -rf "${downloadDir}" mkdir -p "${downloadDir}" cd "${downloadDir}" || exit 1 - # download signed binary sha256 hash sum file - wget https://bitcoincore.org/bin/bitcoin-core-${pathVersion}/SHA256SUMS - # download signed binary sha256 hash sum file and check - wget https://bitcoincore.org/bin/bitcoin-core-${pathVersion}/SHA256SUMS.asc + echo "# Enter the github username of a signer. Find the list of signers at: " + echo "https://github.com/bitcoin-core/guix.sigs/tree/main/${pathVersion}" + echo "# Example for Peter Wuille (https://github.com/sipa):" + echo "sipa" + echo "# example for Emzy (https://github.com/Emzy):" + echo "Emzy" + read customSigner - echo "# Paste the PGP pubkey fingerprint of a signer." - echo "# Example for W. J. van der Laan (https://github.com/laanwj):" - echo "71A3 B167 3540 5025 D447 E8F2 7481 0B01 2346 C9A6" - echo "" - read customKey - - if [ ${#customKey} -eq 0 ];then - customKey=$laanwjPGP + if [ ${#customSigner} -eq 0 ]; then + customSigner=$fallbackSigner fi - # receive signer key - if ! gpg --recv-key "$customKey" - then - echo - echo "# FAIL # Could not download the PGP pubkey" - echo - echo "See the signers of this release:" - echo - gpg --verify SHA256SUMS.asc - echo + echo "# Download the binary sha256 hash sum file" + wget -O all.SHA256SUMS https://raw.githubusercontent.com/bitcoin-core/guix.sigs/main/${pathVersion}/${customSigner}/all.SHA256SUMS + echo "# Download signature of the binary sha256 hash sum file" + wget -O all.SHA256SUMS.asc https://raw.githubusercontent.com/bitcoin-core/guix.sigs/main/${pathVersion}/${customSigner}/all.SHA256SUMS.asc + + echo "# Download PGP pubkey of ${customSigner}" + if ! wget -O pubkey.asc https://github.com/${customSigner}.gpg; then + echo "# FAIL # Could not down + load the PGP pubkey of ${customSigner}" + rm pubkey.asc exit 1 fi - - verifyResult=$(LANG=en_US.utf8; gpg --verify SHA256SUMS.asc 2>&1) - goodSignature=$(echo ${verifyResult} | grep 'Good signature' -c) - echo "goodSignature(${goodSignature})" - correctKey=$(echo ${verifyResult} | grep "${customKey}" -c) - echo "correctKey(${correctKey})" - if [ ${correctKey} -lt 1 ] || [ ${goodSignature} -lt 1 ]; then + echo "# Import PGP pubkey of ${customSigner}" + if ! gpg --import pubkey.asc; then + echo "# FAIL # Couldn't import the PGP pubkey of ${customSigner}" + rm pubkey.asc + exit 1 + fi + rm pubkey.asc + + echo "# Checking PGP signature of the binary sha256 hash sum file" + if ! gpg --verify all.SHA256SUMS.asc; then echo - echo "# BUILD FAILED --> PGP Verify not OK / signature(${goodSignature}) verify(${correctKey})" + echo "# BUILD FAILED --> the signature does not match" exit 1 else echo @@ -195,18 +194,15 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" echo "# Downloading Bitcoin Core v${bitcoinVersion} for ${bitcoinOSversion} ..." binaryName="bitcoin-${bitcoinVersion}-${bitcoinOSversion}.tar.gz" wget https://bitcoincore.org/bin/bitcoin-core-${pathVersion}/${binaryName} - if [ ! -f "./${binaryName}" ] - then + if [ ! -f "./${binaryName}" ]; then echo "# FAIL # Downloading BITCOIN BINARY did not succeed." exit 1 fi - echo "# Checking binary checksum ..." - checksumTest=$(sha256sum -c --ignore-missing SHA256SUMS ${binaryName} 2>/dev/null \ - | grep -c "${binaryName}: OK") - if [ "${checksumTest}" -eq 0 ]; then + echo "# Checking the binary checksum ..." + if ! sha256sum -c --ignore-missing all.SHA256SUMS; then # get the sha256 value for the corresponding platform from signed hash sum file - bitcoinSHA256=$(grep -i "${binaryName}}" SHA256SUMS | cut -d " " -f1) + bitcoinSHA256=$(grep -i "${binaryName}}" all.SHA256SUMS | cut -d " " -f1) echo "# FAIL # Downloaded BITCOIN BINARY CHECKSUM:" echo "$(sha256sum ${binaryName})" echo "NOT matching SHA256 checksum:" @@ -217,16 +213,16 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" echo "# OK --> VERIFIED BITCOIN CORE BINARY CHECKSUM IS CORRECT" echo fi -fi +fi -if [ "${mode}" = "tested" ]||[ "${mode}" = "custom" ]; then +if [ "${mode}" = "tested" ] || [ "${mode}" = "custom" ]; then bitcoinInterimsUpdateNew="${bitcoinVersion}" elif [ "${mode}" = "reckless" ]; then bitcoinInterimsUpdateNew="reckless" fi # JOINED INSTALL -if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" ];then +if [ "${mode}" = "tested" ] || [ "${mode}" = "reckless" ] || [ "${mode}" = "custom" ]; then # install echo "# Stopping bitcoind ..." @@ -238,8 +234,7 @@ if [ "${mode}" = "tested" ]||[ "${mode}" = "reckless" ]||[ "${mode}" = "custom" tar -xvf ${binaryName} sudo install -m 0755 -o root -g root -t /usr/local/bin/ bitcoin-${bitcoinVersion}/bin/* sleep 3 - installed=$(bitcoind --version | grep "${bitcoinVersion}" -c) - if [ ${installed} -lt 1 ]; then + if ! bitcoind --version | grep "${bitcoinVersion}"; then echo echo "# BUILD FAILED --> Was not able to install bitcoind version(${bitcoinVersion})" exit 1 From f49c3af192359554c7eee4c296df25709cd3780e Mon Sep 17 00:00:00 2001 From: /rootzoll Date: Wed, 3 May 2023 17:33:39 +0200 Subject: [PATCH 49/55] #3751 update proto files (#3765) --- home.admin/config.scripts/lndlibs/README.md | 1 + .../config.scripts/lndlibs/lightning.proto | 244 +- .../config.scripts/lndlibs/lightning_pb2.py | 2758 +++-------------- .../lndlibs/lightning_pb2_grpc.py | 79 +- .../lndlibs/walletunlocker.proto | 7 + .../lndlibs/walletunlocker_pb2.py | 122 +- .../lndlibs/walletunlocker_pb2_grpc.py | 1 - 7 files changed, 832 insertions(+), 2380 deletions(-) diff --git a/home.admin/config.scripts/lndlibs/README.md b/home.admin/config.scripts/lndlibs/README.md index ee11f32d2..312c98061 100644 --- a/home.admin/config.scripts/lndlibs/README.md +++ b/home.admin/config.scripts/lndlibs/README.md @@ -41,6 +41,7 @@ from . import walletunlocker_pb2 as walletunlocker__pb2 Make sure the first lines (ignore comments) of the `walletunlocker_pb2.py` look like the following for python3 compatibility: ``` +from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import message as _message diff --git a/home.admin/config.scripts/lndlibs/lightning.proto b/home.admin/config.scripts/lndlibs/lightning.proto index bc9e720ad..48175bf47 100644 --- a/home.admin/config.scripts/lndlibs/lightning.proto +++ b/home.admin/config.scripts/lndlibs/lightning.proto @@ -567,9 +567,42 @@ service Lightning { /* lncli: `subscribecustom` SubscribeCustomMessages subscribes to a stream of incoming custom peer messages. + + To include messages with type outside of the custom range (>= 32768) lnd + needs to be compiled with the `dev` build tag, and the message type to + override should be specified in lnd's experimental protocol configuration. */ rpc SubscribeCustomMessages (SubscribeCustomMessagesRequest) returns (stream CustomMessage); + + /* lncli: `listaliases` + ListAliases returns the set of all aliases that have ever existed with + their confirmed SCID (if it exists) and/or the base SCID (in the case of + zero conf). + */ + rpc ListAliases (ListAliasesRequest) returns (ListAliasesResponse); + + /* + LookupHtlcResolution retrieves a final htlc resolution from the database. + If the htlc has no final resolution yet, a NotFound grpc status code is + returned. + */ + rpc LookupHtlcResolution (LookupHtlcResolutionRequest) + returns (LookupHtlcResolutionResponse); +} + +message LookupHtlcResolutionRequest { + uint64 chan_id = 1; + + uint64 htlc_index = 2; +} + +message LookupHtlcResolutionResponse { + // Settled is true is the htlc was settled. If false, the htlc was failed. + bool settled = 1; + + // Offchain indicates whether the htlc was resolved off-chain or on-chain. + bool offchain = 2; } message SubscribeCustomMessagesRequest { @@ -591,6 +624,9 @@ message SendCustomMessageRequest { bytes peer = 1; // Message type. This value needs to be in the custom range (>= 32768). + // To send a type < custom range, lnd needs to be compiled with the `dev` + // build tag, and the message type to override should be specified in lnd's + // experimental protocol configuration. uint32 type = 2; // Raw message data. @@ -630,6 +666,7 @@ enum OutputScriptType { SCRIPT_TYPE_NULLDATA = 6; SCRIPT_TYPE_NON_STANDARD = 7; SCRIPT_TYPE_WITNESS_UNKNOWN = 8; + SCRIPT_TYPE_WITNESS_V1_TAPROOT = 9; } message OutputDetail { @@ -919,6 +956,14 @@ message ChannelAcceptRequest { // The commitment type the initiator wishes to use for the proposed channel. CommitmentType commitment_type = 14; + + // Whether the initiator wants to open a zero-conf channel via the channel + // type. + bool wants_zero_conf = 15; + + // Whether the initiator wants to use the scid-alias channel type. This is + // separate from the feature bit. + bool wants_scid_alias = 16; } message ChannelAcceptResponse { @@ -979,6 +1024,13 @@ message ChannelAcceptResponse { The number of confirmations we require before we consider the channel open. */ uint32 min_accept_depth = 10; + + /* + Whether the responder wants this to be a zero-conf channel. This will fail + if either side does not have the scid-alias feature bit set. The minimum + depth field must be zero if this is true. + */ + bool zero_conf = 11; } message ChannelPoint { @@ -1475,6 +1527,24 @@ message Channel { // List constraints for the remote node. ChannelConstraints remote_constraints = 30; + + /* + This lists out the set of alias short channel ids that exist for a channel. + This may be empty. + */ + repeated uint64 alias_scids = 31; + + // Whether or not this is a zero-conf channel. + bool zero_conf = 32; + + // This is the confirmed / on-chain zero-conf SCID. + uint64 zero_conf_confirmed_scid = 33; + + // The configured alias name of our peer. + string peer_alias = 34; + + // This is the peer SCID alias. + uint64 peer_scid_alias = 35 [jstype = JS_STRING]; } message ListChannelsRequest { @@ -1488,12 +1558,33 @@ message ListChannelsRequest { empty, all channels will be returned. */ bytes peer = 5; + + // Informs the server if the peer alias lookup per channel should be + // enabled. It is turned off by default in order to avoid degradation of + // performance for existing clients. + bool peer_alias_lookup = 6; } message ListChannelsResponse { // The list of active channels repeated Channel channels = 11; } +message AliasMap { + /* + For non-zero-conf channels, this is the confirmed SCID. Otherwise, this is + the first assigned "base" alias. + */ + uint64 base_scid = 1; + + // The set of all aliases stored for the base SCID. + repeated uint64 aliases = 2; +} +message ListAliasesRequest { +} +message ListAliasesResponse { + repeated AliasMap alias_maps = 1; +} + enum Initiator { INITIATOR_UNKNOWN = 0; INITIATOR_LOCAL = 1; @@ -1558,6 +1649,15 @@ message ChannelCloseSummary { Initiator close_initiator = 12; repeated Resolution resolutions = 13; + + /* + This lists out the set of alias short channel ids that existed for the + closed channel. This may be empty. + */ + repeated uint64 alias_scids = 14; + + // The confirmed SCID for a zero-conf channel. + uint64 zero_conf_confirmed_scid = 15 [jstype = JS_STRING]; } enum ResolutionType { @@ -1831,6 +1931,9 @@ message GetInfoResponse { Indicates whether the HTLC interceptor API is in always-on mode. */ bool require_htlc_interceptor = 21; + + // Indicates whether final htlc resolutions are stored on disk. + bool store_final_htlc_resolutions = 22; } message GetRecoveryInfoRequest { @@ -1903,6 +2006,11 @@ message CloseChannelRequest { // A manual fee rate set in sat/vbyte that should be used when crafting the // closure transaction. uint64 sat_per_vbyte = 6; + + // The maximum fee rate the closer is willing to pay. + // + // NOTE: This field is only respected if we're the initiator of the channel. + uint64 max_fee_per_vbyte = 7; } message CloseStatusUpdate { @@ -2114,6 +2222,58 @@ message OpenChannelRequest { the remote peer supports explicit channel negotiation. */ CommitmentType commitment_type = 18; + + /* + If this is true, then a zero-conf channel open will be attempted. + */ + bool zero_conf = 19; + + /* + If this is true, then an option-scid-alias channel-type open will be + attempted. + */ + bool scid_alias = 20; + + /* + The base fee charged regardless of the number of milli-satoshis sent. + */ + uint64 base_fee = 21; + + /* + The fee rate in ppm (parts per million) that will be charged in + proportion of the value of each forwarded HTLC. + */ + uint64 fee_rate = 22; + + /* + If use_base_fee is true the open channel announcement will update the + channel base fee with the value specified in base_fee. In the case of + a base_fee of 0 use_base_fee is needed downstream to distinguish whether + to use the default base fee value specified in the config or 0. + */ + bool use_base_fee = 23; + + /* + If use_fee_rate is true the open channel announcement will update the + channel fee rate with the value specified in fee_rate. In the case of + a fee_rate of 0 use_fee_rate is needed downstream to distinguish whether + to use the default fee rate value specified in the config or 0. + */ + bool use_fee_rate = 24; + + /* + The number of satoshis we require the remote peer to reserve. This value, + if specified, must be above the dust limit and below 20% of the channel + capacity. + */ + uint64 remote_chan_reserve_sat = 25; + + /* + If set, then lnd will attempt to commit all the coins under control of the + internal wallet to open the channel, and the LocalFundingAmount field must + be zero and is ignored. + */ + bool fund_max = 26; } message OpenStatusUpdate { oneof update { @@ -2488,9 +2648,17 @@ message PendingChannelsResponse { repeated PendingHTLC pending_htlcs = 8; + /* + There are three resolution states for the anchor: + limbo, lost and recovered. Derive the current state + from the limbo and recovered balances. + */ enum AnchorState { + // The recovered_balance is zero and limbo_balance is non-zero. LIMBO = 0; + // The recovered_balance is non-zero. RECOVERED = 1; + // A state that is neither LIMBO nor RECOVERED. LOST = 2; } @@ -2936,6 +3104,9 @@ message LightningNode { repeated NodeAddress addresses = 4; string color = 5; map features = 6; + + // Custom node announcement tlv records. + map custom_records = 7; } message NodeAddress { @@ -2951,6 +3122,9 @@ message RoutingPolicy { bool disabled = 5; uint64 max_htlc_msat = 6; uint32 last_update = 7; + + // Custom channel update tlv records. + map custom_records = 8; } /* @@ -2978,6 +3152,9 @@ message ChannelEdge { RoutingPolicy node1_policy = 7; RoutingPolicy node2_policy = 8; + + // Custom channel announcement tlv records. + map custom_records = 9; } message ChannelGraphRequest { @@ -3209,17 +3386,23 @@ message Invoice { */ int64 value_msat = 23; - // Whether this invoice has been fulfilled + /* + Whether this invoice has been fulfilled. + + The field is deprecated. Use the state field instead (compare to SETTLED). + */ bool settled = 6 [deprecated = true]; /* When this invoice was created. + Measured in seconds since the unix epoch. Note: Output only, don't specify for creating an invoice. */ int64 creation_date = 7; /* When this invoice was settled. + Measured in seconds since the unix epoch. Note: Output only, don't specify for creating an invoice. */ int64 settle_date = 8; @@ -3240,7 +3423,7 @@ message Invoice { */ bytes description_hash = 10; - // Payment request expiry time in seconds. Default is 3600 (1 hour). + // Payment request expiry time in seconds. Default is 86400 (24 hours). int64 expiry = 11; // Fallback on-chain address. @@ -3256,6 +3439,8 @@ message Invoice { repeated RouteHint route_hints = 14; // Whether this invoice should include routing hints for private channels. + // Note: When enabled, if value and value_msat are zero, a large number of + // hints with these channels can be included, which might not be desirable. bool private = 15; /* @@ -3484,7 +3669,16 @@ message ListInvoiceRequest { specified index offset. This can be used to paginate backwards. */ bool reversed = 6; + + // If set, returns all invoices with a creation date greater than or equal + // to it. Measured in seconds since the unix epoch. + uint64 creation_date_start = 7; + + // If set, returns all invoices with a creation date less than or equal to + // it. Measured in seconds since the unix epoch. + uint64 creation_date_end = 8; } + message ListInvoiceResponse { /* A list of invoices from the time slice of the time series specified in the @@ -3683,6 +3877,14 @@ message ListPaymentsRequest { of payments, as all of them have to be iterated through to be counted. */ bool count_total_payments = 5; + + // If set, returns all invoices with a creation date greater than or equal + // to it. Measured in seconds since the unix epoch. + uint64 creation_date_start = 6; + + // If set, returns all invoices with a creation date less than or equal to + // it. Measured in seconds since the unix epoch. + uint64 creation_date_end = 7; } message ListPaymentsResponse { @@ -3927,6 +4129,10 @@ message ForwardingHistoryRequest { // The max number of events to return in the response to this query. uint32 num_max_events = 4; + + // Informs the server if the peer alias should be looked up for each + // forwarding event. + bool peer_alias_lookup = 5; } message ForwardingEvent { // Timestamp is the time (unix epoch offset) that this circuit was @@ -3966,6 +4172,12 @@ message ForwardingEvent { // circuit was completed. uint64 timestamp_ns = 11; + // The peer alias of the incoming channel. + string peer_alias_in = 12; + + // The peer alias of the outgoing channel. + string peer_alias_out = 13; + // TODO(roasbeef): add settlement latency? // * use FPE on the chan id? // * also list failures? @@ -4361,6 +4573,14 @@ message RPCMiddlewareRequest { the same type, or replaced by an error message. */ RPCMessage response = 6; + + /* + This is used to indicate to the client that the server has successfully + registered the interceptor. This is only used in the very first message + that the server sends to the client after the client sends the server + the middleware registration message. + */ + bool reg_complete = 8; } /* @@ -4398,7 +4618,8 @@ message RPCMessage { /* The full canonical gRPC name of the message type (in the format - .TypeName, for example lnrpc.GetInfoRequest). + .TypeName, for example lnrpc.GetInfoRequest). In case of an + error being returned from lnd, this simply contains the string "error". */ string type_name = 3; @@ -4407,6 +4628,13 @@ message RPCMessage { format. */ bytes serialized = 4; + + /* + Indicates that the response from lnd was an error, not a gRPC response. If + this is set to true then the type_name contains the string "error" and + serialized contains the error string. + */ + bool is_error = 5; } message RPCMiddlewareResponse { @@ -4483,18 +4711,16 @@ message InterceptFeedback { string error = 1; /* - A boolean indicating that the gRPC response should be replaced/overwritten. - As its name suggests, this can only be used as a feedback to an intercepted - response RPC message and is ignored for feedback on any other message. This - boolean is needed because in protobuf an empty message is serialized as a - 0-length or nil byte slice and we wouldn't be able to distinguish between + A boolean indicating that the gRPC message should be replaced/overwritten. + This boolean is needed because in protobuf an empty message is serialized as + a 0-length or nil byte slice and we wouldn't be able to distinguish between an empty replacement message and the "don't replace anything" case. */ bool replace_response = 2; /* If the replace_response field is set to true, this field must contain the - binary serialized gRPC response message in the protobuf format. + binary serialized gRPC message in the protobuf format. */ bytes replacement_serialized = 3; } diff --git a/home.admin/config.scripts/lndlibs/lightning_pb2.py b/home.admin/config.scripts/lndlibs/lightning_pb2.py index 8183c888d..311d20f99 100644 --- a/home.admin/config.scripts/lndlibs/lightning_pb2.py +++ b/home.admin/config.scripts/lndlibs/lightning_pb2.py @@ -2,11 +2,9 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: lightning.proto """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper +from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) @@ -15,1812 +13,10 @@ _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0flightning.proto\x12\x05lnrpc\" \n\x1eSubscribeCustomMessagesRequest\"9\n\rCustomMessage\x12\x0c\n\x04peer\x18\x01 \x01(\x0c\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"D\n\x18SendCustomMessageRequest\x12\x0c\n\x04peer\x18\x01 \x01(\x0c\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"\x1b\n\x19SendCustomMessageResponse\"\xa2\x01\n\x04Utxo\x12(\n\x0c\x61\x64\x64ress_type\x18\x01 \x01(\x0e\x32\x12.lnrpc.AddressType\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x12\n\namount_sat\x18\x03 \x01(\x03\x12\x11\n\tpk_script\x18\x04 \x01(\t\x12!\n\x08outpoint\x18\x05 \x01(\x0b\x32\x0f.lnrpc.OutPoint\x12\x15\n\rconfirmations\x18\x06 \x01(\x03\"\x9e\x01\n\x0cOutputDetail\x12,\n\x0boutput_type\x18\x01 \x01(\x0e\x32\x17.lnrpc.OutputScriptType\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x11\n\tpk_script\x18\x03 \x01(\t\x12\x14\n\x0coutput_index\x18\x04 \x01(\x03\x12\x0e\n\x06\x61mount\x18\x05 \x01(\x03\x12\x16\n\x0eis_our_address\x18\x06 \x01(\x08\"\xbc\x02\n\x0bTransaction\x12\x0f\n\x07tx_hash\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x19\n\x11num_confirmations\x18\x03 \x01(\x05\x12\x12\n\nblock_hash\x18\x04 \x01(\t\x12\x14\n\x0c\x62lock_height\x18\x05 \x01(\x05\x12\x12\n\ntime_stamp\x18\x06 \x01(\x03\x12\x12\n\ntotal_fees\x18\x07 \x01(\x03\x12\x1a\n\x0e\x64\x65st_addresses\x18\x08 \x03(\tB\x02\x18\x01\x12+\n\x0eoutput_details\x18\x0b \x03(\x0b\x32\x13.lnrpc.OutputDetail\x12\x12\n\nraw_tx_hex\x18\t \x01(\t\x12\r\n\x05label\x18\n \x01(\t\x12\x33\n\x12previous_outpoints\x18\x0c \x03(\x0b\x32\x17.lnrpc.PreviousOutPoint\"S\n\x16GetTransactionsRequest\x12\x14\n\x0cstart_height\x18\x01 \x01(\x05\x12\x12\n\nend_height\x18\x02 \x01(\x05\x12\x0f\n\x07\x61\x63\x63ount\x18\x03 \x01(\t\">\n\x12TransactionDetails\x12(\n\x0ctransactions\x18\x01 \x03(\x0b\x32\x12.lnrpc.Transaction\"M\n\x08\x46\x65\x65Limit\x12\x0f\n\x05\x66ixed\x18\x01 \x01(\x03H\x00\x12\x14\n\nfixed_msat\x18\x03 \x01(\x03H\x00\x12\x11\n\x07percent\x18\x02 \x01(\x03H\x00\x42\x07\n\x05limit\"\x8a\x04\n\x0bSendRequest\x12\x0c\n\x04\x64\x65st\x18\x01 \x01(\x0c\x12\x17\n\x0b\x64\x65st_string\x18\x02 \x01(\tB\x02\x18\x01\x12\x0b\n\x03\x61mt\x18\x03 \x01(\x03\x12\x10\n\x08\x61mt_msat\x18\x0c \x01(\x03\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12\x1f\n\x13payment_hash_string\x18\x05 \x01(\tB\x02\x18\x01\x12\x17\n\x0fpayment_request\x18\x06 \x01(\t\x12\x18\n\x10\x66inal_cltv_delta\x18\x07 \x01(\x05\x12\"\n\tfee_limit\x18\x08 \x01(\x0b\x32\x0f.lnrpc.FeeLimit\x12\x1c\n\x10outgoing_chan_id\x18\t \x01(\x04\x42\x02\x30\x01\x12\x17\n\x0flast_hop_pubkey\x18\r \x01(\x0c\x12\x12\n\ncltv_limit\x18\n \x01(\r\x12\x46\n\x13\x64\x65st_custom_records\x18\x0b \x03(\x0b\x32).lnrpc.SendRequest.DestCustomRecordsEntry\x12\x1a\n\x12\x61llow_self_payment\x18\x0e \x01(\x08\x12(\n\rdest_features\x18\x0f \x03(\x0e\x32\x11.lnrpc.FeatureBit\x12\x14\n\x0cpayment_addr\x18\x10 \x01(\x0c\x1a\x38\n\x16\x44\x65stCustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"z\n\x0cSendResponse\x12\x15\n\rpayment_error\x18\x01 \x01(\t\x12\x18\n\x10payment_preimage\x18\x02 \x01(\x0c\x12#\n\rpayment_route\x18\x03 \x01(\x0b\x32\x0c.lnrpc.Route\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\"n\n\x12SendToRouteRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x1f\n\x13payment_hash_string\x18\x02 \x01(\tB\x02\x18\x01\x12\x1b\n\x05route\x18\x04 \x01(\x0b\x32\x0c.lnrpc.RouteJ\x04\x08\x03\x10\x04\"\xe5\x02\n\x14\x43hannelAcceptRequest\x12\x13\n\x0bnode_pubkey\x18\x01 \x01(\x0c\x12\x12\n\nchain_hash\x18\x02 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x03 \x01(\x0c\x12\x13\n\x0b\x66unding_amt\x18\x04 \x01(\x04\x12\x10\n\x08push_amt\x18\x05 \x01(\x04\x12\x12\n\ndust_limit\x18\x06 \x01(\x04\x12\x1b\n\x13max_value_in_flight\x18\x07 \x01(\x04\x12\x17\n\x0f\x63hannel_reserve\x18\x08 \x01(\x04\x12\x10\n\x08min_htlc\x18\t \x01(\x04\x12\x12\n\nfee_per_kw\x18\n \x01(\x04\x12\x11\n\tcsv_delay\x18\x0b \x01(\r\x12\x1a\n\x12max_accepted_htlcs\x18\x0c \x01(\r\x12\x15\n\rchannel_flags\x18\r \x01(\r\x12.\n\x0f\x63ommitment_type\x18\x0e \x01(\x0e\x32\x15.lnrpc.CommitmentType\"\xf4\x01\n\x15\x43hannelAcceptResponse\x12\x0e\n\x06\x61\x63\x63\x65pt\x18\x01 \x01(\x08\x12\x17\n\x0fpending_chan_id\x18\x02 \x01(\x0c\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12\x18\n\x10upfront_shutdown\x18\x04 \x01(\t\x12\x11\n\tcsv_delay\x18\x05 \x01(\r\x12\x13\n\x0breserve_sat\x18\x06 \x01(\x04\x12\x1a\n\x12in_flight_max_msat\x18\x07 \x01(\x04\x12\x16\n\x0emax_htlc_count\x18\x08 \x01(\r\x12\x13\n\x0bmin_htlc_in\x18\t \x01(\x04\x12\x18\n\x10min_accept_depth\x18\n \x01(\r\"n\n\x0c\x43hannelPoint\x12\x1c\n\x12\x66unding_txid_bytes\x18\x01 \x01(\x0cH\x00\x12\x1a\n\x10\x66unding_txid_str\x18\x02 \x01(\tH\x00\x12\x14\n\x0coutput_index\x18\x03 \x01(\rB\x0e\n\x0c\x66unding_txid\"F\n\x08OutPoint\x12\x12\n\ntxid_bytes\x18\x01 \x01(\x0c\x12\x10\n\x08txid_str\x18\x02 \x01(\t\x12\x14\n\x0coutput_index\x18\x03 \x01(\r\";\n\x10PreviousOutPoint\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x15\n\ris_our_output\x18\x02 \x01(\x08\"0\n\x10LightningAddress\x12\x0e\n\x06pubkey\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\"\xcf\x01\n\x12\x45stimateFeeRequest\x12\x41\n\x0c\x41\x64\x64rToAmount\x18\x01 \x03(\x0b\x32+.lnrpc.EstimateFeeRequest.AddrToAmountEntry\x12\x13\n\x0btarget_conf\x18\x02 \x01(\x05\x12\x11\n\tmin_confs\x18\x03 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x04 \x01(\x08\x1a\x33\n\x11\x41\x64\x64rToAmountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"_\n\x13\x45stimateFeeResponse\x12\x0f\n\x07\x66\x65\x65_sat\x18\x01 \x01(\x03\x12 \n\x14\x66\x65\x65rate_sat_per_byte\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x15\n\rsat_per_vbyte\x18\x03 \x01(\x04\"\x89\x02\n\x0fSendManyRequest\x12>\n\x0c\x41\x64\x64rToAmount\x18\x01 \x03(\x0b\x32(.lnrpc.SendManyRequest.AddrToAmountEntry\x12\x13\n\x0btarget_conf\x18\x03 \x01(\x05\x12\x15\n\rsat_per_vbyte\x18\x04 \x01(\x04\x12\x18\n\x0csat_per_byte\x18\x05 \x01(\x03\x42\x02\x18\x01\x12\r\n\x05label\x18\x06 \x01(\t\x12\x11\n\tmin_confs\x18\x07 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x08 \x01(\x08\x1a\x33\n\x11\x41\x64\x64rToAmountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\" \n\x10SendManyResponse\x12\x0c\n\x04txid\x18\x01 \x01(\t\"\xc5\x01\n\x10SendCoinsRequest\x12\x0c\n\x04\x61\x64\x64r\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x13\n\x0btarget_conf\x18\x03 \x01(\x05\x12\x15\n\rsat_per_vbyte\x18\x04 \x01(\x04\x12\x18\n\x0csat_per_byte\x18\x05 \x01(\x03\x42\x02\x18\x01\x12\x10\n\x08send_all\x18\x06 \x01(\x08\x12\r\n\x05label\x18\x07 \x01(\t\x12\x11\n\tmin_confs\x18\x08 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\t \x01(\x08\"!\n\x11SendCoinsResponse\x12\x0c\n\x04txid\x18\x01 \x01(\t\"K\n\x12ListUnspentRequest\x12\x11\n\tmin_confs\x18\x01 \x01(\x05\x12\x11\n\tmax_confs\x18\x02 \x01(\x05\x12\x0f\n\x07\x61\x63\x63ount\x18\x03 \x01(\t\"1\n\x13ListUnspentResponse\x12\x1a\n\x05utxos\x18\x01 \x03(\x0b\x32\x0b.lnrpc.Utxo\"F\n\x11NewAddressRequest\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.lnrpc.AddressType\x12\x0f\n\x07\x61\x63\x63ount\x18\x02 \x01(\t\"%\n\x12NewAddressResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"6\n\x12SignMessageRequest\x12\x0b\n\x03msg\x18\x01 \x01(\x0c\x12\x13\n\x0bsingle_hash\x18\x02 \x01(\x08\"(\n\x13SignMessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\t\"6\n\x14VerifyMessageRequest\x12\x0b\n\x03msg\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\t\"6\n\x15VerifyMessageResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\t\"Z\n\x12\x43onnectPeerRequest\x12%\n\x04\x61\x64\x64r\x18\x01 \x01(\x0b\x32\x17.lnrpc.LightningAddress\x12\x0c\n\x04perm\x18\x02 \x01(\x08\x12\x0f\n\x07timeout\x18\x03 \x01(\x04\"\x15\n\x13\x43onnectPeerResponse\"(\n\x15\x44isconnectPeerRequest\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\"\x18\n\x16\x44isconnectPeerResponse\"\xa5\x01\n\x04HTLC\x12\x10\n\x08incoming\x18\x01 \x01(\x08\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x11\n\thash_lock\x18\x03 \x01(\x0c\x12\x19\n\x11\x65xpiration_height\x18\x04 \x01(\r\x12\x12\n\nhtlc_index\x18\x05 \x01(\x04\x12\x1a\n\x12\x66orwarding_channel\x18\x06 \x01(\x04\x12\x1d\n\x15\x66orwarding_htlc_index\x18\x07 \x01(\x04\"\xaa\x01\n\x12\x43hannelConstraints\x12\x11\n\tcsv_delay\x18\x01 \x01(\r\x12\x18\n\x10\x63han_reserve_sat\x18\x02 \x01(\x04\x12\x16\n\x0e\x64ust_limit_sat\x18\x03 \x01(\x04\x12\x1c\n\x14max_pending_amt_msat\x18\x04 \x01(\x04\x12\x15\n\rmin_htlc_msat\x18\x05 \x01(\x04\x12\x1a\n\x12max_accepted_htlcs\x18\x06 \x01(\r\"\xb0\x06\n\x07\x43hannel\x12\x0e\n\x06\x61\x63tive\x18\x01 \x01(\x08\x12\x15\n\rremote_pubkey\x18\x02 \x01(\t\x12\x15\n\rchannel_point\x18\x03 \x01(\t\x12\x13\n\x07\x63han_id\x18\x04 \x01(\x04\x42\x02\x30\x01\x12\x10\n\x08\x63\x61pacity\x18\x05 \x01(\x03\x12\x15\n\rlocal_balance\x18\x06 \x01(\x03\x12\x16\n\x0eremote_balance\x18\x07 \x01(\x03\x12\x12\n\ncommit_fee\x18\x08 \x01(\x03\x12\x15\n\rcommit_weight\x18\t \x01(\x03\x12\x12\n\nfee_per_kw\x18\n \x01(\x03\x12\x19\n\x11unsettled_balance\x18\x0b \x01(\x03\x12\x1b\n\x13total_satoshis_sent\x18\x0c \x01(\x03\x12\x1f\n\x17total_satoshis_received\x18\r \x01(\x03\x12\x13\n\x0bnum_updates\x18\x0e \x01(\x04\x12\"\n\rpending_htlcs\x18\x0f \x03(\x0b\x32\x0b.lnrpc.HTLC\x12\x15\n\tcsv_delay\x18\x10 \x01(\rB\x02\x18\x01\x12\x0f\n\x07private\x18\x11 \x01(\x08\x12\x11\n\tinitiator\x18\x12 \x01(\x08\x12\x19\n\x11\x63han_status_flags\x18\x13 \x01(\t\x12\"\n\x16local_chan_reserve_sat\x18\x14 \x01(\x03\x42\x02\x18\x01\x12#\n\x17remote_chan_reserve_sat\x18\x15 \x01(\x03\x42\x02\x18\x01\x12\x1d\n\x11static_remote_key\x18\x16 \x01(\x08\x42\x02\x18\x01\x12.\n\x0f\x63ommitment_type\x18\x1a \x01(\x0e\x32\x15.lnrpc.CommitmentType\x12\x10\n\x08lifetime\x18\x17 \x01(\x03\x12\x0e\n\x06uptime\x18\x18 \x01(\x03\x12\x15\n\rclose_address\x18\x19 \x01(\t\x12\x17\n\x0fpush_amount_sat\x18\x1b \x01(\x04\x12\x13\n\x0bthaw_height\x18\x1c \x01(\r\x12\x34\n\x11local_constraints\x18\x1d \x01(\x0b\x32\x19.lnrpc.ChannelConstraints\x12\x35\n\x12remote_constraints\x18\x1e \x01(\x0b\x32\x19.lnrpc.ChannelConstraints\"z\n\x13ListChannelsRequest\x12\x13\n\x0b\x61\x63tive_only\x18\x01 \x01(\x08\x12\x15\n\rinactive_only\x18\x02 \x01(\x08\x12\x13\n\x0bpublic_only\x18\x03 \x01(\x08\x12\x14\n\x0cprivate_only\x18\x04 \x01(\x08\x12\x0c\n\x04peer\x18\x05 \x01(\x0c\"8\n\x14ListChannelsResponse\x12 \n\x08\x63hannels\x18\x0b \x03(\x0b\x32\x0e.lnrpc.Channel\"\xa9\x04\n\x13\x43hannelCloseSummary\x12\x15\n\rchannel_point\x18\x01 \x01(\t\x12\x13\n\x07\x63han_id\x18\x02 \x01(\x04\x42\x02\x30\x01\x12\x12\n\nchain_hash\x18\x03 \x01(\t\x12\x17\n\x0f\x63losing_tx_hash\x18\x04 \x01(\t\x12\x15\n\rremote_pubkey\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61pacity\x18\x06 \x01(\x03\x12\x14\n\x0c\x63lose_height\x18\x07 \x01(\r\x12\x17\n\x0fsettled_balance\x18\x08 \x01(\x03\x12\x1b\n\x13time_locked_balance\x18\t \x01(\x03\x12:\n\nclose_type\x18\n \x01(\x0e\x32&.lnrpc.ChannelCloseSummary.ClosureType\x12(\n\x0eopen_initiator\x18\x0b \x01(\x0e\x32\x10.lnrpc.Initiator\x12)\n\x0f\x63lose_initiator\x18\x0c \x01(\x0e\x32\x10.lnrpc.Initiator\x12&\n\x0bresolutions\x18\r \x03(\x0b\x32\x11.lnrpc.Resolution\"\x8a\x01\n\x0b\x43losureType\x12\x15\n\x11\x43OOPERATIVE_CLOSE\x10\x00\x12\x15\n\x11LOCAL_FORCE_CLOSE\x10\x01\x12\x16\n\x12REMOTE_FORCE_CLOSE\x10\x02\x12\x10\n\x0c\x42REACH_CLOSE\x10\x03\x12\x14\n\x10\x46UNDING_CANCELED\x10\x04\x12\r\n\tABANDONED\x10\x05\"\xb2\x01\n\nResolution\x12.\n\x0fresolution_type\x18\x01 \x01(\x0e\x32\x15.lnrpc.ResolutionType\x12)\n\x07outcome\x18\x02 \x01(\x0e\x32\x18.lnrpc.ResolutionOutcome\x12!\n\x08outpoint\x18\x03 \x01(\x0b\x32\x0f.lnrpc.OutPoint\x12\x12\n\namount_sat\x18\x04 \x01(\x04\x12\x12\n\nsweep_txid\x18\x05 \x01(\t\"\x94\x01\n\x15\x43losedChannelsRequest\x12\x13\n\x0b\x63ooperative\x18\x01 \x01(\x08\x12\x13\n\x0blocal_force\x18\x02 \x01(\x08\x12\x14\n\x0cremote_force\x18\x03 \x01(\x08\x12\x0e\n\x06\x62reach\x18\x04 \x01(\x08\x12\x18\n\x10\x66unding_canceled\x18\x05 \x01(\x08\x12\x11\n\tabandoned\x18\x06 \x01(\x08\"F\n\x16\x43losedChannelsResponse\x12,\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1a.lnrpc.ChannelCloseSummary\"\xef\x03\n\x04Peer\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x03 \x01(\t\x12\x12\n\nbytes_sent\x18\x04 \x01(\x04\x12\x12\n\nbytes_recv\x18\x05 \x01(\x04\x12\x10\n\x08sat_sent\x18\x06 \x01(\x03\x12\x10\n\x08sat_recv\x18\x07 \x01(\x03\x12\x0f\n\x07inbound\x18\x08 \x01(\x08\x12\x11\n\tping_time\x18\t \x01(\x03\x12\'\n\tsync_type\x18\n \x01(\x0e\x32\x14.lnrpc.Peer.SyncType\x12+\n\x08\x66\x65\x61tures\x18\x0b \x03(\x0b\x32\x19.lnrpc.Peer.FeaturesEntry\x12\'\n\x06\x65rrors\x18\x0c \x03(\x0b\x32\x17.lnrpc.TimestampedError\x12\x12\n\nflap_count\x18\r \x01(\x05\x12\x14\n\x0clast_flap_ns\x18\x0e \x01(\x03\x12\x19\n\x11last_ping_payload\x18\x0f \x01(\x0c\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\"P\n\x08SyncType\x12\x10\n\x0cUNKNOWN_SYNC\x10\x00\x12\x0f\n\x0b\x41\x43TIVE_SYNC\x10\x01\x12\x10\n\x0cPASSIVE_SYNC\x10\x02\x12\x0f\n\x0bPINNED_SYNC\x10\x03\"4\n\x10TimestampedError\x12\x11\n\ttimestamp\x18\x01 \x01(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"(\n\x10ListPeersRequest\x12\x14\n\x0clatest_error\x18\x01 \x01(\x08\"/\n\x11ListPeersResponse\x12\x1a\n\x05peers\x18\x01 \x03(\x0b\x32\x0b.lnrpc.Peer\"\x17\n\x15PeerEventSubscription\"v\n\tPeerEvent\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12(\n\x04type\x18\x02 \x01(\x0e\x32\x1a.lnrpc.PeerEvent.EventType\".\n\tEventType\x12\x0f\n\x0bPEER_ONLINE\x10\x00\x12\x10\n\x0cPEER_OFFLINE\x10\x01\"\x10\n\x0eGetInfoRequest\"\xb8\x04\n\x0fGetInfoResponse\x12\x0f\n\x07version\x18\x0e \x01(\t\x12\x13\n\x0b\x63ommit_hash\x18\x14 \x01(\t\x12\x17\n\x0fidentity_pubkey\x18\x01 \x01(\t\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x11 \x01(\t\x12\x1c\n\x14num_pending_channels\x18\x03 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x04 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x0f \x01(\r\x12\x11\n\tnum_peers\x18\x05 \x01(\r\x12\x14\n\x0c\x62lock_height\x18\x06 \x01(\r\x12\x12\n\nblock_hash\x18\x08 \x01(\t\x12\x1d\n\x15\x62\x65st_header_timestamp\x18\r \x01(\x03\x12\x17\n\x0fsynced_to_chain\x18\t \x01(\x08\x12\x17\n\x0fsynced_to_graph\x18\x12 \x01(\x08\x12\x13\n\x07testnet\x18\n \x01(\x08\x42\x02\x18\x01\x12\x1c\n\x06\x63hains\x18\x10 \x03(\x0b\x32\x0c.lnrpc.Chain\x12\x0c\n\x04uris\x18\x0c \x03(\t\x12\x36\n\x08\x66\x65\x61tures\x18\x13 \x03(\x0b\x32$.lnrpc.GetInfoResponse.FeaturesEntry\x12 \n\x18require_htlc_interceptor\x18\x15 \x01(\x08\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01J\x04\x08\x0b\x10\x0c\"\x18\n\x16GetRecoveryInfoRequest\"]\n\x17GetRecoveryInfoResponse\x12\x15\n\rrecovery_mode\x18\x01 \x01(\x08\x12\x19\n\x11recovery_finished\x18\x02 \x01(\x08\x12\x10\n\x08progress\x18\x03 \x01(\x01\"\'\n\x05\x43hain\x12\r\n\x05\x63hain\x18\x01 \x01(\t\x12\x0f\n\x07network\x18\x02 \x01(\t\"U\n\x12\x43onfirmationUpdate\x12\x11\n\tblock_sha\x18\x01 \x01(\x0c\x12\x14\n\x0c\x62lock_height\x18\x02 \x01(\x05\x12\x16\n\x0enum_confs_left\x18\x03 \x01(\r\"?\n\x11\x43hannelOpenUpdate\x12*\n\rchannel_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\";\n\x12\x43hannelCloseUpdate\x12\x14\n\x0c\x63losing_txid\x18\x01 \x01(\x0c\x12\x0f\n\x07success\x18\x02 \x01(\x08\"\xb0\x01\n\x13\x43loseChannelRequest\x12*\n\rchannel_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\x12\x13\n\x0btarget_conf\x18\x03 \x01(\x05\x12\x18\n\x0csat_per_byte\x18\x04 \x01(\x03\x42\x02\x18\x01\x12\x18\n\x10\x64\x65livery_address\x18\x05 \x01(\t\x12\x15\n\rsat_per_vbyte\x18\x06 \x01(\x04\"}\n\x11\x43loseStatusUpdate\x12-\n\rclose_pending\x18\x01 \x01(\x0b\x32\x14.lnrpc.PendingUpdateH\x00\x12/\n\nchan_close\x18\x03 \x01(\x0b\x32\x19.lnrpc.ChannelCloseUpdateH\x00\x42\x08\n\x06update\"3\n\rPendingUpdate\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x14\n\x0coutput_index\x18\x02 \x01(\r\"T\n\x13ReadyForPsbtFunding\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x16\n\x0e\x66unding_amount\x18\x02 \x01(\x03\x12\x0c\n\x04psbt\x18\x03 \x01(\x0c\"\xad\x01\n\x17\x42\x61tchOpenChannelRequest\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.lnrpc.BatchOpenChannel\x12\x13\n\x0btarget_conf\x18\x02 \x01(\x05\x12\x15\n\rsat_per_vbyte\x18\x03 \x01(\x03\x12\x11\n\tmin_confs\x18\x04 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x05 \x01(\x08\x12\r\n\x05label\x18\x06 \x01(\t\"\xf9\x01\n\x10\x42\x61tchOpenChannel\x12\x13\n\x0bnode_pubkey\x18\x01 \x01(\x0c\x12\x1c\n\x14local_funding_amount\x18\x02 \x01(\x03\x12\x10\n\x08push_sat\x18\x03 \x01(\x03\x12\x0f\n\x07private\x18\x04 \x01(\x08\x12\x15\n\rmin_htlc_msat\x18\x05 \x01(\x03\x12\x18\n\x10remote_csv_delay\x18\x06 \x01(\r\x12\x15\n\rclose_address\x18\x07 \x01(\t\x12\x17\n\x0fpending_chan_id\x18\x08 \x01(\x0c\x12.\n\x0f\x63ommitment_type\x18\t \x01(\x0e\x32\x15.lnrpc.CommitmentType\"J\n\x18\x42\x61tchOpenChannelResponse\x12.\n\x10pending_channels\x18\x01 \x03(\x0b\x32\x14.lnrpc.PendingUpdate\"\xfa\x03\n\x12OpenChannelRequest\x12\x15\n\rsat_per_vbyte\x18\x01 \x01(\x04\x12\x13\n\x0bnode_pubkey\x18\x02 \x01(\x0c\x12\x1e\n\x12node_pubkey_string\x18\x03 \x01(\tB\x02\x18\x01\x12\x1c\n\x14local_funding_amount\x18\x04 \x01(\x03\x12\x10\n\x08push_sat\x18\x05 \x01(\x03\x12\x13\n\x0btarget_conf\x18\x06 \x01(\x05\x12\x18\n\x0csat_per_byte\x18\x07 \x01(\x03\x42\x02\x18\x01\x12\x0f\n\x07private\x18\x08 \x01(\x08\x12\x15\n\rmin_htlc_msat\x18\t \x01(\x03\x12\x18\n\x10remote_csv_delay\x18\n \x01(\r\x12\x11\n\tmin_confs\x18\x0b \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x0c \x01(\x08\x12\x15\n\rclose_address\x18\r \x01(\t\x12(\n\x0c\x66unding_shim\x18\x0e \x01(\x0b\x32\x12.lnrpc.FundingShim\x12\'\n\x1fremote_max_value_in_flight_msat\x18\x0f \x01(\x04\x12\x18\n\x10remote_max_htlcs\x18\x10 \x01(\r\x12\x15\n\rmax_local_csv\x18\x11 \x01(\r\x12.\n\x0f\x63ommitment_type\x18\x12 \x01(\x0e\x32\x15.lnrpc.CommitmentType\"\xc3\x01\n\x10OpenStatusUpdate\x12,\n\x0c\x63han_pending\x18\x01 \x01(\x0b\x32\x14.lnrpc.PendingUpdateH\x00\x12-\n\tchan_open\x18\x03 \x01(\x0b\x32\x18.lnrpc.ChannelOpenUpdateH\x00\x12/\n\tpsbt_fund\x18\x05 \x01(\x0b\x32\x1a.lnrpc.ReadyForPsbtFundingH\x00\x12\x17\n\x0fpending_chan_id\x18\x04 \x01(\x0c\x42\x08\n\x06update\"3\n\nKeyLocator\x12\x12\n\nkey_family\x18\x01 \x01(\x05\x12\x11\n\tkey_index\x18\x02 \x01(\x05\"J\n\rKeyDescriptor\x12\x15\n\rraw_key_bytes\x18\x01 \x01(\x0c\x12\"\n\x07key_loc\x18\x02 \x01(\x0b\x32\x11.lnrpc.KeyLocator\"\xb0\x01\n\rChanPointShim\x12\x0b\n\x03\x61mt\x18\x01 \x01(\x03\x12\'\n\nchan_point\x18\x02 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\'\n\tlocal_key\x18\x03 \x01(\x0b\x32\x14.lnrpc.KeyDescriptor\x12\x12\n\nremote_key\x18\x04 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x05 \x01(\x0c\x12\x13\n\x0bthaw_height\x18\x06 \x01(\r\"J\n\x08PsbtShim\x12\x17\n\x0fpending_chan_id\x18\x01 \x01(\x0c\x12\x11\n\tbase_psbt\x18\x02 \x01(\x0c\x12\x12\n\nno_publish\x18\x03 \x01(\x08\"l\n\x0b\x46undingShim\x12/\n\x0f\x63han_point_shim\x18\x01 \x01(\x0b\x32\x14.lnrpc.ChanPointShimH\x00\x12$\n\tpsbt_shim\x18\x02 \x01(\x0b\x32\x0f.lnrpc.PsbtShimH\x00\x42\x06\n\x04shim\",\n\x11\x46undingShimCancel\x12\x17\n\x0fpending_chan_id\x18\x01 \x01(\x0c\"X\n\x11\x46undingPsbtVerify\x12\x13\n\x0b\x66unded_psbt\x18\x01 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x02 \x01(\x0c\x12\x15\n\rskip_finalize\x18\x03 \x01(\x08\"Y\n\x13\x46undingPsbtFinalize\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x02 \x01(\x0c\x12\x14\n\x0c\x66inal_raw_tx\x18\x03 \x01(\x0c\"\xe5\x01\n\x14\x46undingTransitionMsg\x12+\n\rshim_register\x18\x01 \x01(\x0b\x32\x12.lnrpc.FundingShimH\x00\x12/\n\x0bshim_cancel\x18\x02 \x01(\x0b\x32\x18.lnrpc.FundingShimCancelH\x00\x12/\n\x0bpsbt_verify\x18\x03 \x01(\x0b\x32\x18.lnrpc.FundingPsbtVerifyH\x00\x12\x33\n\rpsbt_finalize\x18\x04 \x01(\x0b\x32\x1a.lnrpc.FundingPsbtFinalizeH\x00\x42\t\n\x07trigger\"\x16\n\x14\x46undingStateStepResp\"\x86\x01\n\x0bPendingHTLC\x12\x10\n\x08incoming\x18\x01 \x01(\x08\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x10\n\x08outpoint\x18\x03 \x01(\t\x12\x17\n\x0fmaturity_height\x18\x04 \x01(\r\x12\x1b\n\x13\x62locks_til_maturity\x18\x05 \x01(\x05\x12\r\n\x05stage\x18\x06 \x01(\r\"\x18\n\x16PendingChannelsRequest\"\xf7\r\n\x17PendingChannelsResponse\x12\x1b\n\x13total_limbo_balance\x18\x01 \x01(\x03\x12P\n\x15pending_open_channels\x18\x02 \x03(\x0b\x32\x31.lnrpc.PendingChannelsResponse.PendingOpenChannel\x12R\n\x18pending_closing_channels\x18\x03 \x03(\x0b\x32,.lnrpc.PendingChannelsResponse.ClosedChannelB\x02\x18\x01\x12Y\n\x1epending_force_closing_channels\x18\x04 \x03(\x0b\x32\x31.lnrpc.PendingChannelsResponse.ForceClosedChannel\x12R\n\x16waiting_close_channels\x18\x05 \x03(\x0b\x32\x32.lnrpc.PendingChannelsResponse.WaitingCloseChannel\x1a\xe4\x02\n\x0ePendingChannel\x12\x17\n\x0fremote_node_pub\x18\x01 \x01(\t\x12\x15\n\rchannel_point\x18\x02 \x01(\t\x12\x10\n\x08\x63\x61pacity\x18\x03 \x01(\x03\x12\x15\n\rlocal_balance\x18\x04 \x01(\x03\x12\x16\n\x0eremote_balance\x18\x05 \x01(\x03\x12\x1e\n\x16local_chan_reserve_sat\x18\x06 \x01(\x03\x12\x1f\n\x17remote_chan_reserve_sat\x18\x07 \x01(\x03\x12#\n\tinitiator\x18\x08 \x01(\x0e\x32\x10.lnrpc.Initiator\x12.\n\x0f\x63ommitment_type\x18\t \x01(\x0e\x32\x15.lnrpc.CommitmentType\x12\x1f\n\x17num_forwarding_packages\x18\n \x01(\x03\x12\x19\n\x11\x63han_status_flags\x18\x0b \x01(\t\x12\x0f\n\x07private\x18\x0c \x01(\x08\x1a\x99\x01\n\x12PendingOpenChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x12\n\ncommit_fee\x18\x04 \x01(\x03\x12\x15\n\rcommit_weight\x18\x05 \x01(\x03\x12\x12\n\nfee_per_kw\x18\x06 \x01(\x03J\x04\x08\x02\x10\x03\x1a\xc3\x01\n\x13WaitingCloseChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x15\n\rlimbo_balance\x18\x02 \x01(\x03\x12?\n\x0b\x63ommitments\x18\x03 \x01(\x0b\x32*.lnrpc.PendingChannelsResponse.Commitments\x12\x14\n\x0c\x63losing_txid\x18\x04 \x01(\t\x1a\xb7\x01\n\x0b\x43ommitments\x12\x12\n\nlocal_txid\x18\x01 \x01(\t\x12\x13\n\x0bremote_txid\x18\x02 \x01(\t\x12\x1b\n\x13remote_pending_txid\x18\x03 \x01(\t\x12\x1c\n\x14local_commit_fee_sat\x18\x04 \x01(\x04\x12\x1d\n\x15remote_commit_fee_sat\x18\x05 \x01(\x04\x12%\n\x1dremote_pending_commit_fee_sat\x18\x06 \x01(\x04\x1a\x65\n\rClosedChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x14\n\x0c\x63losing_txid\x18\x02 \x01(\t\x1a\xff\x02\n\x12\x46orceClosedChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x14\n\x0c\x63losing_txid\x18\x02 \x01(\t\x12\x15\n\rlimbo_balance\x18\x03 \x01(\x03\x12\x17\n\x0fmaturity_height\x18\x04 \x01(\r\x12\x1b\n\x13\x62locks_til_maturity\x18\x05 \x01(\x05\x12\x19\n\x11recovered_balance\x18\x06 \x01(\x03\x12)\n\rpending_htlcs\x18\x08 \x03(\x0b\x32\x12.lnrpc.PendingHTLC\x12M\n\x06\x61nchor\x18\t \x01(\x0e\x32=.lnrpc.PendingChannelsResponse.ForceClosedChannel.AnchorState\"1\n\x0b\x41nchorState\x12\t\n\x05LIMBO\x10\x00\x12\r\n\tRECOVERED\x10\x01\x12\x08\n\x04LOST\x10\x02\"\x1a\n\x18\x43hannelEventSubscription\"\x93\x04\n\x12\x43hannelEventUpdate\x12&\n\x0copen_channel\x18\x01 \x01(\x0b\x32\x0e.lnrpc.ChannelH\x00\x12\x34\n\x0e\x63losed_channel\x18\x02 \x01(\x0b\x32\x1a.lnrpc.ChannelCloseSummaryH\x00\x12-\n\x0e\x61\x63tive_channel\x18\x03 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12/\n\x10inactive_channel\x18\x04 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12\x34\n\x14pending_open_channel\x18\x06 \x01(\x0b\x32\x14.lnrpc.PendingUpdateH\x00\x12\x35\n\x16\x66ully_resolved_channel\x18\x07 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12\x32\n\x04type\x18\x05 \x01(\x0e\x32$.lnrpc.ChannelEventUpdate.UpdateType\"\x92\x01\n\nUpdateType\x12\x10\n\x0cOPEN_CHANNEL\x10\x00\x12\x12\n\x0e\x43LOSED_CHANNEL\x10\x01\x12\x12\n\x0e\x41\x43TIVE_CHANNEL\x10\x02\x12\x14\n\x10INACTIVE_CHANNEL\x10\x03\x12\x18\n\x14PENDING_OPEN_CHANNEL\x10\x04\x12\x1a\n\x16\x46ULLY_RESOLVED_CHANNEL\x10\x05\x42\t\n\x07\x63hannel\"N\n\x14WalletAccountBalance\x12\x19\n\x11\x63onfirmed_balance\x18\x01 \x01(\x03\x12\x1b\n\x13unconfirmed_balance\x18\x02 \x01(\x03\"\x16\n\x14WalletBalanceRequest\"\xc3\x02\n\x15WalletBalanceResponse\x12\x15\n\rtotal_balance\x18\x01 \x01(\x03\x12\x19\n\x11\x63onfirmed_balance\x18\x02 \x01(\x03\x12\x1b\n\x13unconfirmed_balance\x18\x03 \x01(\x03\x12\x16\n\x0elocked_balance\x18\x05 \x01(\x03\x12$\n\x1creserved_balance_anchor_chan\x18\x06 \x01(\x03\x12I\n\x0f\x61\x63\x63ount_balance\x18\x04 \x03(\x0b\x32\x30.lnrpc.WalletBalanceResponse.AccountBalanceEntry\x1aR\n\x13\x41\x63\x63ountBalanceEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.lnrpc.WalletAccountBalance:\x02\x38\x01\"#\n\x06\x41mount\x12\x0b\n\x03sat\x18\x01 \x01(\x04\x12\x0c\n\x04msat\x18\x02 \x01(\x04\"\x17\n\x15\x43hannelBalanceRequest\"\xe4\x02\n\x16\x43hannelBalanceResponse\x12\x13\n\x07\x62\x61lance\x18\x01 \x01(\x03\x42\x02\x18\x01\x12 \n\x14pending_open_balance\x18\x02 \x01(\x03\x42\x02\x18\x01\x12$\n\rlocal_balance\x18\x03 \x01(\x0b\x32\r.lnrpc.Amount\x12%\n\x0eremote_balance\x18\x04 \x01(\x0b\x32\r.lnrpc.Amount\x12.\n\x17unsettled_local_balance\x18\x05 \x01(\x0b\x32\r.lnrpc.Amount\x12/\n\x18unsettled_remote_balance\x18\x06 \x01(\x0b\x32\r.lnrpc.Amount\x12\x31\n\x1apending_open_local_balance\x18\x07 \x01(\x0b\x32\r.lnrpc.Amount\x12\x32\n\x1bpending_open_remote_balance\x18\x08 \x01(\x0b\x32\r.lnrpc.Amount\"\xe3\x04\n\x12QueryRoutesRequest\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12\x0b\n\x03\x61mt\x18\x02 \x01(\x03\x12\x10\n\x08\x61mt_msat\x18\x0c \x01(\x03\x12\x18\n\x10\x66inal_cltv_delta\x18\x04 \x01(\x05\x12\"\n\tfee_limit\x18\x05 \x01(\x0b\x32\x0f.lnrpc.FeeLimit\x12\x15\n\rignored_nodes\x18\x06 \x03(\x0c\x12-\n\rignored_edges\x18\x07 \x03(\x0b\x32\x12.lnrpc.EdgeLocatorB\x02\x18\x01\x12\x16\n\x0esource_pub_key\x18\x08 \x01(\t\x12\x1b\n\x13use_mission_control\x18\t \x01(\x08\x12&\n\rignored_pairs\x18\n \x03(\x0b\x32\x0f.lnrpc.NodePair\x12\x12\n\ncltv_limit\x18\x0b \x01(\r\x12M\n\x13\x64\x65st_custom_records\x18\r \x03(\x0b\x32\x30.lnrpc.QueryRoutesRequest.DestCustomRecordsEntry\x12\x1c\n\x10outgoing_chan_id\x18\x0e \x01(\x04\x42\x02\x30\x01\x12\x17\n\x0flast_hop_pubkey\x18\x0f \x01(\x0c\x12%\n\x0broute_hints\x18\x10 \x03(\x0b\x32\x10.lnrpc.RouteHint\x12(\n\rdest_features\x18\x11 \x03(\x0e\x32\x11.lnrpc.FeatureBit\x12\x11\n\ttime_pref\x18\x12 \x01(\x01\x1a\x38\n\x16\x44\x65stCustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01J\x04\x08\x03\x10\x04\"$\n\x08NodePair\x12\x0c\n\x04\x66rom\x18\x01 \x01(\x0c\x12\n\n\x02to\x18\x02 \x01(\x0c\"@\n\x0b\x45\x64geLocator\x12\x16\n\nchannel_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x19\n\x11\x64irection_reverse\x18\x02 \x01(\x08\"I\n\x13QueryRoutesResponse\x12\x1c\n\x06routes\x18\x01 \x03(\x0b\x32\x0c.lnrpc.Route\x12\x14\n\x0csuccess_prob\x18\x02 \x01(\x01\"\x96\x03\n\x03Hop\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x19\n\rchan_capacity\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x1a\n\x0e\x61mt_to_forward\x18\x03 \x01(\x03\x42\x02\x18\x01\x12\x0f\n\x03\x66\x65\x65\x18\x04 \x01(\x03\x42\x02\x18\x01\x12\x0e\n\x06\x65xpiry\x18\x05 \x01(\r\x12\x1b\n\x13\x61mt_to_forward_msat\x18\x06 \x01(\x03\x12\x10\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x03\x12\x0f\n\x07pub_key\x18\x08 \x01(\t\x12\x17\n\x0btlv_payload\x18\t \x01(\x08\x42\x02\x18\x01\x12$\n\nmpp_record\x18\n \x01(\x0b\x32\x10.lnrpc.MPPRecord\x12$\n\namp_record\x18\x0c \x01(\x0b\x32\x10.lnrpc.AMPRecord\x12\x35\n\x0e\x63ustom_records\x18\x0b \x03(\x0b\x32\x1d.lnrpc.Hop.CustomRecordsEntry\x12\x10\n\x08metadata\x18\r \x01(\x0c\x1a\x34\n\x12\x43ustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"9\n\tMPPRecord\x12\x14\n\x0cpayment_addr\x18\x0b \x01(\x0c\x12\x16\n\x0etotal_amt_msat\x18\n \x01(\x03\"D\n\tAMPRecord\x12\x12\n\nroot_share\x18\x01 \x01(\x0c\x12\x0e\n\x06set_id\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hild_index\x18\x03 \x01(\r\"\x9a\x01\n\x05Route\x12\x17\n\x0ftotal_time_lock\x18\x01 \x01(\r\x12\x16\n\ntotal_fees\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x15\n\ttotal_amt\x18\x03 \x01(\x03\x42\x02\x18\x01\x12\x18\n\x04hops\x18\x04 \x03(\x0b\x32\n.lnrpc.Hop\x12\x17\n\x0ftotal_fees_msat\x18\x05 \x01(\x03\x12\x16\n\x0etotal_amt_msat\x18\x06 \x01(\x03\"<\n\x0fNodeInfoRequest\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12\x18\n\x10include_channels\x18\x02 \x01(\x08\"\x82\x01\n\x08NodeInfo\x12\"\n\x04node\x18\x01 \x01(\x0b\x32\x14.lnrpc.LightningNode\x12\x14\n\x0cnum_channels\x18\x02 \x01(\r\x12\x16\n\x0etotal_capacity\x18\x03 \x01(\x03\x12$\n\x08\x63hannels\x18\x04 \x03(\x0b\x32\x12.lnrpc.ChannelEdge\"\xf1\x01\n\rLightningNode\x12\x13\n\x0blast_update\x18\x01 \x01(\r\x12\x0f\n\x07pub_key\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12%\n\taddresses\x18\x04 \x03(\x0b\x32\x12.lnrpc.NodeAddress\x12\r\n\x05\x63olor\x18\x05 \x01(\t\x12\x34\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0b\x32\".lnrpc.LightningNode.FeaturesEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\",\n\x0bNodeAddress\x12\x0f\n\x07network\x18\x01 \x01(\t\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x01(\t\"\xac\x01\n\rRoutingPolicy\x12\x17\n\x0ftime_lock_delta\x18\x01 \x01(\r\x12\x10\n\x08min_htlc\x18\x02 \x01(\x03\x12\x15\n\rfee_base_msat\x18\x03 \x01(\x03\x12\x1b\n\x13\x66\x65\x65_rate_milli_msat\x18\x04 \x01(\x03\x12\x10\n\x08\x64isabled\x18\x05 \x01(\x08\x12\x15\n\rmax_htlc_msat\x18\x06 \x01(\x04\x12\x13\n\x0blast_update\x18\x07 \x01(\r\"\xe2\x01\n\x0b\x43hannelEdge\x12\x16\n\nchannel_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x12\n\nchan_point\x18\x02 \x01(\t\x12\x17\n\x0blast_update\x18\x03 \x01(\rB\x02\x18\x01\x12\x11\n\tnode1_pub\x18\x04 \x01(\t\x12\x11\n\tnode2_pub\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61pacity\x18\x06 \x01(\x03\x12*\n\x0cnode1_policy\x18\x07 \x01(\x0b\x32\x14.lnrpc.RoutingPolicy\x12*\n\x0cnode2_policy\x18\x08 \x01(\x0b\x32\x14.lnrpc.RoutingPolicy\"2\n\x13\x43hannelGraphRequest\x12\x1b\n\x13include_unannounced\x18\x01 \x01(\x08\"V\n\x0c\x43hannelGraph\x12#\n\x05nodes\x18\x01 \x03(\x0b\x32\x14.lnrpc.LightningNode\x12!\n\x05\x65\x64ges\x18\x02 \x03(\x0b\x32\x12.lnrpc.ChannelEdge\":\n\x12NodeMetricsRequest\x12$\n\x05types\x18\x01 \x03(\x0e\x32\x15.lnrpc.NodeMetricType\"\xbe\x01\n\x13NodeMetricsResponse\x12U\n\x16\x62\x65tweenness_centrality\x18\x01 \x03(\x0b\x32\x35.lnrpc.NodeMetricsResponse.BetweennessCentralityEntry\x1aP\n\x1a\x42\x65tweennessCentralityEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.lnrpc.FloatMetric:\x02\x38\x01\"6\n\x0b\x46loatMetric\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x18\n\x10normalized_value\x18\x02 \x01(\x01\"&\n\x0f\x43hanInfoRequest\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\"\x14\n\x12NetworkInfoRequest\"\xa7\x02\n\x0bNetworkInfo\x12\x16\n\x0egraph_diameter\x18\x01 \x01(\r\x12\x16\n\x0e\x61vg_out_degree\x18\x02 \x01(\x01\x12\x16\n\x0emax_out_degree\x18\x03 \x01(\r\x12\x11\n\tnum_nodes\x18\x04 \x01(\r\x12\x14\n\x0cnum_channels\x18\x05 \x01(\r\x12\x1e\n\x16total_network_capacity\x18\x06 \x01(\x03\x12\x18\n\x10\x61vg_channel_size\x18\x07 \x01(\x01\x12\x18\n\x10min_channel_size\x18\x08 \x01(\x03\x12\x18\n\x10max_channel_size\x18\t \x01(\x03\x12\x1f\n\x17median_channel_size_sat\x18\n \x01(\x03\x12\x18\n\x10num_zombie_chans\x18\x0b \x01(\x04\"\r\n\x0bStopRequest\"\x0e\n\x0cStopResponse\"\x1b\n\x19GraphTopologySubscription\"\xa3\x01\n\x13GraphTopologyUpdate\x12\'\n\x0cnode_updates\x18\x01 \x03(\x0b\x32\x11.lnrpc.NodeUpdate\x12\x31\n\x0f\x63hannel_updates\x18\x02 \x03(\x0b\x32\x18.lnrpc.ChannelEdgeUpdate\x12\x30\n\x0c\x63losed_chans\x18\x03 \x03(\x0b\x32\x1a.lnrpc.ClosedChannelUpdate\"\x94\x02\n\nNodeUpdate\x12\x15\n\taddresses\x18\x01 \x03(\tB\x02\x18\x01\x12\x14\n\x0cidentity_key\x18\x02 \x01(\t\x12\x1b\n\x0fglobal_features\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\r\n\x05\x61lias\x18\x04 \x01(\t\x12\r\n\x05\x63olor\x18\x05 \x01(\t\x12*\n\x0enode_addresses\x18\x07 \x03(\x0b\x32\x12.lnrpc.NodeAddress\x12\x31\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0b\x32\x1f.lnrpc.NodeUpdate.FeaturesEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\"\xc4\x01\n\x11\x43hannelEdgeUpdate\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\'\n\nchan_point\x18\x02 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\x10\n\x08\x63\x61pacity\x18\x03 \x01(\x03\x12,\n\x0erouting_policy\x18\x04 \x01(\x0b\x32\x14.lnrpc.RoutingPolicy\x12\x18\n\x10\x61\x64vertising_node\x18\x05 \x01(\t\x12\x17\n\x0f\x63onnecting_node\x18\x06 \x01(\t\"|\n\x13\x43losedChannelUpdate\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x10\n\x08\x63\x61pacity\x18\x02 \x01(\x03\x12\x15\n\rclosed_height\x18\x03 \x01(\r\x12\'\n\nchan_point\x18\x04 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\"\x86\x01\n\x07HopHint\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x13\n\x07\x63han_id\x18\x02 \x01(\x04\x42\x02\x30\x01\x12\x15\n\rfee_base_msat\x18\x03 \x01(\r\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12\x19\n\x11\x63ltv_expiry_delta\x18\x05 \x01(\r\"\x17\n\x05SetID\x12\x0e\n\x06set_id\x18\x01 \x01(\x0c\".\n\tRouteHint\x12!\n\thop_hints\x18\x01 \x03(\x0b\x32\x0e.lnrpc.HopHint\"{\n\x0f\x41MPInvoiceState\x12&\n\x05state\x18\x01 \x01(\x0e\x32\x17.lnrpc.InvoiceHTLCState\x12\x14\n\x0csettle_index\x18\x02 \x01(\x04\x12\x13\n\x0bsettle_time\x18\x03 \x01(\x03\x12\x15\n\ramt_paid_msat\x18\x05 \x01(\x03\"\x85\x07\n\x07Invoice\x12\x0c\n\x04memo\x18\x01 \x01(\t\x12\x12\n\nr_preimage\x18\x03 \x01(\x0c\x12\x0e\n\x06r_hash\x18\x04 \x01(\x0c\x12\r\n\x05value\x18\x05 \x01(\x03\x12\x12\n\nvalue_msat\x18\x17 \x01(\x03\x12\x13\n\x07settled\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x15\n\rcreation_date\x18\x07 \x01(\x03\x12\x13\n\x0bsettle_date\x18\x08 \x01(\x03\x12\x17\n\x0fpayment_request\x18\t \x01(\t\x12\x18\n\x10\x64\x65scription_hash\x18\n \x01(\x0c\x12\x0e\n\x06\x65xpiry\x18\x0b \x01(\x03\x12\x15\n\rfallback_addr\x18\x0c \x01(\t\x12\x13\n\x0b\x63ltv_expiry\x18\r \x01(\x04\x12%\n\x0broute_hints\x18\x0e \x03(\x0b\x32\x10.lnrpc.RouteHint\x12\x0f\n\x07private\x18\x0f \x01(\x08\x12\x11\n\tadd_index\x18\x10 \x01(\x04\x12\x14\n\x0csettle_index\x18\x11 \x01(\x04\x12\x14\n\x08\x61mt_paid\x18\x12 \x01(\x03\x42\x02\x18\x01\x12\x14\n\x0c\x61mt_paid_sat\x18\x13 \x01(\x03\x12\x15\n\ramt_paid_msat\x18\x14 \x01(\x03\x12*\n\x05state\x18\x15 \x01(\x0e\x32\x1b.lnrpc.Invoice.InvoiceState\x12!\n\x05htlcs\x18\x16 \x03(\x0b\x32\x12.lnrpc.InvoiceHTLC\x12.\n\x08\x66\x65\x61tures\x18\x18 \x03(\x0b\x32\x1c.lnrpc.Invoice.FeaturesEntry\x12\x12\n\nis_keysend\x18\x19 \x01(\x08\x12\x14\n\x0cpayment_addr\x18\x1a \x01(\x0c\x12\x0e\n\x06is_amp\x18\x1b \x01(\x08\x12>\n\x11\x61mp_invoice_state\x18\x1c \x03(\x0b\x32#.lnrpc.Invoice.AmpInvoiceStateEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\x1aN\n\x14\x41mpInvoiceStateEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.lnrpc.AMPInvoiceState:\x02\x38\x01\"A\n\x0cInvoiceState\x12\x08\n\x04OPEN\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x0c\n\x08\x43\x41NCELED\x10\x02\x12\x0c\n\x08\x41\x43\x43\x45PTED\x10\x03J\x04\x08\x02\x10\x03\"\xf3\x02\n\x0bInvoiceHTLC\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x12\n\nhtlc_index\x18\x02 \x01(\x04\x12\x10\n\x08\x61mt_msat\x18\x03 \x01(\x04\x12\x15\n\raccept_height\x18\x04 \x01(\x05\x12\x13\n\x0b\x61\x63\x63\x65pt_time\x18\x05 \x01(\x03\x12\x14\n\x0cresolve_time\x18\x06 \x01(\x03\x12\x15\n\rexpiry_height\x18\x07 \x01(\x05\x12&\n\x05state\x18\x08 \x01(\x0e\x32\x17.lnrpc.InvoiceHTLCState\x12=\n\x0e\x63ustom_records\x18\t \x03(\x0b\x32%.lnrpc.InvoiceHTLC.CustomRecordsEntry\x12\x1a\n\x12mpp_total_amt_msat\x18\n \x01(\x04\x12\x17\n\x03\x61mp\x18\x0b \x01(\x0b\x32\n.lnrpc.AMP\x1a\x34\n\x12\x43ustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"^\n\x03\x41MP\x12\x12\n\nroot_share\x18\x01 \x01(\x0c\x12\x0e\n\x06set_id\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hild_index\x18\x03 \x01(\r\x12\x0c\n\x04hash\x18\x04 \x01(\x0c\x12\x10\n\x08preimage\x18\x05 \x01(\x0c\"f\n\x12\x41\x64\x64InvoiceResponse\x12\x0e\n\x06r_hash\x18\x01 \x01(\x0c\x12\x17\n\x0fpayment_request\x18\x02 \x01(\t\x12\x11\n\tadd_index\x18\x10 \x01(\x04\x12\x14\n\x0cpayment_addr\x18\x11 \x01(\x0c\"5\n\x0bPaymentHash\x12\x16\n\nr_hash_str\x18\x01 \x01(\tB\x02\x18\x01\x12\x0e\n\x06r_hash\x18\x02 \x01(\x0c\"l\n\x12ListInvoiceRequest\x12\x14\n\x0cpending_only\x18\x01 \x01(\x08\x12\x14\n\x0cindex_offset\x18\x04 \x01(\x04\x12\x18\n\x10num_max_invoices\x18\x05 \x01(\x04\x12\x10\n\x08reversed\x18\x06 \x01(\x08\"n\n\x13ListInvoiceResponse\x12 \n\x08invoices\x18\x01 \x03(\x0b\x32\x0e.lnrpc.Invoice\x12\x19\n\x11last_index_offset\x18\x02 \x01(\x04\x12\x1a\n\x12\x66irst_index_offset\x18\x03 \x01(\x04\">\n\x13InvoiceSubscription\x12\x11\n\tadd_index\x18\x01 \x01(\x04\x12\x14\n\x0csettle_index\x18\x02 \x01(\x04\"\xe0\x03\n\x07Payment\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\t\x12\x11\n\x05value\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x19\n\rcreation_date\x18\x03 \x01(\x03\x42\x02\x18\x01\x12\x0f\n\x03\x66\x65\x65\x18\x05 \x01(\x03\x42\x02\x18\x01\x12\x18\n\x10payment_preimage\x18\x06 \x01(\t\x12\x11\n\tvalue_sat\x18\x07 \x01(\x03\x12\x12\n\nvalue_msat\x18\x08 \x01(\x03\x12\x17\n\x0fpayment_request\x18\t \x01(\t\x12,\n\x06status\x18\n \x01(\x0e\x32\x1c.lnrpc.Payment.PaymentStatus\x12\x0f\n\x07\x66\x65\x65_sat\x18\x0b \x01(\x03\x12\x10\n\x08\x66\x65\x65_msat\x18\x0c \x01(\x03\x12\x18\n\x10\x63reation_time_ns\x18\r \x01(\x03\x12!\n\x05htlcs\x18\x0e \x03(\x0b\x32\x12.lnrpc.HTLCAttempt\x12\x15\n\rpayment_index\x18\x0f \x01(\x04\x12\x33\n\x0e\x66\x61ilure_reason\x18\x10 \x01(\x0e\x32\x1b.lnrpc.PaymentFailureReason\"F\n\rPaymentStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\r\n\tIN_FLIGHT\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03J\x04\x08\x04\x10\x05\"\x8a\x02\n\x0bHTLCAttempt\x12\x12\n\nattempt_id\x18\x07 \x01(\x04\x12-\n\x06status\x18\x01 \x01(\x0e\x32\x1d.lnrpc.HTLCAttempt.HTLCStatus\x12\x1b\n\x05route\x18\x02 \x01(\x0b\x32\x0c.lnrpc.Route\x12\x17\n\x0f\x61ttempt_time_ns\x18\x03 \x01(\x03\x12\x17\n\x0fresolve_time_ns\x18\x04 \x01(\x03\x12\x1f\n\x07\x66\x61ilure\x18\x05 \x01(\x0b\x32\x0e.lnrpc.Failure\x12\x10\n\x08preimage\x18\x06 \x01(\x0c\"6\n\nHTLCStatus\x12\r\n\tIN_FLIGHT\x10\x00\x12\r\n\tSUCCEEDED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\x8d\x01\n\x13ListPaymentsRequest\x12\x1a\n\x12include_incomplete\x18\x01 \x01(\x08\x12\x14\n\x0cindex_offset\x18\x02 \x01(\x04\x12\x14\n\x0cmax_payments\x18\x03 \x01(\x04\x12\x10\n\x08reversed\x18\x04 \x01(\x08\x12\x1c\n\x14\x63ount_total_payments\x18\x05 \x01(\x08\"\x8b\x01\n\x14ListPaymentsResponse\x12 \n\x08payments\x18\x01 \x03(\x0b\x32\x0e.lnrpc.Payment\x12\x1a\n\x12\x66irst_index_offset\x18\x02 \x01(\x04\x12\x19\n\x11last_index_offset\x18\x03 \x01(\x04\x12\x1a\n\x12total_num_payments\x18\x04 \x01(\x04\"G\n\x14\x44\x65letePaymentRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x19\n\x11\x66\x61iled_htlcs_only\x18\x02 \x01(\x08\"S\n\x18\x44\x65leteAllPaymentsRequest\x12\x1c\n\x14\x66\x61iled_payments_only\x18\x01 \x01(\x08\x12\x19\n\x11\x66\x61iled_htlcs_only\x18\x02 \x01(\x08\"\x17\n\x15\x44\x65letePaymentResponse\"\x1b\n\x19\x44\x65leteAllPaymentsResponse\"\x86\x01\n\x15\x41\x62\x61ndonChannelRequest\x12*\n\rchannel_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12!\n\x19pending_funding_shim_only\x18\x02 \x01(\x08\x12\x1e\n\x16i_know_what_i_am_doing\x18\x03 \x01(\x08\"\x18\n\x16\x41\x62\x61ndonChannelResponse\"5\n\x11\x44\x65\x62ugLevelRequest\x12\x0c\n\x04show\x18\x01 \x01(\x08\x12\x12\n\nlevel_spec\x18\x02 \x01(\t\")\n\x12\x44\x65\x62ugLevelResponse\x12\x13\n\x0bsub_systems\x18\x01 \x01(\t\"\x1f\n\x0cPayReqString\x12\x0f\n\x07pay_req\x18\x01 \x01(\t\"\x86\x03\n\x06PayReq\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\t\x12\x14\n\x0cnum_satoshis\x18\x03 \x01(\x03\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\x12\x0e\n\x06\x65xpiry\x18\x05 \x01(\x03\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x18\n\x10\x64\x65scription_hash\x18\x07 \x01(\t\x12\x15\n\rfallback_addr\x18\x08 \x01(\t\x12\x13\n\x0b\x63ltv_expiry\x18\t \x01(\x03\x12%\n\x0broute_hints\x18\n \x03(\x0b\x32\x10.lnrpc.RouteHint\x12\x14\n\x0cpayment_addr\x18\x0b \x01(\x0c\x12\x10\n\x08num_msat\x18\x0c \x01(\x03\x12-\n\x08\x66\x65\x61tures\x18\r \x03(\x0b\x32\x1b.lnrpc.PayReq.FeaturesEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\">\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0bis_required\x18\x03 \x01(\x08\x12\x10\n\x08is_known\x18\x04 \x01(\x08\"\x12\n\x10\x46\x65\x65ReportRequest\"|\n\x10\x43hannelFeeReport\x12\x13\n\x07\x63han_id\x18\x05 \x01(\x04\x42\x02\x30\x01\x12\x15\n\rchannel_point\x18\x01 \x01(\t\x12\x15\n\rbase_fee_msat\x18\x02 \x01(\x03\x12\x13\n\x0b\x66\x65\x65_per_mil\x18\x03 \x01(\x03\x12\x10\n\x08\x66\x65\x65_rate\x18\x04 \x01(\x01\"\x84\x01\n\x11\x46\x65\x65ReportResponse\x12-\n\x0c\x63hannel_fees\x18\x01 \x03(\x0b\x32\x17.lnrpc.ChannelFeeReport\x12\x13\n\x0b\x64\x61y_fee_sum\x18\x02 \x01(\x04\x12\x14\n\x0cweek_fee_sum\x18\x03 \x01(\x04\x12\x15\n\rmonth_fee_sum\x18\x04 \x01(\x04\"\x82\x02\n\x13PolicyUpdateRequest\x12\x10\n\x06global\x18\x01 \x01(\x08H\x00\x12)\n\nchan_point\x18\x02 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12\x15\n\rbase_fee_msat\x18\x03 \x01(\x03\x12\x10\n\x08\x66\x65\x65_rate\x18\x04 \x01(\x01\x12\x14\n\x0c\x66\x65\x65_rate_ppm\x18\t \x01(\r\x12\x17\n\x0ftime_lock_delta\x18\x05 \x01(\r\x12\x15\n\rmax_htlc_msat\x18\x06 \x01(\x04\x12\x15\n\rmin_htlc_msat\x18\x07 \x01(\x04\x12\x1f\n\x17min_htlc_msat_specified\x18\x08 \x01(\x08\x42\x07\n\x05scope\"m\n\x0c\x46\x61iledUpdate\x12!\n\x08outpoint\x18\x01 \x01(\x0b\x32\x0f.lnrpc.OutPoint\x12$\n\x06reason\x18\x02 \x01(\x0e\x32\x14.lnrpc.UpdateFailure\x12\x14\n\x0cupdate_error\x18\x03 \x01(\t\"C\n\x14PolicyUpdateResponse\x12+\n\x0e\x66\x61iled_updates\x18\x01 \x03(\x0b\x32\x13.lnrpc.FailedUpdate\"n\n\x18\x46orwardingHistoryRequest\x12\x12\n\nstart_time\x18\x01 \x01(\x04\x12\x10\n\x08\x65nd_time\x18\x02 \x01(\x04\x12\x14\n\x0cindex_offset\x18\x03 \x01(\r\x12\x16\n\x0enum_max_events\x18\x04 \x01(\r\"\xda\x01\n\x0f\x46orwardingEvent\x12\x15\n\ttimestamp\x18\x01 \x01(\x04\x42\x02\x18\x01\x12\x16\n\nchan_id_in\x18\x02 \x01(\x04\x42\x02\x30\x01\x12\x17\n\x0b\x63han_id_out\x18\x04 \x01(\x04\x42\x02\x30\x01\x12\x0e\n\x06\x61mt_in\x18\x05 \x01(\x04\x12\x0f\n\x07\x61mt_out\x18\x06 \x01(\x04\x12\x0b\n\x03\x66\x65\x65\x18\x07 \x01(\x04\x12\x10\n\x08\x66\x65\x65_msat\x18\x08 \x01(\x04\x12\x13\n\x0b\x61mt_in_msat\x18\t \x01(\x04\x12\x14\n\x0c\x61mt_out_msat\x18\n \x01(\x04\x12\x14\n\x0ctimestamp_ns\x18\x0b \x01(\x04\"i\n\x19\x46orwardingHistoryResponse\x12\x31\n\x11\x66orwarding_events\x18\x01 \x03(\x0b\x32\x16.lnrpc.ForwardingEvent\x12\x19\n\x11last_offset_index\x18\x02 \x01(\r\"E\n\x1a\x45xportChannelBackupRequest\x12\'\n\nchan_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\"M\n\rChannelBackup\x12\'\n\nchan_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\x13\n\x0b\x63han_backup\x18\x02 \x01(\x0c\"V\n\x0fMultiChanBackup\x12(\n\x0b\x63han_points\x18\x01 \x03(\x0b\x32\x13.lnrpc.ChannelPoint\x12\x19\n\x11multi_chan_backup\x18\x02 \x01(\x0c\"\x19\n\x17\x43hanBackupExportRequest\"{\n\x12\x43hanBackupSnapshot\x12\x32\n\x13single_chan_backups\x18\x01 \x01(\x0b\x32\x15.lnrpc.ChannelBackups\x12\x31\n\x11multi_chan_backup\x18\x02 \x01(\x0b\x32\x16.lnrpc.MultiChanBackup\"<\n\x0e\x43hannelBackups\x12*\n\x0c\x63han_backups\x18\x01 \x03(\x0b\x32\x14.lnrpc.ChannelBackup\"p\n\x18RestoreChanBackupRequest\x12-\n\x0c\x63han_backups\x18\x01 \x01(\x0b\x32\x15.lnrpc.ChannelBackupsH\x00\x12\x1b\n\x11multi_chan_backup\x18\x02 \x01(\x0cH\x00\x42\x08\n\x06\x62\x61\x63kup\"\x17\n\x15RestoreBackupResponse\"\x1b\n\x19\x43hannelBackupSubscription\"\x1a\n\x18VerifyChanBackupResponse\"4\n\x12MacaroonPermission\x12\x0e\n\x06\x65ntity\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\"~\n\x13\x42\x61keMacaroonRequest\x12.\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x19.lnrpc.MacaroonPermission\x12\x13\n\x0broot_key_id\x18\x02 \x01(\x04\x12\"\n\x1a\x61llow_external_permissions\x18\x03 \x01(\x08\"(\n\x14\x42\x61keMacaroonResponse\x12\x10\n\x08macaroon\x18\x01 \x01(\t\"\x18\n\x16ListMacaroonIDsRequest\"/\n\x17ListMacaroonIDsResponse\x12\x14\n\x0croot_key_ids\x18\x01 \x03(\x04\".\n\x17\x44\x65leteMacaroonIDRequest\x12\x13\n\x0broot_key_id\x18\x01 \x01(\x04\"+\n\x18\x44\x65leteMacaroonIDResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"H\n\x16MacaroonPermissionList\x12.\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x19.lnrpc.MacaroonPermission\"\x18\n\x16ListPermissionsRequest\"\xc5\x01\n\x17ListPermissionsResponse\x12Q\n\x12method_permissions\x18\x01 \x03(\x0b\x32\x35.lnrpc.ListPermissionsResponse.MethodPermissionsEntry\x1aW\n\x16MethodPermissionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.lnrpc.MacaroonPermissionList:\x02\x38\x01\"\xd5\x07\n\x07\x46\x61ilure\x12(\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1a.lnrpc.Failure.FailureCode\x12,\n\x0e\x63hannel_update\x18\x03 \x01(\x0b\x32\x14.lnrpc.ChannelUpdate\x12\x11\n\thtlc_msat\x18\x04 \x01(\x04\x12\x15\n\ronion_sha_256\x18\x05 \x01(\x0c\x12\x13\n\x0b\x63ltv_expiry\x18\x06 \x01(\r\x12\r\n\x05\x66lags\x18\x07 \x01(\r\x12\x1c\n\x14\x66\x61ilure_source_index\x18\x08 \x01(\r\x12\x0e\n\x06height\x18\t \x01(\r\"\xef\x05\n\x0b\x46\x61ilureCode\x12\x0c\n\x08RESERVED\x10\x00\x12(\n$INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS\x10\x01\x12\x1c\n\x18INCORRECT_PAYMENT_AMOUNT\x10\x02\x12\x1f\n\x1b\x46INAL_INCORRECT_CLTV_EXPIRY\x10\x03\x12\x1f\n\x1b\x46INAL_INCORRECT_HTLC_AMOUNT\x10\x04\x12\x19\n\x15\x46INAL_EXPIRY_TOO_SOON\x10\x05\x12\x11\n\rINVALID_REALM\x10\x06\x12\x13\n\x0f\x45XPIRY_TOO_SOON\x10\x07\x12\x19\n\x15INVALID_ONION_VERSION\x10\x08\x12\x16\n\x12INVALID_ONION_HMAC\x10\t\x12\x15\n\x11INVALID_ONION_KEY\x10\n\x12\x18\n\x14\x41MOUNT_BELOW_MINIMUM\x10\x0b\x12\x14\n\x10\x46\x45\x45_INSUFFICIENT\x10\x0c\x12\x19\n\x15INCORRECT_CLTV_EXPIRY\x10\r\x12\x14\n\x10\x43HANNEL_DISABLED\x10\x0e\x12\x1d\n\x19TEMPORARY_CHANNEL_FAILURE\x10\x0f\x12!\n\x1dREQUIRED_NODE_FEATURE_MISSING\x10\x10\x12$\n REQUIRED_CHANNEL_FEATURE_MISSING\x10\x11\x12\x15\n\x11UNKNOWN_NEXT_PEER\x10\x12\x12\x1a\n\x16TEMPORARY_NODE_FAILURE\x10\x13\x12\x1a\n\x16PERMANENT_NODE_FAILURE\x10\x14\x12\x1d\n\x19PERMANENT_CHANNEL_FAILURE\x10\x15\x12\x12\n\x0e\x45XPIRY_TOO_FAR\x10\x16\x12\x0f\n\x0bMPP_TIMEOUT\x10\x17\x12\x19\n\x15INVALID_ONION_PAYLOAD\x10\x18\x12\x15\n\x10INTERNAL_FAILURE\x10\xe5\x07\x12\x14\n\x0fUNKNOWN_FAILURE\x10\xe6\x07\x12\x17\n\x12UNREADABLE_FAILURE\x10\xe7\x07J\x04\x08\x02\x10\x03\"\x9a\x02\n\rChannelUpdate\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\x12\n\nchain_hash\x18\x02 \x01(\x0c\x12\x13\n\x07\x63han_id\x18\x03 \x01(\x04\x42\x02\x30\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\r\x12\x15\n\rmessage_flags\x18\n \x01(\r\x12\x15\n\rchannel_flags\x18\x05 \x01(\r\x12\x17\n\x0ftime_lock_delta\x18\x06 \x01(\r\x12\x19\n\x11htlc_minimum_msat\x18\x07 \x01(\x04\x12\x10\n\x08\x62\x61se_fee\x18\x08 \x01(\r\x12\x10\n\x08\x66\x65\x65_rate\x18\t \x01(\r\x12\x19\n\x11htlc_maximum_msat\x18\x0b \x01(\x04\x12\x19\n\x11\x65xtra_opaque_data\x18\x0c \x01(\x0c\"F\n\nMacaroonId\x12\r\n\x05nonce\x18\x01 \x01(\x0c\x12\x11\n\tstorageId\x18\x02 \x01(\x0c\x12\x16\n\x03ops\x18\x03 \x03(\x0b\x32\t.lnrpc.Op\"%\n\x02Op\x12\x0e\n\x06\x65ntity\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x63tions\x18\x02 \x03(\t\"k\n\x13\x43heckMacPermRequest\x12\x10\n\x08macaroon\x18\x01 \x01(\x0c\x12.\n\x0bpermissions\x18\x02 \x03(\x0b\x32\x19.lnrpc.MacaroonPermission\x12\x12\n\nfullMethod\x18\x03 \x01(\t\"%\n\x14\x43heckMacPermResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\xfa\x01\n\x14RPCMiddlewareRequest\x12\x12\n\nrequest_id\x18\x01 \x01(\x04\x12\x14\n\x0craw_macaroon\x18\x02 \x01(\x0c\x12\x1f\n\x17\x63ustom_caveat_condition\x18\x03 \x01(\t\x12(\n\x0bstream_auth\x18\x04 \x01(\x0b\x32\x11.lnrpc.StreamAuthH\x00\x12$\n\x07request\x18\x05 \x01(\x0b\x32\x11.lnrpc.RPCMessageH\x00\x12%\n\x08response\x18\x06 \x01(\x0b\x32\x11.lnrpc.RPCMessageH\x00\x12\x0e\n\x06msg_id\x18\x07 \x01(\x04\x42\x10\n\x0eintercept_type\"%\n\nStreamAuth\x12\x17\n\x0fmethod_full_uri\x18\x01 \x01(\t\"`\n\nRPCMessage\x12\x17\n\x0fmethod_full_uri\x18\x01 \x01(\t\x12\x12\n\nstream_rpc\x18\x02 \x01(\x08\x12\x11\n\ttype_name\x18\x03 \x01(\t\x12\x12\n\nserialized\x18\x04 \x01(\x0c\"\xa2\x01\n\x15RPCMiddlewareResponse\x12\x12\n\nref_msg_id\x18\x01 \x01(\x04\x12\x31\n\x08register\x18\x02 \x01(\x0b\x32\x1d.lnrpc.MiddlewareRegistrationH\x00\x12,\n\x08\x66\x65\x65\x64\x62\x61\x63k\x18\x03 \x01(\x0b\x32\x18.lnrpc.InterceptFeedbackH\x00\x42\x14\n\x12middleware_message\"n\n\x16MiddlewareRegistration\x12\x17\n\x0fmiddleware_name\x18\x01 \x01(\t\x12#\n\x1b\x63ustom_macaroon_caveat_name\x18\x02 \x01(\t\x12\x16\n\x0eread_only_mode\x18\x03 \x01(\x08\"\\\n\x11InterceptFeedback\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x18\n\x10replace_response\x18\x02 \x01(\x08\x12\x1e\n\x16replacement_serialized\x18\x03 \x01(\x0c*\xa7\x02\n\x10OutputScriptType\x12\x1b\n\x17SCRIPT_TYPE_PUBKEY_HASH\x10\x00\x12\x1b\n\x17SCRIPT_TYPE_SCRIPT_HASH\x10\x01\x12&\n\"SCRIPT_TYPE_WITNESS_V0_PUBKEY_HASH\x10\x02\x12&\n\"SCRIPT_TYPE_WITNESS_V0_SCRIPT_HASH\x10\x03\x12\x16\n\x12SCRIPT_TYPE_PUBKEY\x10\x04\x12\x18\n\x14SCRIPT_TYPE_MULTISIG\x10\x05\x12\x18\n\x14SCRIPT_TYPE_NULLDATA\x10\x06\x12\x1c\n\x18SCRIPT_TYPE_NON_STANDARD\x10\x07\x12\x1f\n\x1bSCRIPT_TYPE_WITNESS_UNKNOWN\x10\x08*\xac\x01\n\x0b\x41\x64\x64ressType\x12\x17\n\x13WITNESS_PUBKEY_HASH\x10\x00\x12\x16\n\x12NESTED_PUBKEY_HASH\x10\x01\x12\x1e\n\x1aUNUSED_WITNESS_PUBKEY_HASH\x10\x02\x12\x1d\n\x19UNUSED_NESTED_PUBKEY_HASH\x10\x03\x12\x12\n\x0eTAPROOT_PUBKEY\x10\x04\x12\x19\n\x15UNUSED_TAPROOT_PUBKEY\x10\x05*x\n\x0e\x43ommitmentType\x12\x1b\n\x17UNKNOWN_COMMITMENT_TYPE\x10\x00\x12\n\n\x06LEGACY\x10\x01\x12\x15\n\x11STATIC_REMOTE_KEY\x10\x02\x12\x0b\n\x07\x41NCHORS\x10\x03\x12\x19\n\x15SCRIPT_ENFORCED_LEASE\x10\x04*a\n\tInitiator\x12\x15\n\x11INITIATOR_UNKNOWN\x10\x00\x12\x13\n\x0fINITIATOR_LOCAL\x10\x01\x12\x14\n\x10INITIATOR_REMOTE\x10\x02\x12\x12\n\x0eINITIATOR_BOTH\x10\x03*`\n\x0eResolutionType\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\n\n\x06\x41NCHOR\x10\x01\x12\x11\n\rINCOMING_HTLC\x10\x02\x12\x11\n\rOUTGOING_HTLC\x10\x03\x12\n\n\x06\x43OMMIT\x10\x04*q\n\x11ResolutionOutcome\x12\x13\n\x0fOUTCOME_UNKNOWN\x10\x00\x12\x0b\n\x07\x43LAIMED\x10\x01\x12\r\n\tUNCLAIMED\x10\x02\x12\r\n\tABANDONED\x10\x03\x12\x0f\n\x0b\x46IRST_STAGE\x10\x04\x12\x0b\n\x07TIMEOUT\x10\x05*9\n\x0eNodeMetricType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x1a\n\x16\x42\x45TWEENNESS_CENTRALITY\x10\x01*;\n\x10InvoiceHTLCState\x12\x0c\n\x08\x41\x43\x43\x45PTED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x0c\n\x08\x43\x41NCELED\x10\x02*\xd9\x01\n\x14PaymentFailureReason\x12\x17\n\x13\x46\x41ILURE_REASON_NONE\x10\x00\x12\x1a\n\x16\x46\x41ILURE_REASON_TIMEOUT\x10\x01\x12\x1b\n\x17\x46\x41ILURE_REASON_NO_ROUTE\x10\x02\x12\x18\n\x14\x46\x41ILURE_REASON_ERROR\x10\x03\x12,\n(FAILURE_REASON_INCORRECT_PAYMENT_DETAILS\x10\x04\x12\'\n#FAILURE_REASON_INSUFFICIENT_BALANCE\x10\x05*\xcf\x04\n\nFeatureBit\x12\x18\n\x14\x44\x41TALOSS_PROTECT_REQ\x10\x00\x12\x18\n\x14\x44\x41TALOSS_PROTECT_OPT\x10\x01\x12\x17\n\x13INITIAL_ROUING_SYNC\x10\x03\x12\x1f\n\x1bUPFRONT_SHUTDOWN_SCRIPT_REQ\x10\x04\x12\x1f\n\x1bUPFRONT_SHUTDOWN_SCRIPT_OPT\x10\x05\x12\x16\n\x12GOSSIP_QUERIES_REQ\x10\x06\x12\x16\n\x12GOSSIP_QUERIES_OPT\x10\x07\x12\x11\n\rTLV_ONION_REQ\x10\x08\x12\x11\n\rTLV_ONION_OPT\x10\t\x12\x1a\n\x16\x45XT_GOSSIP_QUERIES_REQ\x10\n\x12\x1a\n\x16\x45XT_GOSSIP_QUERIES_OPT\x10\x0b\x12\x19\n\x15STATIC_REMOTE_KEY_REQ\x10\x0c\x12\x19\n\x15STATIC_REMOTE_KEY_OPT\x10\r\x12\x14\n\x10PAYMENT_ADDR_REQ\x10\x0e\x12\x14\n\x10PAYMENT_ADDR_OPT\x10\x0f\x12\x0b\n\x07MPP_REQ\x10\x10\x12\x0b\n\x07MPP_OPT\x10\x11\x12\x16\n\x12WUMBO_CHANNELS_REQ\x10\x12\x12\x16\n\x12WUMBO_CHANNELS_OPT\x10\x13\x12\x0f\n\x0b\x41NCHORS_REQ\x10\x14\x12\x0f\n\x0b\x41NCHORS_OPT\x10\x15\x12\x1d\n\x19\x41NCHORS_ZERO_FEE_HTLC_REQ\x10\x16\x12\x1d\n\x19\x41NCHORS_ZERO_FEE_HTLC_OPT\x10\x17\x12\x0b\n\x07\x41MP_REQ\x10\x1e\x12\x0b\n\x07\x41MP_OPT\x10\x1f*\xac\x01\n\rUpdateFailure\x12\x1a\n\x16UPDATE_FAILURE_UNKNOWN\x10\x00\x12\x1a\n\x16UPDATE_FAILURE_PENDING\x10\x01\x12\x1c\n\x18UPDATE_FAILURE_NOT_FOUND\x10\x02\x12\x1f\n\x1bUPDATE_FAILURE_INTERNAL_ERR\x10\x03\x12$\n UPDATE_FAILURE_INVALID_PARAMETER\x10\x04\x32\xc9%\n\tLightning\x12J\n\rWalletBalance\x12\x1b.lnrpc.WalletBalanceRequest\x1a\x1c.lnrpc.WalletBalanceResponse\x12M\n\x0e\x43hannelBalance\x12\x1c.lnrpc.ChannelBalanceRequest\x1a\x1d.lnrpc.ChannelBalanceResponse\x12K\n\x0fGetTransactions\x12\x1d.lnrpc.GetTransactionsRequest\x1a\x19.lnrpc.TransactionDetails\x12\x44\n\x0b\x45stimateFee\x12\x19.lnrpc.EstimateFeeRequest\x1a\x1a.lnrpc.EstimateFeeResponse\x12>\n\tSendCoins\x12\x17.lnrpc.SendCoinsRequest\x1a\x18.lnrpc.SendCoinsResponse\x12\x44\n\x0bListUnspent\x12\x19.lnrpc.ListUnspentRequest\x1a\x1a.lnrpc.ListUnspentResponse\x12L\n\x15SubscribeTransactions\x12\x1d.lnrpc.GetTransactionsRequest\x1a\x12.lnrpc.Transaction0\x01\x12;\n\x08SendMany\x12\x16.lnrpc.SendManyRequest\x1a\x17.lnrpc.SendManyResponse\x12\x41\n\nNewAddress\x12\x18.lnrpc.NewAddressRequest\x1a\x19.lnrpc.NewAddressResponse\x12\x44\n\x0bSignMessage\x12\x19.lnrpc.SignMessageRequest\x1a\x1a.lnrpc.SignMessageResponse\x12J\n\rVerifyMessage\x12\x1b.lnrpc.VerifyMessageRequest\x1a\x1c.lnrpc.VerifyMessageResponse\x12\x44\n\x0b\x43onnectPeer\x12\x19.lnrpc.ConnectPeerRequest\x1a\x1a.lnrpc.ConnectPeerResponse\x12M\n\x0e\x44isconnectPeer\x12\x1c.lnrpc.DisconnectPeerRequest\x1a\x1d.lnrpc.DisconnectPeerResponse\x12>\n\tListPeers\x12\x17.lnrpc.ListPeersRequest\x1a\x18.lnrpc.ListPeersResponse\x12G\n\x13SubscribePeerEvents\x12\x1c.lnrpc.PeerEventSubscription\x1a\x10.lnrpc.PeerEvent0\x01\x12\x38\n\x07GetInfo\x12\x15.lnrpc.GetInfoRequest\x1a\x16.lnrpc.GetInfoResponse\x12P\n\x0fGetRecoveryInfo\x12\x1d.lnrpc.GetRecoveryInfoRequest\x1a\x1e.lnrpc.GetRecoveryInfoResponse\x12P\n\x0fPendingChannels\x12\x1d.lnrpc.PendingChannelsRequest\x1a\x1e.lnrpc.PendingChannelsResponse\x12G\n\x0cListChannels\x12\x1a.lnrpc.ListChannelsRequest\x1a\x1b.lnrpc.ListChannelsResponse\x12V\n\x16SubscribeChannelEvents\x12\x1f.lnrpc.ChannelEventSubscription\x1a\x19.lnrpc.ChannelEventUpdate0\x01\x12M\n\x0e\x43losedChannels\x12\x1c.lnrpc.ClosedChannelsRequest\x1a\x1d.lnrpc.ClosedChannelsResponse\x12\x41\n\x0fOpenChannelSync\x12\x19.lnrpc.OpenChannelRequest\x1a\x13.lnrpc.ChannelPoint\x12\x43\n\x0bOpenChannel\x12\x19.lnrpc.OpenChannelRequest\x1a\x17.lnrpc.OpenStatusUpdate0\x01\x12S\n\x10\x42\x61tchOpenChannel\x12\x1e.lnrpc.BatchOpenChannelRequest\x1a\x1f.lnrpc.BatchOpenChannelResponse\x12L\n\x10\x46undingStateStep\x12\x1b.lnrpc.FundingTransitionMsg\x1a\x1b.lnrpc.FundingStateStepResp\x12P\n\x0f\x43hannelAcceptor\x12\x1c.lnrpc.ChannelAcceptResponse\x1a\x1b.lnrpc.ChannelAcceptRequest(\x01\x30\x01\x12\x46\n\x0c\x43loseChannel\x12\x1a.lnrpc.CloseChannelRequest\x1a\x18.lnrpc.CloseStatusUpdate0\x01\x12M\n\x0e\x41\x62\x61ndonChannel\x12\x1c.lnrpc.AbandonChannelRequest\x1a\x1d.lnrpc.AbandonChannelResponse\x12?\n\x0bSendPayment\x12\x12.lnrpc.SendRequest\x1a\x13.lnrpc.SendResponse\"\x03\x88\x02\x01(\x01\x30\x01\x12:\n\x0fSendPaymentSync\x12\x12.lnrpc.SendRequest\x1a\x13.lnrpc.SendResponse\x12\x46\n\x0bSendToRoute\x12\x19.lnrpc.SendToRouteRequest\x1a\x13.lnrpc.SendResponse\"\x03\x88\x02\x01(\x01\x30\x01\x12\x41\n\x0fSendToRouteSync\x12\x19.lnrpc.SendToRouteRequest\x1a\x13.lnrpc.SendResponse\x12\x37\n\nAddInvoice\x12\x0e.lnrpc.Invoice\x1a\x19.lnrpc.AddInvoiceResponse\x12\x45\n\x0cListInvoices\x12\x19.lnrpc.ListInvoiceRequest\x1a\x1a.lnrpc.ListInvoiceResponse\x12\x33\n\rLookupInvoice\x12\x12.lnrpc.PaymentHash\x1a\x0e.lnrpc.Invoice\x12\x41\n\x11SubscribeInvoices\x12\x1a.lnrpc.InvoiceSubscription\x1a\x0e.lnrpc.Invoice0\x01\x12\x32\n\x0c\x44\x65\x63odePayReq\x12\x13.lnrpc.PayReqString\x1a\r.lnrpc.PayReq\x12G\n\x0cListPayments\x12\x1a.lnrpc.ListPaymentsRequest\x1a\x1b.lnrpc.ListPaymentsResponse\x12J\n\rDeletePayment\x12\x1b.lnrpc.DeletePaymentRequest\x1a\x1c.lnrpc.DeletePaymentResponse\x12V\n\x11\x44\x65leteAllPayments\x12\x1f.lnrpc.DeleteAllPaymentsRequest\x1a .lnrpc.DeleteAllPaymentsResponse\x12@\n\rDescribeGraph\x12\x1a.lnrpc.ChannelGraphRequest\x1a\x13.lnrpc.ChannelGraph\x12G\n\x0eGetNodeMetrics\x12\x19.lnrpc.NodeMetricsRequest\x1a\x1a.lnrpc.NodeMetricsResponse\x12\x39\n\x0bGetChanInfo\x12\x16.lnrpc.ChanInfoRequest\x1a\x12.lnrpc.ChannelEdge\x12\x36\n\x0bGetNodeInfo\x12\x16.lnrpc.NodeInfoRequest\x1a\x0f.lnrpc.NodeInfo\x12\x44\n\x0bQueryRoutes\x12\x19.lnrpc.QueryRoutesRequest\x1a\x1a.lnrpc.QueryRoutesResponse\x12?\n\x0eGetNetworkInfo\x12\x19.lnrpc.NetworkInfoRequest\x1a\x12.lnrpc.NetworkInfo\x12\x35\n\nStopDaemon\x12\x12.lnrpc.StopRequest\x1a\x13.lnrpc.StopResponse\x12W\n\x15SubscribeChannelGraph\x12 .lnrpc.GraphTopologySubscription\x1a\x1a.lnrpc.GraphTopologyUpdate0\x01\x12\x41\n\nDebugLevel\x12\x18.lnrpc.DebugLevelRequest\x1a\x19.lnrpc.DebugLevelResponse\x12>\n\tFeeReport\x12\x17.lnrpc.FeeReportRequest\x1a\x18.lnrpc.FeeReportResponse\x12N\n\x13UpdateChannelPolicy\x12\x1a.lnrpc.PolicyUpdateRequest\x1a\x1b.lnrpc.PolicyUpdateResponse\x12V\n\x11\x46orwardingHistory\x12\x1f.lnrpc.ForwardingHistoryRequest\x1a .lnrpc.ForwardingHistoryResponse\x12N\n\x13\x45xportChannelBackup\x12!.lnrpc.ExportChannelBackupRequest\x1a\x14.lnrpc.ChannelBackup\x12T\n\x17\x45xportAllChannelBackups\x12\x1e.lnrpc.ChanBackupExportRequest\x1a\x19.lnrpc.ChanBackupSnapshot\x12N\n\x10VerifyChanBackup\x12\x19.lnrpc.ChanBackupSnapshot\x1a\x1f.lnrpc.VerifyChanBackupResponse\x12V\n\x15RestoreChannelBackups\x12\x1f.lnrpc.RestoreChanBackupRequest\x1a\x1c.lnrpc.RestoreBackupResponse\x12X\n\x17SubscribeChannelBackups\x12 .lnrpc.ChannelBackupSubscription\x1a\x19.lnrpc.ChanBackupSnapshot0\x01\x12G\n\x0c\x42\x61keMacaroon\x12\x1a.lnrpc.BakeMacaroonRequest\x1a\x1b.lnrpc.BakeMacaroonResponse\x12P\n\x0fListMacaroonIDs\x12\x1d.lnrpc.ListMacaroonIDsRequest\x1a\x1e.lnrpc.ListMacaroonIDsResponse\x12S\n\x10\x44\x65leteMacaroonID\x12\x1e.lnrpc.DeleteMacaroonIDRequest\x1a\x1f.lnrpc.DeleteMacaroonIDResponse\x12P\n\x0fListPermissions\x12\x1d.lnrpc.ListPermissionsRequest\x1a\x1e.lnrpc.ListPermissionsResponse\x12S\n\x18\x43heckMacaroonPermissions\x12\x1a.lnrpc.CheckMacPermRequest\x1a\x1b.lnrpc.CheckMacPermResponse\x12V\n\x15RegisterRPCMiddleware\x12\x1c.lnrpc.RPCMiddlewareResponse\x1a\x1b.lnrpc.RPCMiddlewareRequest(\x01\x30\x01\x12V\n\x11SendCustomMessage\x12\x1f.lnrpc.SendCustomMessageRequest\x1a .lnrpc.SendCustomMessageResponse\x12X\n\x17SubscribeCustomMessages\x12%.lnrpc.SubscribeCustomMessagesRequest\x1a\x14.lnrpc.CustomMessage0\x01\x42\'Z%github.com/lightningnetwork/lnd/lnrpcb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0flightning.proto\x12\x05lnrpc\"B\n\x1bLookupHtlcResolutionRequest\x12\x0f\n\x07\x63han_id\x18\x01 \x01(\x04\x12\x12\n\nhtlc_index\x18\x02 \x01(\x04\"A\n\x1cLookupHtlcResolutionResponse\x12\x0f\n\x07settled\x18\x01 \x01(\x08\x12\x10\n\x08offchain\x18\x02 \x01(\x08\" \n\x1eSubscribeCustomMessagesRequest\"9\n\rCustomMessage\x12\x0c\n\x04peer\x18\x01 \x01(\x0c\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"D\n\x18SendCustomMessageRequest\x12\x0c\n\x04peer\x18\x01 \x01(\x0c\x12\x0c\n\x04type\x18\x02 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"\x1b\n\x19SendCustomMessageResponse\"\xa2\x01\n\x04Utxo\x12(\n\x0c\x61\x64\x64ress_type\x18\x01 \x01(\x0e\x32\x12.lnrpc.AddressType\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x12\n\namount_sat\x18\x03 \x01(\x03\x12\x11\n\tpk_script\x18\x04 \x01(\t\x12!\n\x08outpoint\x18\x05 \x01(\x0b\x32\x0f.lnrpc.OutPoint\x12\x15\n\rconfirmations\x18\x06 \x01(\x03\"\x9e\x01\n\x0cOutputDetail\x12,\n\x0boutput_type\x18\x01 \x01(\x0e\x32\x17.lnrpc.OutputScriptType\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x11\n\tpk_script\x18\x03 \x01(\t\x12\x14\n\x0coutput_index\x18\x04 \x01(\x03\x12\x0e\n\x06\x61mount\x18\x05 \x01(\x03\x12\x16\n\x0eis_our_address\x18\x06 \x01(\x08\"\xbc\x02\n\x0bTransaction\x12\x0f\n\x07tx_hash\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x19\n\x11num_confirmations\x18\x03 \x01(\x05\x12\x12\n\nblock_hash\x18\x04 \x01(\t\x12\x14\n\x0c\x62lock_height\x18\x05 \x01(\x05\x12\x12\n\ntime_stamp\x18\x06 \x01(\x03\x12\x12\n\ntotal_fees\x18\x07 \x01(\x03\x12\x1a\n\x0e\x64\x65st_addresses\x18\x08 \x03(\tB\x02\x18\x01\x12+\n\x0eoutput_details\x18\x0b \x03(\x0b\x32\x13.lnrpc.OutputDetail\x12\x12\n\nraw_tx_hex\x18\t \x01(\t\x12\r\n\x05label\x18\n \x01(\t\x12\x33\n\x12previous_outpoints\x18\x0c \x03(\x0b\x32\x17.lnrpc.PreviousOutPoint\"S\n\x16GetTransactionsRequest\x12\x14\n\x0cstart_height\x18\x01 \x01(\x05\x12\x12\n\nend_height\x18\x02 \x01(\x05\x12\x0f\n\x07\x61\x63\x63ount\x18\x03 \x01(\t\">\n\x12TransactionDetails\x12(\n\x0ctransactions\x18\x01 \x03(\x0b\x32\x12.lnrpc.Transaction\"M\n\x08\x46\x65\x65Limit\x12\x0f\n\x05\x66ixed\x18\x01 \x01(\x03H\x00\x12\x14\n\nfixed_msat\x18\x03 \x01(\x03H\x00\x12\x11\n\x07percent\x18\x02 \x01(\x03H\x00\x42\x07\n\x05limit\"\x8a\x04\n\x0bSendRequest\x12\x0c\n\x04\x64\x65st\x18\x01 \x01(\x0c\x12\x17\n\x0b\x64\x65st_string\x18\x02 \x01(\tB\x02\x18\x01\x12\x0b\n\x03\x61mt\x18\x03 \x01(\x03\x12\x10\n\x08\x61mt_msat\x18\x0c \x01(\x03\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\x12\x1f\n\x13payment_hash_string\x18\x05 \x01(\tB\x02\x18\x01\x12\x17\n\x0fpayment_request\x18\x06 \x01(\t\x12\x18\n\x10\x66inal_cltv_delta\x18\x07 \x01(\x05\x12\"\n\tfee_limit\x18\x08 \x01(\x0b\x32\x0f.lnrpc.FeeLimit\x12\x1c\n\x10outgoing_chan_id\x18\t \x01(\x04\x42\x02\x30\x01\x12\x17\n\x0flast_hop_pubkey\x18\r \x01(\x0c\x12\x12\n\ncltv_limit\x18\n \x01(\r\x12\x46\n\x13\x64\x65st_custom_records\x18\x0b \x03(\x0b\x32).lnrpc.SendRequest.DestCustomRecordsEntry\x12\x1a\n\x12\x61llow_self_payment\x18\x0e \x01(\x08\x12(\n\rdest_features\x18\x0f \x03(\x0e\x32\x11.lnrpc.FeatureBit\x12\x14\n\x0cpayment_addr\x18\x10 \x01(\x0c\x1a\x38\n\x16\x44\x65stCustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"z\n\x0cSendResponse\x12\x15\n\rpayment_error\x18\x01 \x01(\t\x12\x18\n\x10payment_preimage\x18\x02 \x01(\x0c\x12#\n\rpayment_route\x18\x03 \x01(\x0b\x32\x0c.lnrpc.Route\x12\x14\n\x0cpayment_hash\x18\x04 \x01(\x0c\"n\n\x12SendToRouteRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x1f\n\x13payment_hash_string\x18\x02 \x01(\tB\x02\x18\x01\x12\x1b\n\x05route\x18\x04 \x01(\x0b\x32\x0c.lnrpc.RouteJ\x04\x08\x03\x10\x04\"\x98\x03\n\x14\x43hannelAcceptRequest\x12\x13\n\x0bnode_pubkey\x18\x01 \x01(\x0c\x12\x12\n\nchain_hash\x18\x02 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x03 \x01(\x0c\x12\x13\n\x0b\x66unding_amt\x18\x04 \x01(\x04\x12\x10\n\x08push_amt\x18\x05 \x01(\x04\x12\x12\n\ndust_limit\x18\x06 \x01(\x04\x12\x1b\n\x13max_value_in_flight\x18\x07 \x01(\x04\x12\x17\n\x0f\x63hannel_reserve\x18\x08 \x01(\x04\x12\x10\n\x08min_htlc\x18\t \x01(\x04\x12\x12\n\nfee_per_kw\x18\n \x01(\x04\x12\x11\n\tcsv_delay\x18\x0b \x01(\r\x12\x1a\n\x12max_accepted_htlcs\x18\x0c \x01(\r\x12\x15\n\rchannel_flags\x18\r \x01(\r\x12.\n\x0f\x63ommitment_type\x18\x0e \x01(\x0e\x32\x15.lnrpc.CommitmentType\x12\x17\n\x0fwants_zero_conf\x18\x0f \x01(\x08\x12\x18\n\x10wants_scid_alias\x18\x10 \x01(\x08\"\x87\x02\n\x15\x43hannelAcceptResponse\x12\x0e\n\x06\x61\x63\x63\x65pt\x18\x01 \x01(\x08\x12\x17\n\x0fpending_chan_id\x18\x02 \x01(\x0c\x12\r\n\x05\x65rror\x18\x03 \x01(\t\x12\x18\n\x10upfront_shutdown\x18\x04 \x01(\t\x12\x11\n\tcsv_delay\x18\x05 \x01(\r\x12\x13\n\x0breserve_sat\x18\x06 \x01(\x04\x12\x1a\n\x12in_flight_max_msat\x18\x07 \x01(\x04\x12\x16\n\x0emax_htlc_count\x18\x08 \x01(\r\x12\x13\n\x0bmin_htlc_in\x18\t \x01(\x04\x12\x18\n\x10min_accept_depth\x18\n \x01(\r\x12\x11\n\tzero_conf\x18\x0b \x01(\x08\"n\n\x0c\x43hannelPoint\x12\x1c\n\x12\x66unding_txid_bytes\x18\x01 \x01(\x0cH\x00\x12\x1a\n\x10\x66unding_txid_str\x18\x02 \x01(\tH\x00\x12\x14\n\x0coutput_index\x18\x03 \x01(\rB\x0e\n\x0c\x66unding_txid\"F\n\x08OutPoint\x12\x12\n\ntxid_bytes\x18\x01 \x01(\x0c\x12\x10\n\x08txid_str\x18\x02 \x01(\t\x12\x14\n\x0coutput_index\x18\x03 \x01(\r\";\n\x10PreviousOutPoint\x12\x10\n\x08outpoint\x18\x01 \x01(\t\x12\x15\n\ris_our_output\x18\x02 \x01(\x08\"0\n\x10LightningAddress\x12\x0e\n\x06pubkey\x18\x01 \x01(\t\x12\x0c\n\x04host\x18\x02 \x01(\t\"\xcf\x01\n\x12\x45stimateFeeRequest\x12\x41\n\x0c\x41\x64\x64rToAmount\x18\x01 \x03(\x0b\x32+.lnrpc.EstimateFeeRequest.AddrToAmountEntry\x12\x13\n\x0btarget_conf\x18\x02 \x01(\x05\x12\x11\n\tmin_confs\x18\x03 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x04 \x01(\x08\x1a\x33\n\x11\x41\x64\x64rToAmountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\"_\n\x13\x45stimateFeeResponse\x12\x0f\n\x07\x66\x65\x65_sat\x18\x01 \x01(\x03\x12 \n\x14\x66\x65\x65rate_sat_per_byte\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x15\n\rsat_per_vbyte\x18\x03 \x01(\x04\"\x89\x02\n\x0fSendManyRequest\x12>\n\x0c\x41\x64\x64rToAmount\x18\x01 \x03(\x0b\x32(.lnrpc.SendManyRequest.AddrToAmountEntry\x12\x13\n\x0btarget_conf\x18\x03 \x01(\x05\x12\x15\n\rsat_per_vbyte\x18\x04 \x01(\x04\x12\x18\n\x0csat_per_byte\x18\x05 \x01(\x03\x42\x02\x18\x01\x12\r\n\x05label\x18\x06 \x01(\t\x12\x11\n\tmin_confs\x18\x07 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x08 \x01(\x08\x1a\x33\n\x11\x41\x64\x64rToAmountEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\" \n\x10SendManyResponse\x12\x0c\n\x04txid\x18\x01 \x01(\t\"\xc5\x01\n\x10SendCoinsRequest\x12\x0c\n\x04\x61\x64\x64r\x18\x01 \x01(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x13\n\x0btarget_conf\x18\x03 \x01(\x05\x12\x15\n\rsat_per_vbyte\x18\x04 \x01(\x04\x12\x18\n\x0csat_per_byte\x18\x05 \x01(\x03\x42\x02\x18\x01\x12\x10\n\x08send_all\x18\x06 \x01(\x08\x12\r\n\x05label\x18\x07 \x01(\t\x12\x11\n\tmin_confs\x18\x08 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\t \x01(\x08\"!\n\x11SendCoinsResponse\x12\x0c\n\x04txid\x18\x01 \x01(\t\"K\n\x12ListUnspentRequest\x12\x11\n\tmin_confs\x18\x01 \x01(\x05\x12\x11\n\tmax_confs\x18\x02 \x01(\x05\x12\x0f\n\x07\x61\x63\x63ount\x18\x03 \x01(\t\"1\n\x13ListUnspentResponse\x12\x1a\n\x05utxos\x18\x01 \x03(\x0b\x32\x0b.lnrpc.Utxo\"F\n\x11NewAddressRequest\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.lnrpc.AddressType\x12\x0f\n\x07\x61\x63\x63ount\x18\x02 \x01(\t\"%\n\x12NewAddressResponse\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\"6\n\x12SignMessageRequest\x12\x0b\n\x03msg\x18\x01 \x01(\x0c\x12\x13\n\x0bsingle_hash\x18\x02 \x01(\x08\"(\n\x13SignMessageResponse\x12\x11\n\tsignature\x18\x01 \x01(\t\"6\n\x14VerifyMessageRequest\x12\x0b\n\x03msg\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\t\"6\n\x15VerifyMessageResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\x12\x0e\n\x06pubkey\x18\x02 \x01(\t\"Z\n\x12\x43onnectPeerRequest\x12%\n\x04\x61\x64\x64r\x18\x01 \x01(\x0b\x32\x17.lnrpc.LightningAddress\x12\x0c\n\x04perm\x18\x02 \x01(\x08\x12\x0f\n\x07timeout\x18\x03 \x01(\x04\"\x15\n\x13\x43onnectPeerResponse\"(\n\x15\x44isconnectPeerRequest\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\"\x18\n\x16\x44isconnectPeerResponse\"\xa5\x01\n\x04HTLC\x12\x10\n\x08incoming\x18\x01 \x01(\x08\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x11\n\thash_lock\x18\x03 \x01(\x0c\x12\x19\n\x11\x65xpiration_height\x18\x04 \x01(\r\x12\x12\n\nhtlc_index\x18\x05 \x01(\x04\x12\x1a\n\x12\x66orwarding_channel\x18\x06 \x01(\x04\x12\x1d\n\x15\x66orwarding_htlc_index\x18\x07 \x01(\x04\"\xaa\x01\n\x12\x43hannelConstraints\x12\x11\n\tcsv_delay\x18\x01 \x01(\r\x12\x18\n\x10\x63han_reserve_sat\x18\x02 \x01(\x04\x12\x16\n\x0e\x64ust_limit_sat\x18\x03 \x01(\x04\x12\x1c\n\x14max_pending_amt_msat\x18\x04 \x01(\x04\x12\x15\n\rmin_htlc_msat\x18\x05 \x01(\x04\x12\x1a\n\x12max_accepted_htlcs\x18\x06 \x01(\r\"\xab\x07\n\x07\x43hannel\x12\x0e\n\x06\x61\x63tive\x18\x01 \x01(\x08\x12\x15\n\rremote_pubkey\x18\x02 \x01(\t\x12\x15\n\rchannel_point\x18\x03 \x01(\t\x12\x13\n\x07\x63han_id\x18\x04 \x01(\x04\x42\x02\x30\x01\x12\x10\n\x08\x63\x61pacity\x18\x05 \x01(\x03\x12\x15\n\rlocal_balance\x18\x06 \x01(\x03\x12\x16\n\x0eremote_balance\x18\x07 \x01(\x03\x12\x12\n\ncommit_fee\x18\x08 \x01(\x03\x12\x15\n\rcommit_weight\x18\t \x01(\x03\x12\x12\n\nfee_per_kw\x18\n \x01(\x03\x12\x19\n\x11unsettled_balance\x18\x0b \x01(\x03\x12\x1b\n\x13total_satoshis_sent\x18\x0c \x01(\x03\x12\x1f\n\x17total_satoshis_received\x18\r \x01(\x03\x12\x13\n\x0bnum_updates\x18\x0e \x01(\x04\x12\"\n\rpending_htlcs\x18\x0f \x03(\x0b\x32\x0b.lnrpc.HTLC\x12\x15\n\tcsv_delay\x18\x10 \x01(\rB\x02\x18\x01\x12\x0f\n\x07private\x18\x11 \x01(\x08\x12\x11\n\tinitiator\x18\x12 \x01(\x08\x12\x19\n\x11\x63han_status_flags\x18\x13 \x01(\t\x12\"\n\x16local_chan_reserve_sat\x18\x14 \x01(\x03\x42\x02\x18\x01\x12#\n\x17remote_chan_reserve_sat\x18\x15 \x01(\x03\x42\x02\x18\x01\x12\x1d\n\x11static_remote_key\x18\x16 \x01(\x08\x42\x02\x18\x01\x12.\n\x0f\x63ommitment_type\x18\x1a \x01(\x0e\x32\x15.lnrpc.CommitmentType\x12\x10\n\x08lifetime\x18\x17 \x01(\x03\x12\x0e\n\x06uptime\x18\x18 \x01(\x03\x12\x15\n\rclose_address\x18\x19 \x01(\t\x12\x17\n\x0fpush_amount_sat\x18\x1b \x01(\x04\x12\x13\n\x0bthaw_height\x18\x1c \x01(\r\x12\x34\n\x11local_constraints\x18\x1d \x01(\x0b\x32\x19.lnrpc.ChannelConstraints\x12\x35\n\x12remote_constraints\x18\x1e \x01(\x0b\x32\x19.lnrpc.ChannelConstraints\x12\x13\n\x0b\x61lias_scids\x18\x1f \x03(\x04\x12\x11\n\tzero_conf\x18 \x01(\x08\x12 \n\x18zero_conf_confirmed_scid\x18! \x01(\x04\x12\x12\n\npeer_alias\x18\" \x01(\t\x12\x1b\n\x0fpeer_scid_alias\x18# \x01(\x04\x42\x02\x30\x01\"\x95\x01\n\x13ListChannelsRequest\x12\x13\n\x0b\x61\x63tive_only\x18\x01 \x01(\x08\x12\x15\n\rinactive_only\x18\x02 \x01(\x08\x12\x13\n\x0bpublic_only\x18\x03 \x01(\x08\x12\x14\n\x0cprivate_only\x18\x04 \x01(\x08\x12\x0c\n\x04peer\x18\x05 \x01(\x0c\x12\x19\n\x11peer_alias_lookup\x18\x06 \x01(\x08\"8\n\x14ListChannelsResponse\x12 \n\x08\x63hannels\x18\x0b \x03(\x0b\x32\x0e.lnrpc.Channel\".\n\x08\x41liasMap\x12\x11\n\tbase_scid\x18\x01 \x01(\x04\x12\x0f\n\x07\x61liases\x18\x02 \x03(\x04\"\x14\n\x12ListAliasesRequest\":\n\x13ListAliasesResponse\x12#\n\nalias_maps\x18\x01 \x03(\x0b\x32\x0f.lnrpc.AliasMap\"\xe4\x04\n\x13\x43hannelCloseSummary\x12\x15\n\rchannel_point\x18\x01 \x01(\t\x12\x13\n\x07\x63han_id\x18\x02 \x01(\x04\x42\x02\x30\x01\x12\x12\n\nchain_hash\x18\x03 \x01(\t\x12\x17\n\x0f\x63losing_tx_hash\x18\x04 \x01(\t\x12\x15\n\rremote_pubkey\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61pacity\x18\x06 \x01(\x03\x12\x14\n\x0c\x63lose_height\x18\x07 \x01(\r\x12\x17\n\x0fsettled_balance\x18\x08 \x01(\x03\x12\x1b\n\x13time_locked_balance\x18\t \x01(\x03\x12:\n\nclose_type\x18\n \x01(\x0e\x32&.lnrpc.ChannelCloseSummary.ClosureType\x12(\n\x0eopen_initiator\x18\x0b \x01(\x0e\x32\x10.lnrpc.Initiator\x12)\n\x0f\x63lose_initiator\x18\x0c \x01(\x0e\x32\x10.lnrpc.Initiator\x12&\n\x0bresolutions\x18\r \x03(\x0b\x32\x11.lnrpc.Resolution\x12\x13\n\x0b\x61lias_scids\x18\x0e \x03(\x04\x12$\n\x18zero_conf_confirmed_scid\x18\x0f \x01(\x04\x42\x02\x30\x01\"\x8a\x01\n\x0b\x43losureType\x12\x15\n\x11\x43OOPERATIVE_CLOSE\x10\x00\x12\x15\n\x11LOCAL_FORCE_CLOSE\x10\x01\x12\x16\n\x12REMOTE_FORCE_CLOSE\x10\x02\x12\x10\n\x0c\x42REACH_CLOSE\x10\x03\x12\x14\n\x10\x46UNDING_CANCELED\x10\x04\x12\r\n\tABANDONED\x10\x05\"\xb2\x01\n\nResolution\x12.\n\x0fresolution_type\x18\x01 \x01(\x0e\x32\x15.lnrpc.ResolutionType\x12)\n\x07outcome\x18\x02 \x01(\x0e\x32\x18.lnrpc.ResolutionOutcome\x12!\n\x08outpoint\x18\x03 \x01(\x0b\x32\x0f.lnrpc.OutPoint\x12\x12\n\namount_sat\x18\x04 \x01(\x04\x12\x12\n\nsweep_txid\x18\x05 \x01(\t\"\x94\x01\n\x15\x43losedChannelsRequest\x12\x13\n\x0b\x63ooperative\x18\x01 \x01(\x08\x12\x13\n\x0blocal_force\x18\x02 \x01(\x08\x12\x14\n\x0cremote_force\x18\x03 \x01(\x08\x12\x0e\n\x06\x62reach\x18\x04 \x01(\x08\x12\x18\n\x10\x66unding_canceled\x18\x05 \x01(\x08\x12\x11\n\tabandoned\x18\x06 \x01(\x08\"F\n\x16\x43losedChannelsResponse\x12,\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1a.lnrpc.ChannelCloseSummary\"\xef\x03\n\x04Peer\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x64\x64ress\x18\x03 \x01(\t\x12\x12\n\nbytes_sent\x18\x04 \x01(\x04\x12\x12\n\nbytes_recv\x18\x05 \x01(\x04\x12\x10\n\x08sat_sent\x18\x06 \x01(\x03\x12\x10\n\x08sat_recv\x18\x07 \x01(\x03\x12\x0f\n\x07inbound\x18\x08 \x01(\x08\x12\x11\n\tping_time\x18\t \x01(\x03\x12\'\n\tsync_type\x18\n \x01(\x0e\x32\x14.lnrpc.Peer.SyncType\x12+\n\x08\x66\x65\x61tures\x18\x0b \x03(\x0b\x32\x19.lnrpc.Peer.FeaturesEntry\x12\'\n\x06\x65rrors\x18\x0c \x03(\x0b\x32\x17.lnrpc.TimestampedError\x12\x12\n\nflap_count\x18\r \x01(\x05\x12\x14\n\x0clast_flap_ns\x18\x0e \x01(\x03\x12\x19\n\x11last_ping_payload\x18\x0f \x01(\x0c\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\"P\n\x08SyncType\x12\x10\n\x0cUNKNOWN_SYNC\x10\x00\x12\x0f\n\x0b\x41\x43TIVE_SYNC\x10\x01\x12\x10\n\x0cPASSIVE_SYNC\x10\x02\x12\x0f\n\x0bPINNED_SYNC\x10\x03\"4\n\x10TimestampedError\x12\x11\n\ttimestamp\x18\x01 \x01(\x04\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"(\n\x10ListPeersRequest\x12\x14\n\x0clatest_error\x18\x01 \x01(\x08\"/\n\x11ListPeersResponse\x12\x1a\n\x05peers\x18\x01 \x03(\x0b\x32\x0b.lnrpc.Peer\"\x17\n\x15PeerEventSubscription\"v\n\tPeerEvent\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12(\n\x04type\x18\x02 \x01(\x0e\x32\x1a.lnrpc.PeerEvent.EventType\".\n\tEventType\x12\x0f\n\x0bPEER_ONLINE\x10\x00\x12\x10\n\x0cPEER_OFFLINE\x10\x01\"\x10\n\x0eGetInfoRequest\"\xde\x04\n\x0fGetInfoResponse\x12\x0f\n\x07version\x18\x0e \x01(\t\x12\x13\n\x0b\x63ommit_hash\x18\x14 \x01(\t\x12\x17\n\x0fidentity_pubkey\x18\x01 \x01(\t\x12\r\n\x05\x61lias\x18\x02 \x01(\t\x12\r\n\x05\x63olor\x18\x11 \x01(\t\x12\x1c\n\x14num_pending_channels\x18\x03 \x01(\r\x12\x1b\n\x13num_active_channels\x18\x04 \x01(\r\x12\x1d\n\x15num_inactive_channels\x18\x0f \x01(\r\x12\x11\n\tnum_peers\x18\x05 \x01(\r\x12\x14\n\x0c\x62lock_height\x18\x06 \x01(\r\x12\x12\n\nblock_hash\x18\x08 \x01(\t\x12\x1d\n\x15\x62\x65st_header_timestamp\x18\r \x01(\x03\x12\x17\n\x0fsynced_to_chain\x18\t \x01(\x08\x12\x17\n\x0fsynced_to_graph\x18\x12 \x01(\x08\x12\x13\n\x07testnet\x18\n \x01(\x08\x42\x02\x18\x01\x12\x1c\n\x06\x63hains\x18\x10 \x03(\x0b\x32\x0c.lnrpc.Chain\x12\x0c\n\x04uris\x18\x0c \x03(\t\x12\x36\n\x08\x66\x65\x61tures\x18\x13 \x03(\x0b\x32$.lnrpc.GetInfoResponse.FeaturesEntry\x12 \n\x18require_htlc_interceptor\x18\x15 \x01(\x08\x12$\n\x1cstore_final_htlc_resolutions\x18\x16 \x01(\x08\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01J\x04\x08\x0b\x10\x0c\"\x18\n\x16GetRecoveryInfoRequest\"]\n\x17GetRecoveryInfoResponse\x12\x15\n\rrecovery_mode\x18\x01 \x01(\x08\x12\x19\n\x11recovery_finished\x18\x02 \x01(\x08\x12\x10\n\x08progress\x18\x03 \x01(\x01\"\'\n\x05\x43hain\x12\r\n\x05\x63hain\x18\x01 \x01(\t\x12\x0f\n\x07network\x18\x02 \x01(\t\"U\n\x12\x43onfirmationUpdate\x12\x11\n\tblock_sha\x18\x01 \x01(\x0c\x12\x14\n\x0c\x62lock_height\x18\x02 \x01(\x05\x12\x16\n\x0enum_confs_left\x18\x03 \x01(\r\"?\n\x11\x43hannelOpenUpdate\x12*\n\rchannel_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\";\n\x12\x43hannelCloseUpdate\x12\x14\n\x0c\x63losing_txid\x18\x01 \x01(\x0c\x12\x0f\n\x07success\x18\x02 \x01(\x08\"\xcb\x01\n\x13\x43loseChannelRequest\x12*\n\rchannel_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\x12\x13\n\x0btarget_conf\x18\x03 \x01(\x05\x12\x18\n\x0csat_per_byte\x18\x04 \x01(\x03\x42\x02\x18\x01\x12\x18\n\x10\x64\x65livery_address\x18\x05 \x01(\t\x12\x15\n\rsat_per_vbyte\x18\x06 \x01(\x04\x12\x19\n\x11max_fee_per_vbyte\x18\x07 \x01(\x04\"}\n\x11\x43loseStatusUpdate\x12-\n\rclose_pending\x18\x01 \x01(\x0b\x32\x14.lnrpc.PendingUpdateH\x00\x12/\n\nchan_close\x18\x03 \x01(\x0b\x32\x19.lnrpc.ChannelCloseUpdateH\x00\x42\x08\n\x06update\"3\n\rPendingUpdate\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x14\n\x0coutput_index\x18\x02 \x01(\r\"T\n\x13ReadyForPsbtFunding\x12\x17\n\x0f\x66unding_address\x18\x01 \x01(\t\x12\x16\n\x0e\x66unding_amount\x18\x02 \x01(\x03\x12\x0c\n\x04psbt\x18\x03 \x01(\x0c\"\xad\x01\n\x17\x42\x61tchOpenChannelRequest\x12)\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x17.lnrpc.BatchOpenChannel\x12\x13\n\x0btarget_conf\x18\x02 \x01(\x05\x12\x15\n\rsat_per_vbyte\x18\x03 \x01(\x03\x12\x11\n\tmin_confs\x18\x04 \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x05 \x01(\x08\x12\r\n\x05label\x18\x06 \x01(\t\"\xf9\x01\n\x10\x42\x61tchOpenChannel\x12\x13\n\x0bnode_pubkey\x18\x01 \x01(\x0c\x12\x1c\n\x14local_funding_amount\x18\x02 \x01(\x03\x12\x10\n\x08push_sat\x18\x03 \x01(\x03\x12\x0f\n\x07private\x18\x04 \x01(\x08\x12\x15\n\rmin_htlc_msat\x18\x05 \x01(\x03\x12\x18\n\x10remote_csv_delay\x18\x06 \x01(\r\x12\x15\n\rclose_address\x18\x07 \x01(\t\x12\x17\n\x0fpending_chan_id\x18\x08 \x01(\x0c\x12.\n\x0f\x63ommitment_type\x18\t \x01(\x0e\x32\x15.lnrpc.CommitmentType\"J\n\x18\x42\x61tchOpenChannelResponse\x12.\n\x10pending_channels\x18\x01 \x03(\x0b\x32\x14.lnrpc.PendingUpdate\"\xa4\x05\n\x12OpenChannelRequest\x12\x15\n\rsat_per_vbyte\x18\x01 \x01(\x04\x12\x13\n\x0bnode_pubkey\x18\x02 \x01(\x0c\x12\x1e\n\x12node_pubkey_string\x18\x03 \x01(\tB\x02\x18\x01\x12\x1c\n\x14local_funding_amount\x18\x04 \x01(\x03\x12\x10\n\x08push_sat\x18\x05 \x01(\x03\x12\x13\n\x0btarget_conf\x18\x06 \x01(\x05\x12\x18\n\x0csat_per_byte\x18\x07 \x01(\x03\x42\x02\x18\x01\x12\x0f\n\x07private\x18\x08 \x01(\x08\x12\x15\n\rmin_htlc_msat\x18\t \x01(\x03\x12\x18\n\x10remote_csv_delay\x18\n \x01(\r\x12\x11\n\tmin_confs\x18\x0b \x01(\x05\x12\x19\n\x11spend_unconfirmed\x18\x0c \x01(\x08\x12\x15\n\rclose_address\x18\r \x01(\t\x12(\n\x0c\x66unding_shim\x18\x0e \x01(\x0b\x32\x12.lnrpc.FundingShim\x12\'\n\x1fremote_max_value_in_flight_msat\x18\x0f \x01(\x04\x12\x18\n\x10remote_max_htlcs\x18\x10 \x01(\r\x12\x15\n\rmax_local_csv\x18\x11 \x01(\r\x12.\n\x0f\x63ommitment_type\x18\x12 \x01(\x0e\x32\x15.lnrpc.CommitmentType\x12\x11\n\tzero_conf\x18\x13 \x01(\x08\x12\x12\n\nscid_alias\x18\x14 \x01(\x08\x12\x10\n\x08\x62\x61se_fee\x18\x15 \x01(\x04\x12\x10\n\x08\x66\x65\x65_rate\x18\x16 \x01(\x04\x12\x14\n\x0cuse_base_fee\x18\x17 \x01(\x08\x12\x14\n\x0cuse_fee_rate\x18\x18 \x01(\x08\x12\x1f\n\x17remote_chan_reserve_sat\x18\x19 \x01(\x04\x12\x10\n\x08\x66und_max\x18\x1a \x01(\x08\"\xc3\x01\n\x10OpenStatusUpdate\x12,\n\x0c\x63han_pending\x18\x01 \x01(\x0b\x32\x14.lnrpc.PendingUpdateH\x00\x12-\n\tchan_open\x18\x03 \x01(\x0b\x32\x18.lnrpc.ChannelOpenUpdateH\x00\x12/\n\tpsbt_fund\x18\x05 \x01(\x0b\x32\x1a.lnrpc.ReadyForPsbtFundingH\x00\x12\x17\n\x0fpending_chan_id\x18\x04 \x01(\x0c\x42\x08\n\x06update\"3\n\nKeyLocator\x12\x12\n\nkey_family\x18\x01 \x01(\x05\x12\x11\n\tkey_index\x18\x02 \x01(\x05\"J\n\rKeyDescriptor\x12\x15\n\rraw_key_bytes\x18\x01 \x01(\x0c\x12\"\n\x07key_loc\x18\x02 \x01(\x0b\x32\x11.lnrpc.KeyLocator\"\xb0\x01\n\rChanPointShim\x12\x0b\n\x03\x61mt\x18\x01 \x01(\x03\x12\'\n\nchan_point\x18\x02 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\'\n\tlocal_key\x18\x03 \x01(\x0b\x32\x14.lnrpc.KeyDescriptor\x12\x12\n\nremote_key\x18\x04 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x05 \x01(\x0c\x12\x13\n\x0bthaw_height\x18\x06 \x01(\r\"J\n\x08PsbtShim\x12\x17\n\x0fpending_chan_id\x18\x01 \x01(\x0c\x12\x11\n\tbase_psbt\x18\x02 \x01(\x0c\x12\x12\n\nno_publish\x18\x03 \x01(\x08\"l\n\x0b\x46undingShim\x12/\n\x0f\x63han_point_shim\x18\x01 \x01(\x0b\x32\x14.lnrpc.ChanPointShimH\x00\x12$\n\tpsbt_shim\x18\x02 \x01(\x0b\x32\x0f.lnrpc.PsbtShimH\x00\x42\x06\n\x04shim\",\n\x11\x46undingShimCancel\x12\x17\n\x0fpending_chan_id\x18\x01 \x01(\x0c\"X\n\x11\x46undingPsbtVerify\x12\x13\n\x0b\x66unded_psbt\x18\x01 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x02 \x01(\x0c\x12\x15\n\rskip_finalize\x18\x03 \x01(\x08\"Y\n\x13\x46undingPsbtFinalize\x12\x13\n\x0bsigned_psbt\x18\x01 \x01(\x0c\x12\x17\n\x0fpending_chan_id\x18\x02 \x01(\x0c\x12\x14\n\x0c\x66inal_raw_tx\x18\x03 \x01(\x0c\"\xe5\x01\n\x14\x46undingTransitionMsg\x12+\n\rshim_register\x18\x01 \x01(\x0b\x32\x12.lnrpc.FundingShimH\x00\x12/\n\x0bshim_cancel\x18\x02 \x01(\x0b\x32\x18.lnrpc.FundingShimCancelH\x00\x12/\n\x0bpsbt_verify\x18\x03 \x01(\x0b\x32\x18.lnrpc.FundingPsbtVerifyH\x00\x12\x33\n\rpsbt_finalize\x18\x04 \x01(\x0b\x32\x1a.lnrpc.FundingPsbtFinalizeH\x00\x42\t\n\x07trigger\"\x16\n\x14\x46undingStateStepResp\"\x86\x01\n\x0bPendingHTLC\x12\x10\n\x08incoming\x18\x01 \x01(\x08\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x03\x12\x10\n\x08outpoint\x18\x03 \x01(\t\x12\x17\n\x0fmaturity_height\x18\x04 \x01(\r\x12\x1b\n\x13\x62locks_til_maturity\x18\x05 \x01(\x05\x12\r\n\x05stage\x18\x06 \x01(\r\"\x18\n\x16PendingChannelsRequest\"\xf7\r\n\x17PendingChannelsResponse\x12\x1b\n\x13total_limbo_balance\x18\x01 \x01(\x03\x12P\n\x15pending_open_channels\x18\x02 \x03(\x0b\x32\x31.lnrpc.PendingChannelsResponse.PendingOpenChannel\x12R\n\x18pending_closing_channels\x18\x03 \x03(\x0b\x32,.lnrpc.PendingChannelsResponse.ClosedChannelB\x02\x18\x01\x12Y\n\x1epending_force_closing_channels\x18\x04 \x03(\x0b\x32\x31.lnrpc.PendingChannelsResponse.ForceClosedChannel\x12R\n\x16waiting_close_channels\x18\x05 \x03(\x0b\x32\x32.lnrpc.PendingChannelsResponse.WaitingCloseChannel\x1a\xe4\x02\n\x0ePendingChannel\x12\x17\n\x0fremote_node_pub\x18\x01 \x01(\t\x12\x15\n\rchannel_point\x18\x02 \x01(\t\x12\x10\n\x08\x63\x61pacity\x18\x03 \x01(\x03\x12\x15\n\rlocal_balance\x18\x04 \x01(\x03\x12\x16\n\x0eremote_balance\x18\x05 \x01(\x03\x12\x1e\n\x16local_chan_reserve_sat\x18\x06 \x01(\x03\x12\x1f\n\x17remote_chan_reserve_sat\x18\x07 \x01(\x03\x12#\n\tinitiator\x18\x08 \x01(\x0e\x32\x10.lnrpc.Initiator\x12.\n\x0f\x63ommitment_type\x18\t \x01(\x0e\x32\x15.lnrpc.CommitmentType\x12\x1f\n\x17num_forwarding_packages\x18\n \x01(\x03\x12\x19\n\x11\x63han_status_flags\x18\x0b \x01(\t\x12\x0f\n\x07private\x18\x0c \x01(\x08\x1a\x99\x01\n\x12PendingOpenChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x12\n\ncommit_fee\x18\x04 \x01(\x03\x12\x15\n\rcommit_weight\x18\x05 \x01(\x03\x12\x12\n\nfee_per_kw\x18\x06 \x01(\x03J\x04\x08\x02\x10\x03\x1a\xc3\x01\n\x13WaitingCloseChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x15\n\rlimbo_balance\x18\x02 \x01(\x03\x12?\n\x0b\x63ommitments\x18\x03 \x01(\x0b\x32*.lnrpc.PendingChannelsResponse.Commitments\x12\x14\n\x0c\x63losing_txid\x18\x04 \x01(\t\x1a\xb7\x01\n\x0b\x43ommitments\x12\x12\n\nlocal_txid\x18\x01 \x01(\t\x12\x13\n\x0bremote_txid\x18\x02 \x01(\t\x12\x1b\n\x13remote_pending_txid\x18\x03 \x01(\t\x12\x1c\n\x14local_commit_fee_sat\x18\x04 \x01(\x04\x12\x1d\n\x15remote_commit_fee_sat\x18\x05 \x01(\x04\x12%\n\x1dremote_pending_commit_fee_sat\x18\x06 \x01(\x04\x1a\x65\n\rClosedChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x14\n\x0c\x63losing_txid\x18\x02 \x01(\t\x1a\xff\x02\n\x12\x46orceClosedChannel\x12>\n\x07\x63hannel\x18\x01 \x01(\x0b\x32-.lnrpc.PendingChannelsResponse.PendingChannel\x12\x14\n\x0c\x63losing_txid\x18\x02 \x01(\t\x12\x15\n\rlimbo_balance\x18\x03 \x01(\x03\x12\x17\n\x0fmaturity_height\x18\x04 \x01(\r\x12\x1b\n\x13\x62locks_til_maturity\x18\x05 \x01(\x05\x12\x19\n\x11recovered_balance\x18\x06 \x01(\x03\x12)\n\rpending_htlcs\x18\x08 \x03(\x0b\x32\x12.lnrpc.PendingHTLC\x12M\n\x06\x61nchor\x18\t \x01(\x0e\x32=.lnrpc.PendingChannelsResponse.ForceClosedChannel.AnchorState\"1\n\x0b\x41nchorState\x12\t\n\x05LIMBO\x10\x00\x12\r\n\tRECOVERED\x10\x01\x12\x08\n\x04LOST\x10\x02\"\x1a\n\x18\x43hannelEventSubscription\"\x93\x04\n\x12\x43hannelEventUpdate\x12&\n\x0copen_channel\x18\x01 \x01(\x0b\x32\x0e.lnrpc.ChannelH\x00\x12\x34\n\x0e\x63losed_channel\x18\x02 \x01(\x0b\x32\x1a.lnrpc.ChannelCloseSummaryH\x00\x12-\n\x0e\x61\x63tive_channel\x18\x03 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12/\n\x10inactive_channel\x18\x04 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12\x34\n\x14pending_open_channel\x18\x06 \x01(\x0b\x32\x14.lnrpc.PendingUpdateH\x00\x12\x35\n\x16\x66ully_resolved_channel\x18\x07 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12\x32\n\x04type\x18\x05 \x01(\x0e\x32$.lnrpc.ChannelEventUpdate.UpdateType\"\x92\x01\n\nUpdateType\x12\x10\n\x0cOPEN_CHANNEL\x10\x00\x12\x12\n\x0e\x43LOSED_CHANNEL\x10\x01\x12\x12\n\x0e\x41\x43TIVE_CHANNEL\x10\x02\x12\x14\n\x10INACTIVE_CHANNEL\x10\x03\x12\x18\n\x14PENDING_OPEN_CHANNEL\x10\x04\x12\x1a\n\x16\x46ULLY_RESOLVED_CHANNEL\x10\x05\x42\t\n\x07\x63hannel\"N\n\x14WalletAccountBalance\x12\x19\n\x11\x63onfirmed_balance\x18\x01 \x01(\x03\x12\x1b\n\x13unconfirmed_balance\x18\x02 \x01(\x03\"\x16\n\x14WalletBalanceRequest\"\xc3\x02\n\x15WalletBalanceResponse\x12\x15\n\rtotal_balance\x18\x01 \x01(\x03\x12\x19\n\x11\x63onfirmed_balance\x18\x02 \x01(\x03\x12\x1b\n\x13unconfirmed_balance\x18\x03 \x01(\x03\x12\x16\n\x0elocked_balance\x18\x05 \x01(\x03\x12$\n\x1creserved_balance_anchor_chan\x18\x06 \x01(\x03\x12I\n\x0f\x61\x63\x63ount_balance\x18\x04 \x03(\x0b\x32\x30.lnrpc.WalletBalanceResponse.AccountBalanceEntry\x1aR\n\x13\x41\x63\x63ountBalanceEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.lnrpc.WalletAccountBalance:\x02\x38\x01\"#\n\x06\x41mount\x12\x0b\n\x03sat\x18\x01 \x01(\x04\x12\x0c\n\x04msat\x18\x02 \x01(\x04\"\x17\n\x15\x43hannelBalanceRequest\"\xe4\x02\n\x16\x43hannelBalanceResponse\x12\x13\n\x07\x62\x61lance\x18\x01 \x01(\x03\x42\x02\x18\x01\x12 \n\x14pending_open_balance\x18\x02 \x01(\x03\x42\x02\x18\x01\x12$\n\rlocal_balance\x18\x03 \x01(\x0b\x32\r.lnrpc.Amount\x12%\n\x0eremote_balance\x18\x04 \x01(\x0b\x32\r.lnrpc.Amount\x12.\n\x17unsettled_local_balance\x18\x05 \x01(\x0b\x32\r.lnrpc.Amount\x12/\n\x18unsettled_remote_balance\x18\x06 \x01(\x0b\x32\r.lnrpc.Amount\x12\x31\n\x1apending_open_local_balance\x18\x07 \x01(\x0b\x32\r.lnrpc.Amount\x12\x32\n\x1bpending_open_remote_balance\x18\x08 \x01(\x0b\x32\r.lnrpc.Amount\"\xe3\x04\n\x12QueryRoutesRequest\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12\x0b\n\x03\x61mt\x18\x02 \x01(\x03\x12\x10\n\x08\x61mt_msat\x18\x0c \x01(\x03\x12\x18\n\x10\x66inal_cltv_delta\x18\x04 \x01(\x05\x12\"\n\tfee_limit\x18\x05 \x01(\x0b\x32\x0f.lnrpc.FeeLimit\x12\x15\n\rignored_nodes\x18\x06 \x03(\x0c\x12-\n\rignored_edges\x18\x07 \x03(\x0b\x32\x12.lnrpc.EdgeLocatorB\x02\x18\x01\x12\x16\n\x0esource_pub_key\x18\x08 \x01(\t\x12\x1b\n\x13use_mission_control\x18\t \x01(\x08\x12&\n\rignored_pairs\x18\n \x03(\x0b\x32\x0f.lnrpc.NodePair\x12\x12\n\ncltv_limit\x18\x0b \x01(\r\x12M\n\x13\x64\x65st_custom_records\x18\r \x03(\x0b\x32\x30.lnrpc.QueryRoutesRequest.DestCustomRecordsEntry\x12\x1c\n\x10outgoing_chan_id\x18\x0e \x01(\x04\x42\x02\x30\x01\x12\x17\n\x0flast_hop_pubkey\x18\x0f \x01(\x0c\x12%\n\x0broute_hints\x18\x10 \x03(\x0b\x32\x10.lnrpc.RouteHint\x12(\n\rdest_features\x18\x11 \x03(\x0e\x32\x11.lnrpc.FeatureBit\x12\x11\n\ttime_pref\x18\x12 \x01(\x01\x1a\x38\n\x16\x44\x65stCustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01J\x04\x08\x03\x10\x04\"$\n\x08NodePair\x12\x0c\n\x04\x66rom\x18\x01 \x01(\x0c\x12\n\n\x02to\x18\x02 \x01(\x0c\"@\n\x0b\x45\x64geLocator\x12\x16\n\nchannel_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x19\n\x11\x64irection_reverse\x18\x02 \x01(\x08\"I\n\x13QueryRoutesResponse\x12\x1c\n\x06routes\x18\x01 \x03(\x0b\x32\x0c.lnrpc.Route\x12\x14\n\x0csuccess_prob\x18\x02 \x01(\x01\"\x96\x03\n\x03Hop\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x19\n\rchan_capacity\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x1a\n\x0e\x61mt_to_forward\x18\x03 \x01(\x03\x42\x02\x18\x01\x12\x0f\n\x03\x66\x65\x65\x18\x04 \x01(\x03\x42\x02\x18\x01\x12\x0e\n\x06\x65xpiry\x18\x05 \x01(\r\x12\x1b\n\x13\x61mt_to_forward_msat\x18\x06 \x01(\x03\x12\x10\n\x08\x66\x65\x65_msat\x18\x07 \x01(\x03\x12\x0f\n\x07pub_key\x18\x08 \x01(\t\x12\x17\n\x0btlv_payload\x18\t \x01(\x08\x42\x02\x18\x01\x12$\n\nmpp_record\x18\n \x01(\x0b\x32\x10.lnrpc.MPPRecord\x12$\n\namp_record\x18\x0c \x01(\x0b\x32\x10.lnrpc.AMPRecord\x12\x35\n\x0e\x63ustom_records\x18\x0b \x03(\x0b\x32\x1d.lnrpc.Hop.CustomRecordsEntry\x12\x10\n\x08metadata\x18\r \x01(\x0c\x1a\x34\n\x12\x43ustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"9\n\tMPPRecord\x12\x14\n\x0cpayment_addr\x18\x0b \x01(\x0c\x12\x16\n\x0etotal_amt_msat\x18\n \x01(\x03\"D\n\tAMPRecord\x12\x12\n\nroot_share\x18\x01 \x01(\x0c\x12\x0e\n\x06set_id\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hild_index\x18\x03 \x01(\r\"\x9a\x01\n\x05Route\x12\x17\n\x0ftotal_time_lock\x18\x01 \x01(\r\x12\x16\n\ntotal_fees\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x15\n\ttotal_amt\x18\x03 \x01(\x03\x42\x02\x18\x01\x12\x18\n\x04hops\x18\x04 \x03(\x0b\x32\n.lnrpc.Hop\x12\x17\n\x0ftotal_fees_msat\x18\x05 \x01(\x03\x12\x16\n\x0etotal_amt_msat\x18\x06 \x01(\x03\"<\n\x0fNodeInfoRequest\x12\x0f\n\x07pub_key\x18\x01 \x01(\t\x12\x18\n\x10include_channels\x18\x02 \x01(\x08\"\x82\x01\n\x08NodeInfo\x12\"\n\x04node\x18\x01 \x01(\x0b\x32\x14.lnrpc.LightningNode\x12\x14\n\x0cnum_channels\x18\x02 \x01(\r\x12\x16\n\x0etotal_capacity\x18\x03 \x01(\x03\x12$\n\x08\x63hannels\x18\x04 \x03(\x0b\x32\x12.lnrpc.ChannelEdge\"\xe8\x02\n\rLightningNode\x12\x13\n\x0blast_update\x18\x01 \x01(\r\x12\x0f\n\x07pub_key\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12%\n\taddresses\x18\x04 \x03(\x0b\x32\x12.lnrpc.NodeAddress\x12\r\n\x05\x63olor\x18\x05 \x01(\t\x12\x34\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0b\x32\".lnrpc.LightningNode.FeaturesEntry\x12?\n\x0e\x63ustom_records\x18\x07 \x03(\x0b\x32\'.lnrpc.LightningNode.CustomRecordsEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\x1a\x34\n\x12\x43ustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\",\n\x0bNodeAddress\x12\x0f\n\x07network\x18\x01 \x01(\t\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x01(\t\"\xa3\x02\n\rRoutingPolicy\x12\x17\n\x0ftime_lock_delta\x18\x01 \x01(\r\x12\x10\n\x08min_htlc\x18\x02 \x01(\x03\x12\x15\n\rfee_base_msat\x18\x03 \x01(\x03\x12\x1b\n\x13\x66\x65\x65_rate_milli_msat\x18\x04 \x01(\x03\x12\x10\n\x08\x64isabled\x18\x05 \x01(\x08\x12\x15\n\rmax_htlc_msat\x18\x06 \x01(\x04\x12\x13\n\x0blast_update\x18\x07 \x01(\r\x12?\n\x0e\x63ustom_records\x18\x08 \x03(\x0b\x32\'.lnrpc.RoutingPolicy.CustomRecordsEntry\x1a\x34\n\x12\x43ustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xd7\x02\n\x0b\x43hannelEdge\x12\x16\n\nchannel_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x12\n\nchan_point\x18\x02 \x01(\t\x12\x17\n\x0blast_update\x18\x03 \x01(\rB\x02\x18\x01\x12\x11\n\tnode1_pub\x18\x04 \x01(\t\x12\x11\n\tnode2_pub\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61pacity\x18\x06 \x01(\x03\x12*\n\x0cnode1_policy\x18\x07 \x01(\x0b\x32\x14.lnrpc.RoutingPolicy\x12*\n\x0cnode2_policy\x18\x08 \x01(\x0b\x32\x14.lnrpc.RoutingPolicy\x12=\n\x0e\x63ustom_records\x18\t \x03(\x0b\x32%.lnrpc.ChannelEdge.CustomRecordsEntry\x1a\x34\n\x12\x43ustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"2\n\x13\x43hannelGraphRequest\x12\x1b\n\x13include_unannounced\x18\x01 \x01(\x08\"V\n\x0c\x43hannelGraph\x12#\n\x05nodes\x18\x01 \x03(\x0b\x32\x14.lnrpc.LightningNode\x12!\n\x05\x65\x64ges\x18\x02 \x03(\x0b\x32\x12.lnrpc.ChannelEdge\":\n\x12NodeMetricsRequest\x12$\n\x05types\x18\x01 \x03(\x0e\x32\x15.lnrpc.NodeMetricType\"\xbe\x01\n\x13NodeMetricsResponse\x12U\n\x16\x62\x65tweenness_centrality\x18\x01 \x03(\x0b\x32\x35.lnrpc.NodeMetricsResponse.BetweennessCentralityEntry\x1aP\n\x1a\x42\x65tweennessCentralityEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.lnrpc.FloatMetric:\x02\x38\x01\"6\n\x0b\x46loatMetric\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x18\n\x10normalized_value\x18\x02 \x01(\x01\"&\n\x0f\x43hanInfoRequest\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\"\x14\n\x12NetworkInfoRequest\"\xa7\x02\n\x0bNetworkInfo\x12\x16\n\x0egraph_diameter\x18\x01 \x01(\r\x12\x16\n\x0e\x61vg_out_degree\x18\x02 \x01(\x01\x12\x16\n\x0emax_out_degree\x18\x03 \x01(\r\x12\x11\n\tnum_nodes\x18\x04 \x01(\r\x12\x14\n\x0cnum_channels\x18\x05 \x01(\r\x12\x1e\n\x16total_network_capacity\x18\x06 \x01(\x03\x12\x18\n\x10\x61vg_channel_size\x18\x07 \x01(\x01\x12\x18\n\x10min_channel_size\x18\x08 \x01(\x03\x12\x18\n\x10max_channel_size\x18\t \x01(\x03\x12\x1f\n\x17median_channel_size_sat\x18\n \x01(\x03\x12\x18\n\x10num_zombie_chans\x18\x0b \x01(\x04\"\r\n\x0bStopRequest\"\x0e\n\x0cStopResponse\"\x1b\n\x19GraphTopologySubscription\"\xa3\x01\n\x13GraphTopologyUpdate\x12\'\n\x0cnode_updates\x18\x01 \x03(\x0b\x32\x11.lnrpc.NodeUpdate\x12\x31\n\x0f\x63hannel_updates\x18\x02 \x03(\x0b\x32\x18.lnrpc.ChannelEdgeUpdate\x12\x30\n\x0c\x63losed_chans\x18\x03 \x03(\x0b\x32\x1a.lnrpc.ClosedChannelUpdate\"\x94\x02\n\nNodeUpdate\x12\x15\n\taddresses\x18\x01 \x03(\tB\x02\x18\x01\x12\x14\n\x0cidentity_key\x18\x02 \x01(\t\x12\x1b\n\x0fglobal_features\x18\x03 \x01(\x0c\x42\x02\x18\x01\x12\r\n\x05\x61lias\x18\x04 \x01(\t\x12\r\n\x05\x63olor\x18\x05 \x01(\t\x12*\n\x0enode_addresses\x18\x07 \x03(\x0b\x32\x12.lnrpc.NodeAddress\x12\x31\n\x08\x66\x65\x61tures\x18\x06 \x03(\x0b\x32\x1f.lnrpc.NodeUpdate.FeaturesEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\"\xc4\x01\n\x11\x43hannelEdgeUpdate\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\'\n\nchan_point\x18\x02 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\x10\n\x08\x63\x61pacity\x18\x03 \x01(\x03\x12,\n\x0erouting_policy\x18\x04 \x01(\x0b\x32\x14.lnrpc.RoutingPolicy\x12\x18\n\x10\x61\x64vertising_node\x18\x05 \x01(\t\x12\x17\n\x0f\x63onnecting_node\x18\x06 \x01(\t\"|\n\x13\x43losedChannelUpdate\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x10\n\x08\x63\x61pacity\x18\x02 \x01(\x03\x12\x15\n\rclosed_height\x18\x03 \x01(\r\x12\'\n\nchan_point\x18\x04 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\"\x86\x01\n\x07HopHint\x12\x0f\n\x07node_id\x18\x01 \x01(\t\x12\x13\n\x07\x63han_id\x18\x02 \x01(\x04\x42\x02\x30\x01\x12\x15\n\rfee_base_msat\x18\x03 \x01(\r\x12#\n\x1b\x66\x65\x65_proportional_millionths\x18\x04 \x01(\r\x12\x19\n\x11\x63ltv_expiry_delta\x18\x05 \x01(\r\"\x17\n\x05SetID\x12\x0e\n\x06set_id\x18\x01 \x01(\x0c\".\n\tRouteHint\x12!\n\thop_hints\x18\x01 \x03(\x0b\x32\x0e.lnrpc.HopHint\"{\n\x0f\x41MPInvoiceState\x12&\n\x05state\x18\x01 \x01(\x0e\x32\x17.lnrpc.InvoiceHTLCState\x12\x14\n\x0csettle_index\x18\x02 \x01(\x04\x12\x13\n\x0bsettle_time\x18\x03 \x01(\x03\x12\x15\n\ramt_paid_msat\x18\x05 \x01(\x03\"\x85\x07\n\x07Invoice\x12\x0c\n\x04memo\x18\x01 \x01(\t\x12\x12\n\nr_preimage\x18\x03 \x01(\x0c\x12\x0e\n\x06r_hash\x18\x04 \x01(\x0c\x12\r\n\x05value\x18\x05 \x01(\x03\x12\x12\n\nvalue_msat\x18\x17 \x01(\x03\x12\x13\n\x07settled\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x15\n\rcreation_date\x18\x07 \x01(\x03\x12\x13\n\x0bsettle_date\x18\x08 \x01(\x03\x12\x17\n\x0fpayment_request\x18\t \x01(\t\x12\x18\n\x10\x64\x65scription_hash\x18\n \x01(\x0c\x12\x0e\n\x06\x65xpiry\x18\x0b \x01(\x03\x12\x15\n\rfallback_addr\x18\x0c \x01(\t\x12\x13\n\x0b\x63ltv_expiry\x18\r \x01(\x04\x12%\n\x0broute_hints\x18\x0e \x03(\x0b\x32\x10.lnrpc.RouteHint\x12\x0f\n\x07private\x18\x0f \x01(\x08\x12\x11\n\tadd_index\x18\x10 \x01(\x04\x12\x14\n\x0csettle_index\x18\x11 \x01(\x04\x12\x14\n\x08\x61mt_paid\x18\x12 \x01(\x03\x42\x02\x18\x01\x12\x14\n\x0c\x61mt_paid_sat\x18\x13 \x01(\x03\x12\x15\n\ramt_paid_msat\x18\x14 \x01(\x03\x12*\n\x05state\x18\x15 \x01(\x0e\x32\x1b.lnrpc.Invoice.InvoiceState\x12!\n\x05htlcs\x18\x16 \x03(\x0b\x32\x12.lnrpc.InvoiceHTLC\x12.\n\x08\x66\x65\x61tures\x18\x18 \x03(\x0b\x32\x1c.lnrpc.Invoice.FeaturesEntry\x12\x12\n\nis_keysend\x18\x19 \x01(\x08\x12\x14\n\x0cpayment_addr\x18\x1a \x01(\x0c\x12\x0e\n\x06is_amp\x18\x1b \x01(\x08\x12>\n\x11\x61mp_invoice_state\x18\x1c \x03(\x0b\x32#.lnrpc.Invoice.AmpInvoiceStateEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\x1aN\n\x14\x41mpInvoiceStateEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b\x32\x16.lnrpc.AMPInvoiceState:\x02\x38\x01\"A\n\x0cInvoiceState\x12\x08\n\x04OPEN\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x0c\n\x08\x43\x41NCELED\x10\x02\x12\x0c\n\x08\x41\x43\x43\x45PTED\x10\x03J\x04\x08\x02\x10\x03\"\xf3\x02\n\x0bInvoiceHTLC\x12\x13\n\x07\x63han_id\x18\x01 \x01(\x04\x42\x02\x30\x01\x12\x12\n\nhtlc_index\x18\x02 \x01(\x04\x12\x10\n\x08\x61mt_msat\x18\x03 \x01(\x04\x12\x15\n\raccept_height\x18\x04 \x01(\x05\x12\x13\n\x0b\x61\x63\x63\x65pt_time\x18\x05 \x01(\x03\x12\x14\n\x0cresolve_time\x18\x06 \x01(\x03\x12\x15\n\rexpiry_height\x18\x07 \x01(\x05\x12&\n\x05state\x18\x08 \x01(\x0e\x32\x17.lnrpc.InvoiceHTLCState\x12=\n\x0e\x63ustom_records\x18\t \x03(\x0b\x32%.lnrpc.InvoiceHTLC.CustomRecordsEntry\x12\x1a\n\x12mpp_total_amt_msat\x18\n \x01(\x04\x12\x17\n\x03\x61mp\x18\x0b \x01(\x0b\x32\n.lnrpc.AMP\x1a\x34\n\x12\x43ustomRecordsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"^\n\x03\x41MP\x12\x12\n\nroot_share\x18\x01 \x01(\x0c\x12\x0e\n\x06set_id\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63hild_index\x18\x03 \x01(\r\x12\x0c\n\x04hash\x18\x04 \x01(\x0c\x12\x10\n\x08preimage\x18\x05 \x01(\x0c\"f\n\x12\x41\x64\x64InvoiceResponse\x12\x0e\n\x06r_hash\x18\x01 \x01(\x0c\x12\x17\n\x0fpayment_request\x18\x02 \x01(\t\x12\x11\n\tadd_index\x18\x10 \x01(\x04\x12\x14\n\x0cpayment_addr\x18\x11 \x01(\x0c\"5\n\x0bPaymentHash\x12\x16\n\nr_hash_str\x18\x01 \x01(\tB\x02\x18\x01\x12\x0e\n\x06r_hash\x18\x02 \x01(\x0c\"\xa4\x01\n\x12ListInvoiceRequest\x12\x14\n\x0cpending_only\x18\x01 \x01(\x08\x12\x14\n\x0cindex_offset\x18\x04 \x01(\x04\x12\x18\n\x10num_max_invoices\x18\x05 \x01(\x04\x12\x10\n\x08reversed\x18\x06 \x01(\x08\x12\x1b\n\x13\x63reation_date_start\x18\x07 \x01(\x04\x12\x19\n\x11\x63reation_date_end\x18\x08 \x01(\x04\"n\n\x13ListInvoiceResponse\x12 \n\x08invoices\x18\x01 \x03(\x0b\x32\x0e.lnrpc.Invoice\x12\x19\n\x11last_index_offset\x18\x02 \x01(\x04\x12\x1a\n\x12\x66irst_index_offset\x18\x03 \x01(\x04\">\n\x13InvoiceSubscription\x12\x11\n\tadd_index\x18\x01 \x01(\x04\x12\x14\n\x0csettle_index\x18\x02 \x01(\x04\"\xe0\x03\n\x07Payment\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\t\x12\x11\n\x05value\x18\x02 \x01(\x03\x42\x02\x18\x01\x12\x19\n\rcreation_date\x18\x03 \x01(\x03\x42\x02\x18\x01\x12\x0f\n\x03\x66\x65\x65\x18\x05 \x01(\x03\x42\x02\x18\x01\x12\x18\n\x10payment_preimage\x18\x06 \x01(\t\x12\x11\n\tvalue_sat\x18\x07 \x01(\x03\x12\x12\n\nvalue_msat\x18\x08 \x01(\x03\x12\x17\n\x0fpayment_request\x18\t \x01(\t\x12,\n\x06status\x18\n \x01(\x0e\x32\x1c.lnrpc.Payment.PaymentStatus\x12\x0f\n\x07\x66\x65\x65_sat\x18\x0b \x01(\x03\x12\x10\n\x08\x66\x65\x65_msat\x18\x0c \x01(\x03\x12\x18\n\x10\x63reation_time_ns\x18\r \x01(\x03\x12!\n\x05htlcs\x18\x0e \x03(\x0b\x32\x12.lnrpc.HTLCAttempt\x12\x15\n\rpayment_index\x18\x0f \x01(\x04\x12\x33\n\x0e\x66\x61ilure_reason\x18\x10 \x01(\x0e\x32\x1b.lnrpc.PaymentFailureReason\"F\n\rPaymentStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\r\n\tIN_FLIGHT\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03J\x04\x08\x04\x10\x05\"\x8a\x02\n\x0bHTLCAttempt\x12\x12\n\nattempt_id\x18\x07 \x01(\x04\x12-\n\x06status\x18\x01 \x01(\x0e\x32\x1d.lnrpc.HTLCAttempt.HTLCStatus\x12\x1b\n\x05route\x18\x02 \x01(\x0b\x32\x0c.lnrpc.Route\x12\x17\n\x0f\x61ttempt_time_ns\x18\x03 \x01(\x03\x12\x17\n\x0fresolve_time_ns\x18\x04 \x01(\x03\x12\x1f\n\x07\x66\x61ilure\x18\x05 \x01(\x0b\x32\x0e.lnrpc.Failure\x12\x10\n\x08preimage\x18\x06 \x01(\x0c\"6\n\nHTLCStatus\x12\r\n\tIN_FLIGHT\x10\x00\x12\r\n\tSUCCEEDED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"\xc5\x01\n\x13ListPaymentsRequest\x12\x1a\n\x12include_incomplete\x18\x01 \x01(\x08\x12\x14\n\x0cindex_offset\x18\x02 \x01(\x04\x12\x14\n\x0cmax_payments\x18\x03 \x01(\x04\x12\x10\n\x08reversed\x18\x04 \x01(\x08\x12\x1c\n\x14\x63ount_total_payments\x18\x05 \x01(\x08\x12\x1b\n\x13\x63reation_date_start\x18\x06 \x01(\x04\x12\x19\n\x11\x63reation_date_end\x18\x07 \x01(\x04\"\x8b\x01\n\x14ListPaymentsResponse\x12 \n\x08payments\x18\x01 \x03(\x0b\x32\x0e.lnrpc.Payment\x12\x1a\n\x12\x66irst_index_offset\x18\x02 \x01(\x04\x12\x19\n\x11last_index_offset\x18\x03 \x01(\x04\x12\x1a\n\x12total_num_payments\x18\x04 \x01(\x04\"G\n\x14\x44\x65letePaymentRequest\x12\x14\n\x0cpayment_hash\x18\x01 \x01(\x0c\x12\x19\n\x11\x66\x61iled_htlcs_only\x18\x02 \x01(\x08\"S\n\x18\x44\x65leteAllPaymentsRequest\x12\x1c\n\x14\x66\x61iled_payments_only\x18\x01 \x01(\x08\x12\x19\n\x11\x66\x61iled_htlcs_only\x18\x02 \x01(\x08\"\x17\n\x15\x44\x65letePaymentResponse\"\x1b\n\x19\x44\x65leteAllPaymentsResponse\"\x86\x01\n\x15\x41\x62\x61ndonChannelRequest\x12*\n\rchannel_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12!\n\x19pending_funding_shim_only\x18\x02 \x01(\x08\x12\x1e\n\x16i_know_what_i_am_doing\x18\x03 \x01(\x08\"\x18\n\x16\x41\x62\x61ndonChannelResponse\"5\n\x11\x44\x65\x62ugLevelRequest\x12\x0c\n\x04show\x18\x01 \x01(\x08\x12\x12\n\nlevel_spec\x18\x02 \x01(\t\")\n\x12\x44\x65\x62ugLevelResponse\x12\x13\n\x0bsub_systems\x18\x01 \x01(\t\"\x1f\n\x0cPayReqString\x12\x0f\n\x07pay_req\x18\x01 \x01(\t\"\x86\x03\n\x06PayReq\x12\x13\n\x0b\x64\x65stination\x18\x01 \x01(\t\x12\x14\n\x0cpayment_hash\x18\x02 \x01(\t\x12\x14\n\x0cnum_satoshis\x18\x03 \x01(\x03\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\x12\x0e\n\x06\x65xpiry\x18\x05 \x01(\x03\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x18\n\x10\x64\x65scription_hash\x18\x07 \x01(\t\x12\x15\n\rfallback_addr\x18\x08 \x01(\t\x12\x13\n\x0b\x63ltv_expiry\x18\t \x01(\x03\x12%\n\x0broute_hints\x18\n \x03(\x0b\x32\x10.lnrpc.RouteHint\x12\x14\n\x0cpayment_addr\x18\x0b \x01(\x0c\x12\x10\n\x08num_msat\x18\x0c \x01(\x03\x12-\n\x08\x66\x65\x61tures\x18\r \x03(\x0b\x32\x1b.lnrpc.PayReq.FeaturesEntry\x1a?\n\rFeaturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\x1d\n\x05value\x18\x02 \x01(\x0b\x32\x0e.lnrpc.Feature:\x02\x38\x01\">\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0bis_required\x18\x03 \x01(\x08\x12\x10\n\x08is_known\x18\x04 \x01(\x08\"\x12\n\x10\x46\x65\x65ReportRequest\"|\n\x10\x43hannelFeeReport\x12\x13\n\x07\x63han_id\x18\x05 \x01(\x04\x42\x02\x30\x01\x12\x15\n\rchannel_point\x18\x01 \x01(\t\x12\x15\n\rbase_fee_msat\x18\x02 \x01(\x03\x12\x13\n\x0b\x66\x65\x65_per_mil\x18\x03 \x01(\x03\x12\x10\n\x08\x66\x65\x65_rate\x18\x04 \x01(\x01\"\x84\x01\n\x11\x46\x65\x65ReportResponse\x12-\n\x0c\x63hannel_fees\x18\x01 \x03(\x0b\x32\x17.lnrpc.ChannelFeeReport\x12\x13\n\x0b\x64\x61y_fee_sum\x18\x02 \x01(\x04\x12\x14\n\x0cweek_fee_sum\x18\x03 \x01(\x04\x12\x15\n\rmonth_fee_sum\x18\x04 \x01(\x04\"\x82\x02\n\x13PolicyUpdateRequest\x12\x10\n\x06global\x18\x01 \x01(\x08H\x00\x12)\n\nchan_point\x18\x02 \x01(\x0b\x32\x13.lnrpc.ChannelPointH\x00\x12\x15\n\rbase_fee_msat\x18\x03 \x01(\x03\x12\x10\n\x08\x66\x65\x65_rate\x18\x04 \x01(\x01\x12\x14\n\x0c\x66\x65\x65_rate_ppm\x18\t \x01(\r\x12\x17\n\x0ftime_lock_delta\x18\x05 \x01(\r\x12\x15\n\rmax_htlc_msat\x18\x06 \x01(\x04\x12\x15\n\rmin_htlc_msat\x18\x07 \x01(\x04\x12\x1f\n\x17min_htlc_msat_specified\x18\x08 \x01(\x08\x42\x07\n\x05scope\"m\n\x0c\x46\x61iledUpdate\x12!\n\x08outpoint\x18\x01 \x01(\x0b\x32\x0f.lnrpc.OutPoint\x12$\n\x06reason\x18\x02 \x01(\x0e\x32\x14.lnrpc.UpdateFailure\x12\x14\n\x0cupdate_error\x18\x03 \x01(\t\"C\n\x14PolicyUpdateResponse\x12+\n\x0e\x66\x61iled_updates\x18\x01 \x03(\x0b\x32\x13.lnrpc.FailedUpdate\"\x89\x01\n\x18\x46orwardingHistoryRequest\x12\x12\n\nstart_time\x18\x01 \x01(\x04\x12\x10\n\x08\x65nd_time\x18\x02 \x01(\x04\x12\x14\n\x0cindex_offset\x18\x03 \x01(\r\x12\x16\n\x0enum_max_events\x18\x04 \x01(\r\x12\x19\n\x11peer_alias_lookup\x18\x05 \x01(\x08\"\x89\x02\n\x0f\x46orwardingEvent\x12\x15\n\ttimestamp\x18\x01 \x01(\x04\x42\x02\x18\x01\x12\x16\n\nchan_id_in\x18\x02 \x01(\x04\x42\x02\x30\x01\x12\x17\n\x0b\x63han_id_out\x18\x04 \x01(\x04\x42\x02\x30\x01\x12\x0e\n\x06\x61mt_in\x18\x05 \x01(\x04\x12\x0f\n\x07\x61mt_out\x18\x06 \x01(\x04\x12\x0b\n\x03\x66\x65\x65\x18\x07 \x01(\x04\x12\x10\n\x08\x66\x65\x65_msat\x18\x08 \x01(\x04\x12\x13\n\x0b\x61mt_in_msat\x18\t \x01(\x04\x12\x14\n\x0c\x61mt_out_msat\x18\n \x01(\x04\x12\x14\n\x0ctimestamp_ns\x18\x0b \x01(\x04\x12\x15\n\rpeer_alias_in\x18\x0c \x01(\t\x12\x16\n\x0epeer_alias_out\x18\r \x01(\t\"i\n\x19\x46orwardingHistoryResponse\x12\x31\n\x11\x66orwarding_events\x18\x01 \x03(\x0b\x32\x16.lnrpc.ForwardingEvent\x12\x19\n\x11last_offset_index\x18\x02 \x01(\r\"E\n\x1a\x45xportChannelBackupRequest\x12\'\n\nchan_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\"M\n\rChannelBackup\x12\'\n\nchan_point\x18\x01 \x01(\x0b\x32\x13.lnrpc.ChannelPoint\x12\x13\n\x0b\x63han_backup\x18\x02 \x01(\x0c\"V\n\x0fMultiChanBackup\x12(\n\x0b\x63han_points\x18\x01 \x03(\x0b\x32\x13.lnrpc.ChannelPoint\x12\x19\n\x11multi_chan_backup\x18\x02 \x01(\x0c\"\x19\n\x17\x43hanBackupExportRequest\"{\n\x12\x43hanBackupSnapshot\x12\x32\n\x13single_chan_backups\x18\x01 \x01(\x0b\x32\x15.lnrpc.ChannelBackups\x12\x31\n\x11multi_chan_backup\x18\x02 \x01(\x0b\x32\x16.lnrpc.MultiChanBackup\"<\n\x0e\x43hannelBackups\x12*\n\x0c\x63han_backups\x18\x01 \x03(\x0b\x32\x14.lnrpc.ChannelBackup\"p\n\x18RestoreChanBackupRequest\x12-\n\x0c\x63han_backups\x18\x01 \x01(\x0b\x32\x15.lnrpc.ChannelBackupsH\x00\x12\x1b\n\x11multi_chan_backup\x18\x02 \x01(\x0cH\x00\x42\x08\n\x06\x62\x61\x63kup\"\x17\n\x15RestoreBackupResponse\"\x1b\n\x19\x43hannelBackupSubscription\"\x1a\n\x18VerifyChanBackupResponse\"4\n\x12MacaroonPermission\x12\x0e\n\x06\x65ntity\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\"~\n\x13\x42\x61keMacaroonRequest\x12.\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x19.lnrpc.MacaroonPermission\x12\x13\n\x0broot_key_id\x18\x02 \x01(\x04\x12\"\n\x1a\x61llow_external_permissions\x18\x03 \x01(\x08\"(\n\x14\x42\x61keMacaroonResponse\x12\x10\n\x08macaroon\x18\x01 \x01(\t\"\x18\n\x16ListMacaroonIDsRequest\"/\n\x17ListMacaroonIDsResponse\x12\x14\n\x0croot_key_ids\x18\x01 \x03(\x04\".\n\x17\x44\x65leteMacaroonIDRequest\x12\x13\n\x0broot_key_id\x18\x01 \x01(\x04\"+\n\x18\x44\x65leteMacaroonIDResponse\x12\x0f\n\x07\x64\x65leted\x18\x01 \x01(\x08\"H\n\x16MacaroonPermissionList\x12.\n\x0bpermissions\x18\x01 \x03(\x0b\x32\x19.lnrpc.MacaroonPermission\"\x18\n\x16ListPermissionsRequest\"\xc5\x01\n\x17ListPermissionsResponse\x12Q\n\x12method_permissions\x18\x01 \x03(\x0b\x32\x35.lnrpc.ListPermissionsResponse.MethodPermissionsEntry\x1aW\n\x16MethodPermissionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.lnrpc.MacaroonPermissionList:\x02\x38\x01\"\xd5\x07\n\x07\x46\x61ilure\x12(\n\x04\x63ode\x18\x01 \x01(\x0e\x32\x1a.lnrpc.Failure.FailureCode\x12,\n\x0e\x63hannel_update\x18\x03 \x01(\x0b\x32\x14.lnrpc.ChannelUpdate\x12\x11\n\thtlc_msat\x18\x04 \x01(\x04\x12\x15\n\ronion_sha_256\x18\x05 \x01(\x0c\x12\x13\n\x0b\x63ltv_expiry\x18\x06 \x01(\r\x12\r\n\x05\x66lags\x18\x07 \x01(\r\x12\x1c\n\x14\x66\x61ilure_source_index\x18\x08 \x01(\r\x12\x0e\n\x06height\x18\t \x01(\r\"\xef\x05\n\x0b\x46\x61ilureCode\x12\x0c\n\x08RESERVED\x10\x00\x12(\n$INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS\x10\x01\x12\x1c\n\x18INCORRECT_PAYMENT_AMOUNT\x10\x02\x12\x1f\n\x1b\x46INAL_INCORRECT_CLTV_EXPIRY\x10\x03\x12\x1f\n\x1b\x46INAL_INCORRECT_HTLC_AMOUNT\x10\x04\x12\x19\n\x15\x46INAL_EXPIRY_TOO_SOON\x10\x05\x12\x11\n\rINVALID_REALM\x10\x06\x12\x13\n\x0f\x45XPIRY_TOO_SOON\x10\x07\x12\x19\n\x15INVALID_ONION_VERSION\x10\x08\x12\x16\n\x12INVALID_ONION_HMAC\x10\t\x12\x15\n\x11INVALID_ONION_KEY\x10\n\x12\x18\n\x14\x41MOUNT_BELOW_MINIMUM\x10\x0b\x12\x14\n\x10\x46\x45\x45_INSUFFICIENT\x10\x0c\x12\x19\n\x15INCORRECT_CLTV_EXPIRY\x10\r\x12\x14\n\x10\x43HANNEL_DISABLED\x10\x0e\x12\x1d\n\x19TEMPORARY_CHANNEL_FAILURE\x10\x0f\x12!\n\x1dREQUIRED_NODE_FEATURE_MISSING\x10\x10\x12$\n REQUIRED_CHANNEL_FEATURE_MISSING\x10\x11\x12\x15\n\x11UNKNOWN_NEXT_PEER\x10\x12\x12\x1a\n\x16TEMPORARY_NODE_FAILURE\x10\x13\x12\x1a\n\x16PERMANENT_NODE_FAILURE\x10\x14\x12\x1d\n\x19PERMANENT_CHANNEL_FAILURE\x10\x15\x12\x12\n\x0e\x45XPIRY_TOO_FAR\x10\x16\x12\x0f\n\x0bMPP_TIMEOUT\x10\x17\x12\x19\n\x15INVALID_ONION_PAYLOAD\x10\x18\x12\x15\n\x10INTERNAL_FAILURE\x10\xe5\x07\x12\x14\n\x0fUNKNOWN_FAILURE\x10\xe6\x07\x12\x17\n\x12UNREADABLE_FAILURE\x10\xe7\x07J\x04\x08\x02\x10\x03\"\x9a\x02\n\rChannelUpdate\x12\x11\n\tsignature\x18\x01 \x01(\x0c\x12\x12\n\nchain_hash\x18\x02 \x01(\x0c\x12\x13\n\x07\x63han_id\x18\x03 \x01(\x04\x42\x02\x30\x01\x12\x11\n\ttimestamp\x18\x04 \x01(\r\x12\x15\n\rmessage_flags\x18\n \x01(\r\x12\x15\n\rchannel_flags\x18\x05 \x01(\r\x12\x17\n\x0ftime_lock_delta\x18\x06 \x01(\r\x12\x19\n\x11htlc_minimum_msat\x18\x07 \x01(\x04\x12\x10\n\x08\x62\x61se_fee\x18\x08 \x01(\r\x12\x10\n\x08\x66\x65\x65_rate\x18\t \x01(\r\x12\x19\n\x11htlc_maximum_msat\x18\x0b \x01(\x04\x12\x19\n\x11\x65xtra_opaque_data\x18\x0c \x01(\x0c\"F\n\nMacaroonId\x12\r\n\x05nonce\x18\x01 \x01(\x0c\x12\x11\n\tstorageId\x18\x02 \x01(\x0c\x12\x16\n\x03ops\x18\x03 \x03(\x0b\x32\t.lnrpc.Op\"%\n\x02Op\x12\x0e\n\x06\x65ntity\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x63tions\x18\x02 \x03(\t\"k\n\x13\x43heckMacPermRequest\x12\x10\n\x08macaroon\x18\x01 \x01(\x0c\x12.\n\x0bpermissions\x18\x02 \x03(\x0b\x32\x19.lnrpc.MacaroonPermission\x12\x12\n\nfullMethod\x18\x03 \x01(\t\"%\n\x14\x43heckMacPermResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\x92\x02\n\x14RPCMiddlewareRequest\x12\x12\n\nrequest_id\x18\x01 \x01(\x04\x12\x14\n\x0craw_macaroon\x18\x02 \x01(\x0c\x12\x1f\n\x17\x63ustom_caveat_condition\x18\x03 \x01(\t\x12(\n\x0bstream_auth\x18\x04 \x01(\x0b\x32\x11.lnrpc.StreamAuthH\x00\x12$\n\x07request\x18\x05 \x01(\x0b\x32\x11.lnrpc.RPCMessageH\x00\x12%\n\x08response\x18\x06 \x01(\x0b\x32\x11.lnrpc.RPCMessageH\x00\x12\x16\n\x0creg_complete\x18\x08 \x01(\x08H\x00\x12\x0e\n\x06msg_id\x18\x07 \x01(\x04\x42\x10\n\x0eintercept_type\"%\n\nStreamAuth\x12\x17\n\x0fmethod_full_uri\x18\x01 \x01(\t\"r\n\nRPCMessage\x12\x17\n\x0fmethod_full_uri\x18\x01 \x01(\t\x12\x12\n\nstream_rpc\x18\x02 \x01(\x08\x12\x11\n\ttype_name\x18\x03 \x01(\t\x12\x12\n\nserialized\x18\x04 \x01(\x0c\x12\x10\n\x08is_error\x18\x05 \x01(\x08\"\xa2\x01\n\x15RPCMiddlewareResponse\x12\x12\n\nref_msg_id\x18\x01 \x01(\x04\x12\x31\n\x08register\x18\x02 \x01(\x0b\x32\x1d.lnrpc.MiddlewareRegistrationH\x00\x12,\n\x08\x66\x65\x65\x64\x62\x61\x63k\x18\x03 \x01(\x0b\x32\x18.lnrpc.InterceptFeedbackH\x00\x42\x14\n\x12middleware_message\"n\n\x16MiddlewareRegistration\x12\x17\n\x0fmiddleware_name\x18\x01 \x01(\t\x12#\n\x1b\x63ustom_macaroon_caveat_name\x18\x02 \x01(\t\x12\x16\n\x0eread_only_mode\x18\x03 \x01(\x08\"\\\n\x11InterceptFeedback\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x18\n\x10replace_response\x18\x02 \x01(\x08\x12\x1e\n\x16replacement_serialized\x18\x03 \x01(\x0c*\xcb\x02\n\x10OutputScriptType\x12\x1b\n\x17SCRIPT_TYPE_PUBKEY_HASH\x10\x00\x12\x1b\n\x17SCRIPT_TYPE_SCRIPT_HASH\x10\x01\x12&\n\"SCRIPT_TYPE_WITNESS_V0_PUBKEY_HASH\x10\x02\x12&\n\"SCRIPT_TYPE_WITNESS_V0_SCRIPT_HASH\x10\x03\x12\x16\n\x12SCRIPT_TYPE_PUBKEY\x10\x04\x12\x18\n\x14SCRIPT_TYPE_MULTISIG\x10\x05\x12\x18\n\x14SCRIPT_TYPE_NULLDATA\x10\x06\x12\x1c\n\x18SCRIPT_TYPE_NON_STANDARD\x10\x07\x12\x1f\n\x1bSCRIPT_TYPE_WITNESS_UNKNOWN\x10\x08\x12\"\n\x1eSCRIPT_TYPE_WITNESS_V1_TAPROOT\x10\t*\xac\x01\n\x0b\x41\x64\x64ressType\x12\x17\n\x13WITNESS_PUBKEY_HASH\x10\x00\x12\x16\n\x12NESTED_PUBKEY_HASH\x10\x01\x12\x1e\n\x1aUNUSED_WITNESS_PUBKEY_HASH\x10\x02\x12\x1d\n\x19UNUSED_NESTED_PUBKEY_HASH\x10\x03\x12\x12\n\x0eTAPROOT_PUBKEY\x10\x04\x12\x19\n\x15UNUSED_TAPROOT_PUBKEY\x10\x05*x\n\x0e\x43ommitmentType\x12\x1b\n\x17UNKNOWN_COMMITMENT_TYPE\x10\x00\x12\n\n\x06LEGACY\x10\x01\x12\x15\n\x11STATIC_REMOTE_KEY\x10\x02\x12\x0b\n\x07\x41NCHORS\x10\x03\x12\x19\n\x15SCRIPT_ENFORCED_LEASE\x10\x04*a\n\tInitiator\x12\x15\n\x11INITIATOR_UNKNOWN\x10\x00\x12\x13\n\x0fINITIATOR_LOCAL\x10\x01\x12\x14\n\x10INITIATOR_REMOTE\x10\x02\x12\x12\n\x0eINITIATOR_BOTH\x10\x03*`\n\x0eResolutionType\x12\x10\n\x0cTYPE_UNKNOWN\x10\x00\x12\n\n\x06\x41NCHOR\x10\x01\x12\x11\n\rINCOMING_HTLC\x10\x02\x12\x11\n\rOUTGOING_HTLC\x10\x03\x12\n\n\x06\x43OMMIT\x10\x04*q\n\x11ResolutionOutcome\x12\x13\n\x0fOUTCOME_UNKNOWN\x10\x00\x12\x0b\n\x07\x43LAIMED\x10\x01\x12\r\n\tUNCLAIMED\x10\x02\x12\r\n\tABANDONED\x10\x03\x12\x0f\n\x0b\x46IRST_STAGE\x10\x04\x12\x0b\n\x07TIMEOUT\x10\x05*9\n\x0eNodeMetricType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x1a\n\x16\x42\x45TWEENNESS_CENTRALITY\x10\x01*;\n\x10InvoiceHTLCState\x12\x0c\n\x08\x41\x43\x43\x45PTED\x10\x00\x12\x0b\n\x07SETTLED\x10\x01\x12\x0c\n\x08\x43\x41NCELED\x10\x02*\xd9\x01\n\x14PaymentFailureReason\x12\x17\n\x13\x46\x41ILURE_REASON_NONE\x10\x00\x12\x1a\n\x16\x46\x41ILURE_REASON_TIMEOUT\x10\x01\x12\x1b\n\x17\x46\x41ILURE_REASON_NO_ROUTE\x10\x02\x12\x18\n\x14\x46\x41ILURE_REASON_ERROR\x10\x03\x12,\n(FAILURE_REASON_INCORRECT_PAYMENT_DETAILS\x10\x04\x12\'\n#FAILURE_REASON_INSUFFICIENT_BALANCE\x10\x05*\xcf\x04\n\nFeatureBit\x12\x18\n\x14\x44\x41TALOSS_PROTECT_REQ\x10\x00\x12\x18\n\x14\x44\x41TALOSS_PROTECT_OPT\x10\x01\x12\x17\n\x13INITIAL_ROUING_SYNC\x10\x03\x12\x1f\n\x1bUPFRONT_SHUTDOWN_SCRIPT_REQ\x10\x04\x12\x1f\n\x1bUPFRONT_SHUTDOWN_SCRIPT_OPT\x10\x05\x12\x16\n\x12GOSSIP_QUERIES_REQ\x10\x06\x12\x16\n\x12GOSSIP_QUERIES_OPT\x10\x07\x12\x11\n\rTLV_ONION_REQ\x10\x08\x12\x11\n\rTLV_ONION_OPT\x10\t\x12\x1a\n\x16\x45XT_GOSSIP_QUERIES_REQ\x10\n\x12\x1a\n\x16\x45XT_GOSSIP_QUERIES_OPT\x10\x0b\x12\x19\n\x15STATIC_REMOTE_KEY_REQ\x10\x0c\x12\x19\n\x15STATIC_REMOTE_KEY_OPT\x10\r\x12\x14\n\x10PAYMENT_ADDR_REQ\x10\x0e\x12\x14\n\x10PAYMENT_ADDR_OPT\x10\x0f\x12\x0b\n\x07MPP_REQ\x10\x10\x12\x0b\n\x07MPP_OPT\x10\x11\x12\x16\n\x12WUMBO_CHANNELS_REQ\x10\x12\x12\x16\n\x12WUMBO_CHANNELS_OPT\x10\x13\x12\x0f\n\x0b\x41NCHORS_REQ\x10\x14\x12\x0f\n\x0b\x41NCHORS_OPT\x10\x15\x12\x1d\n\x19\x41NCHORS_ZERO_FEE_HTLC_REQ\x10\x16\x12\x1d\n\x19\x41NCHORS_ZERO_FEE_HTLC_OPT\x10\x17\x12\x0b\n\x07\x41MP_REQ\x10\x1e\x12\x0b\n\x07\x41MP_OPT\x10\x1f*\xac\x01\n\rUpdateFailure\x12\x1a\n\x16UPDATE_FAILURE_UNKNOWN\x10\x00\x12\x1a\n\x16UPDATE_FAILURE_PENDING\x10\x01\x12\x1c\n\x18UPDATE_FAILURE_NOT_FOUND\x10\x02\x12\x1f\n\x1bUPDATE_FAILURE_INTERNAL_ERR\x10\x03\x12$\n UPDATE_FAILURE_INVALID_PARAMETER\x10\x04\x32\xf0&\n\tLightning\x12J\n\rWalletBalance\x12\x1b.lnrpc.WalletBalanceRequest\x1a\x1c.lnrpc.WalletBalanceResponse\x12M\n\x0e\x43hannelBalance\x12\x1c.lnrpc.ChannelBalanceRequest\x1a\x1d.lnrpc.ChannelBalanceResponse\x12K\n\x0fGetTransactions\x12\x1d.lnrpc.GetTransactionsRequest\x1a\x19.lnrpc.TransactionDetails\x12\x44\n\x0b\x45stimateFee\x12\x19.lnrpc.EstimateFeeRequest\x1a\x1a.lnrpc.EstimateFeeResponse\x12>\n\tSendCoins\x12\x17.lnrpc.SendCoinsRequest\x1a\x18.lnrpc.SendCoinsResponse\x12\x44\n\x0bListUnspent\x12\x19.lnrpc.ListUnspentRequest\x1a\x1a.lnrpc.ListUnspentResponse\x12L\n\x15SubscribeTransactions\x12\x1d.lnrpc.GetTransactionsRequest\x1a\x12.lnrpc.Transaction0\x01\x12;\n\x08SendMany\x12\x16.lnrpc.SendManyRequest\x1a\x17.lnrpc.SendManyResponse\x12\x41\n\nNewAddress\x12\x18.lnrpc.NewAddressRequest\x1a\x19.lnrpc.NewAddressResponse\x12\x44\n\x0bSignMessage\x12\x19.lnrpc.SignMessageRequest\x1a\x1a.lnrpc.SignMessageResponse\x12J\n\rVerifyMessage\x12\x1b.lnrpc.VerifyMessageRequest\x1a\x1c.lnrpc.VerifyMessageResponse\x12\x44\n\x0b\x43onnectPeer\x12\x19.lnrpc.ConnectPeerRequest\x1a\x1a.lnrpc.ConnectPeerResponse\x12M\n\x0e\x44isconnectPeer\x12\x1c.lnrpc.DisconnectPeerRequest\x1a\x1d.lnrpc.DisconnectPeerResponse\x12>\n\tListPeers\x12\x17.lnrpc.ListPeersRequest\x1a\x18.lnrpc.ListPeersResponse\x12G\n\x13SubscribePeerEvents\x12\x1c.lnrpc.PeerEventSubscription\x1a\x10.lnrpc.PeerEvent0\x01\x12\x38\n\x07GetInfo\x12\x15.lnrpc.GetInfoRequest\x1a\x16.lnrpc.GetInfoResponse\x12P\n\x0fGetRecoveryInfo\x12\x1d.lnrpc.GetRecoveryInfoRequest\x1a\x1e.lnrpc.GetRecoveryInfoResponse\x12P\n\x0fPendingChannels\x12\x1d.lnrpc.PendingChannelsRequest\x1a\x1e.lnrpc.PendingChannelsResponse\x12G\n\x0cListChannels\x12\x1a.lnrpc.ListChannelsRequest\x1a\x1b.lnrpc.ListChannelsResponse\x12V\n\x16SubscribeChannelEvents\x12\x1f.lnrpc.ChannelEventSubscription\x1a\x19.lnrpc.ChannelEventUpdate0\x01\x12M\n\x0e\x43losedChannels\x12\x1c.lnrpc.ClosedChannelsRequest\x1a\x1d.lnrpc.ClosedChannelsResponse\x12\x41\n\x0fOpenChannelSync\x12\x19.lnrpc.OpenChannelRequest\x1a\x13.lnrpc.ChannelPoint\x12\x43\n\x0bOpenChannel\x12\x19.lnrpc.OpenChannelRequest\x1a\x17.lnrpc.OpenStatusUpdate0\x01\x12S\n\x10\x42\x61tchOpenChannel\x12\x1e.lnrpc.BatchOpenChannelRequest\x1a\x1f.lnrpc.BatchOpenChannelResponse\x12L\n\x10\x46undingStateStep\x12\x1b.lnrpc.FundingTransitionMsg\x1a\x1b.lnrpc.FundingStateStepResp\x12P\n\x0f\x43hannelAcceptor\x12\x1c.lnrpc.ChannelAcceptResponse\x1a\x1b.lnrpc.ChannelAcceptRequest(\x01\x30\x01\x12\x46\n\x0c\x43loseChannel\x12\x1a.lnrpc.CloseChannelRequest\x1a\x18.lnrpc.CloseStatusUpdate0\x01\x12M\n\x0e\x41\x62\x61ndonChannel\x12\x1c.lnrpc.AbandonChannelRequest\x1a\x1d.lnrpc.AbandonChannelResponse\x12?\n\x0bSendPayment\x12\x12.lnrpc.SendRequest\x1a\x13.lnrpc.SendResponse\"\x03\x88\x02\x01(\x01\x30\x01\x12:\n\x0fSendPaymentSync\x12\x12.lnrpc.SendRequest\x1a\x13.lnrpc.SendResponse\x12\x46\n\x0bSendToRoute\x12\x19.lnrpc.SendToRouteRequest\x1a\x13.lnrpc.SendResponse\"\x03\x88\x02\x01(\x01\x30\x01\x12\x41\n\x0fSendToRouteSync\x12\x19.lnrpc.SendToRouteRequest\x1a\x13.lnrpc.SendResponse\x12\x37\n\nAddInvoice\x12\x0e.lnrpc.Invoice\x1a\x19.lnrpc.AddInvoiceResponse\x12\x45\n\x0cListInvoices\x12\x19.lnrpc.ListInvoiceRequest\x1a\x1a.lnrpc.ListInvoiceResponse\x12\x33\n\rLookupInvoice\x12\x12.lnrpc.PaymentHash\x1a\x0e.lnrpc.Invoice\x12\x41\n\x11SubscribeInvoices\x12\x1a.lnrpc.InvoiceSubscription\x1a\x0e.lnrpc.Invoice0\x01\x12\x32\n\x0c\x44\x65\x63odePayReq\x12\x13.lnrpc.PayReqString\x1a\r.lnrpc.PayReq\x12G\n\x0cListPayments\x12\x1a.lnrpc.ListPaymentsRequest\x1a\x1b.lnrpc.ListPaymentsResponse\x12J\n\rDeletePayment\x12\x1b.lnrpc.DeletePaymentRequest\x1a\x1c.lnrpc.DeletePaymentResponse\x12V\n\x11\x44\x65leteAllPayments\x12\x1f.lnrpc.DeleteAllPaymentsRequest\x1a .lnrpc.DeleteAllPaymentsResponse\x12@\n\rDescribeGraph\x12\x1a.lnrpc.ChannelGraphRequest\x1a\x13.lnrpc.ChannelGraph\x12G\n\x0eGetNodeMetrics\x12\x19.lnrpc.NodeMetricsRequest\x1a\x1a.lnrpc.NodeMetricsResponse\x12\x39\n\x0bGetChanInfo\x12\x16.lnrpc.ChanInfoRequest\x1a\x12.lnrpc.ChannelEdge\x12\x36\n\x0bGetNodeInfo\x12\x16.lnrpc.NodeInfoRequest\x1a\x0f.lnrpc.NodeInfo\x12\x44\n\x0bQueryRoutes\x12\x19.lnrpc.QueryRoutesRequest\x1a\x1a.lnrpc.QueryRoutesResponse\x12?\n\x0eGetNetworkInfo\x12\x19.lnrpc.NetworkInfoRequest\x1a\x12.lnrpc.NetworkInfo\x12\x35\n\nStopDaemon\x12\x12.lnrpc.StopRequest\x1a\x13.lnrpc.StopResponse\x12W\n\x15SubscribeChannelGraph\x12 .lnrpc.GraphTopologySubscription\x1a\x1a.lnrpc.GraphTopologyUpdate0\x01\x12\x41\n\nDebugLevel\x12\x18.lnrpc.DebugLevelRequest\x1a\x19.lnrpc.DebugLevelResponse\x12>\n\tFeeReport\x12\x17.lnrpc.FeeReportRequest\x1a\x18.lnrpc.FeeReportResponse\x12N\n\x13UpdateChannelPolicy\x12\x1a.lnrpc.PolicyUpdateRequest\x1a\x1b.lnrpc.PolicyUpdateResponse\x12V\n\x11\x46orwardingHistory\x12\x1f.lnrpc.ForwardingHistoryRequest\x1a .lnrpc.ForwardingHistoryResponse\x12N\n\x13\x45xportChannelBackup\x12!.lnrpc.ExportChannelBackupRequest\x1a\x14.lnrpc.ChannelBackup\x12T\n\x17\x45xportAllChannelBackups\x12\x1e.lnrpc.ChanBackupExportRequest\x1a\x19.lnrpc.ChanBackupSnapshot\x12N\n\x10VerifyChanBackup\x12\x19.lnrpc.ChanBackupSnapshot\x1a\x1f.lnrpc.VerifyChanBackupResponse\x12V\n\x15RestoreChannelBackups\x12\x1f.lnrpc.RestoreChanBackupRequest\x1a\x1c.lnrpc.RestoreBackupResponse\x12X\n\x17SubscribeChannelBackups\x12 .lnrpc.ChannelBackupSubscription\x1a\x19.lnrpc.ChanBackupSnapshot0\x01\x12G\n\x0c\x42\x61keMacaroon\x12\x1a.lnrpc.BakeMacaroonRequest\x1a\x1b.lnrpc.BakeMacaroonResponse\x12P\n\x0fListMacaroonIDs\x12\x1d.lnrpc.ListMacaroonIDsRequest\x1a\x1e.lnrpc.ListMacaroonIDsResponse\x12S\n\x10\x44\x65leteMacaroonID\x12\x1e.lnrpc.DeleteMacaroonIDRequest\x1a\x1f.lnrpc.DeleteMacaroonIDResponse\x12P\n\x0fListPermissions\x12\x1d.lnrpc.ListPermissionsRequest\x1a\x1e.lnrpc.ListPermissionsResponse\x12S\n\x18\x43heckMacaroonPermissions\x12\x1a.lnrpc.CheckMacPermRequest\x1a\x1b.lnrpc.CheckMacPermResponse\x12V\n\x15RegisterRPCMiddleware\x12\x1c.lnrpc.RPCMiddlewareResponse\x1a\x1b.lnrpc.RPCMiddlewareRequest(\x01\x30\x01\x12V\n\x11SendCustomMessage\x12\x1f.lnrpc.SendCustomMessageRequest\x1a .lnrpc.SendCustomMessageResponse\x12X\n\x17SubscribeCustomMessages\x12%.lnrpc.SubscribeCustomMessagesRequest\x1a\x14.lnrpc.CustomMessage0\x01\x12\x44\n\x0bListAliases\x12\x19.lnrpc.ListAliasesRequest\x1a\x1a.lnrpc.ListAliasesResponse\x12_\n\x14LookupHtlcResolution\x12\".lnrpc.LookupHtlcResolutionRequest\x1a#.lnrpc.LookupHtlcResolutionResponseB\'Z%github.com/lightningnetwork/lnd/lnrpcb\x06proto3') -_OUTPUTSCRIPTTYPE = DESCRIPTOR.enum_types_by_name['OutputScriptType'] -OutputScriptType = enum_type_wrapper.EnumTypeWrapper(_OUTPUTSCRIPTTYPE) -_ADDRESSTYPE = DESCRIPTOR.enum_types_by_name['AddressType'] -AddressType = enum_type_wrapper.EnumTypeWrapper(_ADDRESSTYPE) -_COMMITMENTTYPE = DESCRIPTOR.enum_types_by_name['CommitmentType'] -CommitmentType = enum_type_wrapper.EnumTypeWrapper(_COMMITMENTTYPE) -_INITIATOR = DESCRIPTOR.enum_types_by_name['Initiator'] -Initiator = enum_type_wrapper.EnumTypeWrapper(_INITIATOR) -_RESOLUTIONTYPE = DESCRIPTOR.enum_types_by_name['ResolutionType'] -ResolutionType = enum_type_wrapper.EnumTypeWrapper(_RESOLUTIONTYPE) -_RESOLUTIONOUTCOME = DESCRIPTOR.enum_types_by_name['ResolutionOutcome'] -ResolutionOutcome = enum_type_wrapper.EnumTypeWrapper(_RESOLUTIONOUTCOME) -_NODEMETRICTYPE = DESCRIPTOR.enum_types_by_name['NodeMetricType'] -NodeMetricType = enum_type_wrapper.EnumTypeWrapper(_NODEMETRICTYPE) -_INVOICEHTLCSTATE = DESCRIPTOR.enum_types_by_name['InvoiceHTLCState'] -InvoiceHTLCState = enum_type_wrapper.EnumTypeWrapper(_INVOICEHTLCSTATE) -_PAYMENTFAILUREREASON = DESCRIPTOR.enum_types_by_name['PaymentFailureReason'] -PaymentFailureReason = enum_type_wrapper.EnumTypeWrapper(_PAYMENTFAILUREREASON) -_FEATUREBIT = DESCRIPTOR.enum_types_by_name['FeatureBit'] -FeatureBit = enum_type_wrapper.EnumTypeWrapper(_FEATUREBIT) -_UPDATEFAILURE = DESCRIPTOR.enum_types_by_name['UpdateFailure'] -UpdateFailure = enum_type_wrapper.EnumTypeWrapper(_UPDATEFAILURE) -SCRIPT_TYPE_PUBKEY_HASH = 0 -SCRIPT_TYPE_SCRIPT_HASH = 1 -SCRIPT_TYPE_WITNESS_V0_PUBKEY_HASH = 2 -SCRIPT_TYPE_WITNESS_V0_SCRIPT_HASH = 3 -SCRIPT_TYPE_PUBKEY = 4 -SCRIPT_TYPE_MULTISIG = 5 -SCRIPT_TYPE_NULLDATA = 6 -SCRIPT_TYPE_NON_STANDARD = 7 -SCRIPT_TYPE_WITNESS_UNKNOWN = 8 -WITNESS_PUBKEY_HASH = 0 -NESTED_PUBKEY_HASH = 1 -UNUSED_WITNESS_PUBKEY_HASH = 2 -UNUSED_NESTED_PUBKEY_HASH = 3 -TAPROOT_PUBKEY = 4 -UNUSED_TAPROOT_PUBKEY = 5 -UNKNOWN_COMMITMENT_TYPE = 0 -LEGACY = 1 -STATIC_REMOTE_KEY = 2 -ANCHORS = 3 -SCRIPT_ENFORCED_LEASE = 4 -INITIATOR_UNKNOWN = 0 -INITIATOR_LOCAL = 1 -INITIATOR_REMOTE = 2 -INITIATOR_BOTH = 3 -TYPE_UNKNOWN = 0 -ANCHOR = 1 -INCOMING_HTLC = 2 -OUTGOING_HTLC = 3 -COMMIT = 4 -OUTCOME_UNKNOWN = 0 -CLAIMED = 1 -UNCLAIMED = 2 -ABANDONED = 3 -FIRST_STAGE = 4 -TIMEOUT = 5 -UNKNOWN = 0 -BETWEENNESS_CENTRALITY = 1 -ACCEPTED = 0 -SETTLED = 1 -CANCELED = 2 -FAILURE_REASON_NONE = 0 -FAILURE_REASON_TIMEOUT = 1 -FAILURE_REASON_NO_ROUTE = 2 -FAILURE_REASON_ERROR = 3 -FAILURE_REASON_INCORRECT_PAYMENT_DETAILS = 4 -FAILURE_REASON_INSUFFICIENT_BALANCE = 5 -DATALOSS_PROTECT_REQ = 0 -DATALOSS_PROTECT_OPT = 1 -INITIAL_ROUING_SYNC = 3 -UPFRONT_SHUTDOWN_SCRIPT_REQ = 4 -UPFRONT_SHUTDOWN_SCRIPT_OPT = 5 -GOSSIP_QUERIES_REQ = 6 -GOSSIP_QUERIES_OPT = 7 -TLV_ONION_REQ = 8 -TLV_ONION_OPT = 9 -EXT_GOSSIP_QUERIES_REQ = 10 -EXT_GOSSIP_QUERIES_OPT = 11 -STATIC_REMOTE_KEY_REQ = 12 -STATIC_REMOTE_KEY_OPT = 13 -PAYMENT_ADDR_REQ = 14 -PAYMENT_ADDR_OPT = 15 -MPP_REQ = 16 -MPP_OPT = 17 -WUMBO_CHANNELS_REQ = 18 -WUMBO_CHANNELS_OPT = 19 -ANCHORS_REQ = 20 -ANCHORS_OPT = 21 -ANCHORS_ZERO_FEE_HTLC_REQ = 22 -ANCHORS_ZERO_FEE_HTLC_OPT = 23 -AMP_REQ = 30 -AMP_OPT = 31 -UPDATE_FAILURE_UNKNOWN = 0 -UPDATE_FAILURE_PENDING = 1 -UPDATE_FAILURE_NOT_FOUND = 2 -UPDATE_FAILURE_INTERNAL_ERR = 3 -UPDATE_FAILURE_INVALID_PARAMETER = 4 - - -_SUBSCRIBECUSTOMMESSAGESREQUEST = DESCRIPTOR.message_types_by_name['SubscribeCustomMessagesRequest'] -_CUSTOMMESSAGE = DESCRIPTOR.message_types_by_name['CustomMessage'] -_SENDCUSTOMMESSAGEREQUEST = DESCRIPTOR.message_types_by_name['SendCustomMessageRequest'] -_SENDCUSTOMMESSAGERESPONSE = DESCRIPTOR.message_types_by_name['SendCustomMessageResponse'] -_UTXO = DESCRIPTOR.message_types_by_name['Utxo'] -_OUTPUTDETAIL = DESCRIPTOR.message_types_by_name['OutputDetail'] -_TRANSACTION = DESCRIPTOR.message_types_by_name['Transaction'] -_GETTRANSACTIONSREQUEST = DESCRIPTOR.message_types_by_name['GetTransactionsRequest'] -_TRANSACTIONDETAILS = DESCRIPTOR.message_types_by_name['TransactionDetails'] -_FEELIMIT = DESCRIPTOR.message_types_by_name['FeeLimit'] -_SENDREQUEST = DESCRIPTOR.message_types_by_name['SendRequest'] -_SENDREQUEST_DESTCUSTOMRECORDSENTRY = _SENDREQUEST.nested_types_by_name['DestCustomRecordsEntry'] -_SENDRESPONSE = DESCRIPTOR.message_types_by_name['SendResponse'] -_SENDTOROUTEREQUEST = DESCRIPTOR.message_types_by_name['SendToRouteRequest'] -_CHANNELACCEPTREQUEST = DESCRIPTOR.message_types_by_name['ChannelAcceptRequest'] -_CHANNELACCEPTRESPONSE = DESCRIPTOR.message_types_by_name['ChannelAcceptResponse'] -_CHANNELPOINT = DESCRIPTOR.message_types_by_name['ChannelPoint'] -_OUTPOINT = DESCRIPTOR.message_types_by_name['OutPoint'] -_PREVIOUSOUTPOINT = DESCRIPTOR.message_types_by_name['PreviousOutPoint'] -_LIGHTNINGADDRESS = DESCRIPTOR.message_types_by_name['LightningAddress'] -_ESTIMATEFEEREQUEST = DESCRIPTOR.message_types_by_name['EstimateFeeRequest'] -_ESTIMATEFEEREQUEST_ADDRTOAMOUNTENTRY = _ESTIMATEFEEREQUEST.nested_types_by_name['AddrToAmountEntry'] -_ESTIMATEFEERESPONSE = DESCRIPTOR.message_types_by_name['EstimateFeeResponse'] -_SENDMANYREQUEST = DESCRIPTOR.message_types_by_name['SendManyRequest'] -_SENDMANYREQUEST_ADDRTOAMOUNTENTRY = _SENDMANYREQUEST.nested_types_by_name['AddrToAmountEntry'] -_SENDMANYRESPONSE = DESCRIPTOR.message_types_by_name['SendManyResponse'] -_SENDCOINSREQUEST = DESCRIPTOR.message_types_by_name['SendCoinsRequest'] -_SENDCOINSRESPONSE = DESCRIPTOR.message_types_by_name['SendCoinsResponse'] -_LISTUNSPENTREQUEST = DESCRIPTOR.message_types_by_name['ListUnspentRequest'] -_LISTUNSPENTRESPONSE = DESCRIPTOR.message_types_by_name['ListUnspentResponse'] -_NEWADDRESSREQUEST = DESCRIPTOR.message_types_by_name['NewAddressRequest'] -_NEWADDRESSRESPONSE = DESCRIPTOR.message_types_by_name['NewAddressResponse'] -_SIGNMESSAGEREQUEST = DESCRIPTOR.message_types_by_name['SignMessageRequest'] -_SIGNMESSAGERESPONSE = DESCRIPTOR.message_types_by_name['SignMessageResponse'] -_VERIFYMESSAGEREQUEST = DESCRIPTOR.message_types_by_name['VerifyMessageRequest'] -_VERIFYMESSAGERESPONSE = DESCRIPTOR.message_types_by_name['VerifyMessageResponse'] -_CONNECTPEERREQUEST = DESCRIPTOR.message_types_by_name['ConnectPeerRequest'] -_CONNECTPEERRESPONSE = DESCRIPTOR.message_types_by_name['ConnectPeerResponse'] -_DISCONNECTPEERREQUEST = DESCRIPTOR.message_types_by_name['DisconnectPeerRequest'] -_DISCONNECTPEERRESPONSE = DESCRIPTOR.message_types_by_name['DisconnectPeerResponse'] -_HTLC = DESCRIPTOR.message_types_by_name['HTLC'] -_CHANNELCONSTRAINTS = DESCRIPTOR.message_types_by_name['ChannelConstraints'] -_CHANNEL = DESCRIPTOR.message_types_by_name['Channel'] -_LISTCHANNELSREQUEST = DESCRIPTOR.message_types_by_name['ListChannelsRequest'] -_LISTCHANNELSRESPONSE = DESCRIPTOR.message_types_by_name['ListChannelsResponse'] -_CHANNELCLOSESUMMARY = DESCRIPTOR.message_types_by_name['ChannelCloseSummary'] -_RESOLUTION = DESCRIPTOR.message_types_by_name['Resolution'] -_CLOSEDCHANNELSREQUEST = DESCRIPTOR.message_types_by_name['ClosedChannelsRequest'] -_CLOSEDCHANNELSRESPONSE = DESCRIPTOR.message_types_by_name['ClosedChannelsResponse'] -_PEER = DESCRIPTOR.message_types_by_name['Peer'] -_PEER_FEATURESENTRY = _PEER.nested_types_by_name['FeaturesEntry'] -_TIMESTAMPEDERROR = DESCRIPTOR.message_types_by_name['TimestampedError'] -_LISTPEERSREQUEST = DESCRIPTOR.message_types_by_name['ListPeersRequest'] -_LISTPEERSRESPONSE = DESCRIPTOR.message_types_by_name['ListPeersResponse'] -_PEEREVENTSUBSCRIPTION = DESCRIPTOR.message_types_by_name['PeerEventSubscription'] -_PEEREVENT = DESCRIPTOR.message_types_by_name['PeerEvent'] -_GETINFOREQUEST = DESCRIPTOR.message_types_by_name['GetInfoRequest'] -_GETINFORESPONSE = DESCRIPTOR.message_types_by_name['GetInfoResponse'] -_GETINFORESPONSE_FEATURESENTRY = _GETINFORESPONSE.nested_types_by_name['FeaturesEntry'] -_GETRECOVERYINFOREQUEST = DESCRIPTOR.message_types_by_name['GetRecoveryInfoRequest'] -_GETRECOVERYINFORESPONSE = DESCRIPTOR.message_types_by_name['GetRecoveryInfoResponse'] -_CHAIN = DESCRIPTOR.message_types_by_name['Chain'] -_CONFIRMATIONUPDATE = DESCRIPTOR.message_types_by_name['ConfirmationUpdate'] -_CHANNELOPENUPDATE = DESCRIPTOR.message_types_by_name['ChannelOpenUpdate'] -_CHANNELCLOSEUPDATE = DESCRIPTOR.message_types_by_name['ChannelCloseUpdate'] -_CLOSECHANNELREQUEST = DESCRIPTOR.message_types_by_name['CloseChannelRequest'] -_CLOSESTATUSUPDATE = DESCRIPTOR.message_types_by_name['CloseStatusUpdate'] -_PENDINGUPDATE = DESCRIPTOR.message_types_by_name['PendingUpdate'] -_READYFORPSBTFUNDING = DESCRIPTOR.message_types_by_name['ReadyForPsbtFunding'] -_BATCHOPENCHANNELREQUEST = DESCRIPTOR.message_types_by_name['BatchOpenChannelRequest'] -_BATCHOPENCHANNEL = DESCRIPTOR.message_types_by_name['BatchOpenChannel'] -_BATCHOPENCHANNELRESPONSE = DESCRIPTOR.message_types_by_name['BatchOpenChannelResponse'] -_OPENCHANNELREQUEST = DESCRIPTOR.message_types_by_name['OpenChannelRequest'] -_OPENSTATUSUPDATE = DESCRIPTOR.message_types_by_name['OpenStatusUpdate'] -_KEYLOCATOR = DESCRIPTOR.message_types_by_name['KeyLocator'] -_KEYDESCRIPTOR = DESCRIPTOR.message_types_by_name['KeyDescriptor'] -_CHANPOINTSHIM = DESCRIPTOR.message_types_by_name['ChanPointShim'] -_PSBTSHIM = DESCRIPTOR.message_types_by_name['PsbtShim'] -_FUNDINGSHIM = DESCRIPTOR.message_types_by_name['FundingShim'] -_FUNDINGSHIMCANCEL = DESCRIPTOR.message_types_by_name['FundingShimCancel'] -_FUNDINGPSBTVERIFY = DESCRIPTOR.message_types_by_name['FundingPsbtVerify'] -_FUNDINGPSBTFINALIZE = DESCRIPTOR.message_types_by_name['FundingPsbtFinalize'] -_FUNDINGTRANSITIONMSG = DESCRIPTOR.message_types_by_name['FundingTransitionMsg'] -_FUNDINGSTATESTEPRESP = DESCRIPTOR.message_types_by_name['FundingStateStepResp'] -_PENDINGHTLC = DESCRIPTOR.message_types_by_name['PendingHTLC'] -_PENDINGCHANNELSREQUEST = DESCRIPTOR.message_types_by_name['PendingChannelsRequest'] -_PENDINGCHANNELSRESPONSE = DESCRIPTOR.message_types_by_name['PendingChannelsResponse'] -_PENDINGCHANNELSRESPONSE_PENDINGCHANNEL = _PENDINGCHANNELSRESPONSE.nested_types_by_name['PendingChannel'] -_PENDINGCHANNELSRESPONSE_PENDINGOPENCHANNEL = _PENDINGCHANNELSRESPONSE.nested_types_by_name['PendingOpenChannel'] -_PENDINGCHANNELSRESPONSE_WAITINGCLOSECHANNEL = _PENDINGCHANNELSRESPONSE.nested_types_by_name['WaitingCloseChannel'] -_PENDINGCHANNELSRESPONSE_COMMITMENTS = _PENDINGCHANNELSRESPONSE.nested_types_by_name['Commitments'] -_PENDINGCHANNELSRESPONSE_CLOSEDCHANNEL = _PENDINGCHANNELSRESPONSE.nested_types_by_name['ClosedChannel'] -_PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL = _PENDINGCHANNELSRESPONSE.nested_types_by_name['ForceClosedChannel'] -_CHANNELEVENTSUBSCRIPTION = DESCRIPTOR.message_types_by_name['ChannelEventSubscription'] -_CHANNELEVENTUPDATE = DESCRIPTOR.message_types_by_name['ChannelEventUpdate'] -_WALLETACCOUNTBALANCE = DESCRIPTOR.message_types_by_name['WalletAccountBalance'] -_WALLETBALANCEREQUEST = DESCRIPTOR.message_types_by_name['WalletBalanceRequest'] -_WALLETBALANCERESPONSE = DESCRIPTOR.message_types_by_name['WalletBalanceResponse'] -_WALLETBALANCERESPONSE_ACCOUNTBALANCEENTRY = _WALLETBALANCERESPONSE.nested_types_by_name['AccountBalanceEntry'] -_AMOUNT = DESCRIPTOR.message_types_by_name['Amount'] -_CHANNELBALANCEREQUEST = DESCRIPTOR.message_types_by_name['ChannelBalanceRequest'] -_CHANNELBALANCERESPONSE = DESCRIPTOR.message_types_by_name['ChannelBalanceResponse'] -_QUERYROUTESREQUEST = DESCRIPTOR.message_types_by_name['QueryRoutesRequest'] -_QUERYROUTESREQUEST_DESTCUSTOMRECORDSENTRY = _QUERYROUTESREQUEST.nested_types_by_name['DestCustomRecordsEntry'] -_NODEPAIR = DESCRIPTOR.message_types_by_name['NodePair'] -_EDGELOCATOR = DESCRIPTOR.message_types_by_name['EdgeLocator'] -_QUERYROUTESRESPONSE = DESCRIPTOR.message_types_by_name['QueryRoutesResponse'] -_HOP = DESCRIPTOR.message_types_by_name['Hop'] -_HOP_CUSTOMRECORDSENTRY = _HOP.nested_types_by_name['CustomRecordsEntry'] -_MPPRECORD = DESCRIPTOR.message_types_by_name['MPPRecord'] -_AMPRECORD = DESCRIPTOR.message_types_by_name['AMPRecord'] -_ROUTE = DESCRIPTOR.message_types_by_name['Route'] -_NODEINFOREQUEST = DESCRIPTOR.message_types_by_name['NodeInfoRequest'] -_NODEINFO = DESCRIPTOR.message_types_by_name['NodeInfo'] -_LIGHTNINGNODE = DESCRIPTOR.message_types_by_name['LightningNode'] -_LIGHTNINGNODE_FEATURESENTRY = _LIGHTNINGNODE.nested_types_by_name['FeaturesEntry'] -_NODEADDRESS = DESCRIPTOR.message_types_by_name['NodeAddress'] -_ROUTINGPOLICY = DESCRIPTOR.message_types_by_name['RoutingPolicy'] -_CHANNELEDGE = DESCRIPTOR.message_types_by_name['ChannelEdge'] -_CHANNELGRAPHREQUEST = DESCRIPTOR.message_types_by_name['ChannelGraphRequest'] -_CHANNELGRAPH = DESCRIPTOR.message_types_by_name['ChannelGraph'] -_NODEMETRICSREQUEST = DESCRIPTOR.message_types_by_name['NodeMetricsRequest'] -_NODEMETRICSRESPONSE = DESCRIPTOR.message_types_by_name['NodeMetricsResponse'] -_NODEMETRICSRESPONSE_BETWEENNESSCENTRALITYENTRY = _NODEMETRICSRESPONSE.nested_types_by_name['BetweennessCentralityEntry'] -_FLOATMETRIC = DESCRIPTOR.message_types_by_name['FloatMetric'] -_CHANINFOREQUEST = DESCRIPTOR.message_types_by_name['ChanInfoRequest'] -_NETWORKINFOREQUEST = DESCRIPTOR.message_types_by_name['NetworkInfoRequest'] -_NETWORKINFO = DESCRIPTOR.message_types_by_name['NetworkInfo'] -_STOPREQUEST = DESCRIPTOR.message_types_by_name['StopRequest'] -_STOPRESPONSE = DESCRIPTOR.message_types_by_name['StopResponse'] -_GRAPHTOPOLOGYSUBSCRIPTION = DESCRIPTOR.message_types_by_name['GraphTopologySubscription'] -_GRAPHTOPOLOGYUPDATE = DESCRIPTOR.message_types_by_name['GraphTopologyUpdate'] -_NODEUPDATE = DESCRIPTOR.message_types_by_name['NodeUpdate'] -_NODEUPDATE_FEATURESENTRY = _NODEUPDATE.nested_types_by_name['FeaturesEntry'] -_CHANNELEDGEUPDATE = DESCRIPTOR.message_types_by_name['ChannelEdgeUpdate'] -_CLOSEDCHANNELUPDATE = DESCRIPTOR.message_types_by_name['ClosedChannelUpdate'] -_HOPHINT = DESCRIPTOR.message_types_by_name['HopHint'] -_SETID = DESCRIPTOR.message_types_by_name['SetID'] -_ROUTEHINT = DESCRIPTOR.message_types_by_name['RouteHint'] -_AMPINVOICESTATE = DESCRIPTOR.message_types_by_name['AMPInvoiceState'] -_INVOICE = DESCRIPTOR.message_types_by_name['Invoice'] -_INVOICE_FEATURESENTRY = _INVOICE.nested_types_by_name['FeaturesEntry'] -_INVOICE_AMPINVOICESTATEENTRY = _INVOICE.nested_types_by_name['AmpInvoiceStateEntry'] -_INVOICEHTLC = DESCRIPTOR.message_types_by_name['InvoiceHTLC'] -_INVOICEHTLC_CUSTOMRECORDSENTRY = _INVOICEHTLC.nested_types_by_name['CustomRecordsEntry'] -_AMP = DESCRIPTOR.message_types_by_name['AMP'] -_ADDINVOICERESPONSE = DESCRIPTOR.message_types_by_name['AddInvoiceResponse'] -_PAYMENTHASH = DESCRIPTOR.message_types_by_name['PaymentHash'] -_LISTINVOICEREQUEST = DESCRIPTOR.message_types_by_name['ListInvoiceRequest'] -_LISTINVOICERESPONSE = DESCRIPTOR.message_types_by_name['ListInvoiceResponse'] -_INVOICESUBSCRIPTION = DESCRIPTOR.message_types_by_name['InvoiceSubscription'] -_PAYMENT = DESCRIPTOR.message_types_by_name['Payment'] -_HTLCATTEMPT = DESCRIPTOR.message_types_by_name['HTLCAttempt'] -_LISTPAYMENTSREQUEST = DESCRIPTOR.message_types_by_name['ListPaymentsRequest'] -_LISTPAYMENTSRESPONSE = DESCRIPTOR.message_types_by_name['ListPaymentsResponse'] -_DELETEPAYMENTREQUEST = DESCRIPTOR.message_types_by_name['DeletePaymentRequest'] -_DELETEALLPAYMENTSREQUEST = DESCRIPTOR.message_types_by_name['DeleteAllPaymentsRequest'] -_DELETEPAYMENTRESPONSE = DESCRIPTOR.message_types_by_name['DeletePaymentResponse'] -_DELETEALLPAYMENTSRESPONSE = DESCRIPTOR.message_types_by_name['DeleteAllPaymentsResponse'] -_ABANDONCHANNELREQUEST = DESCRIPTOR.message_types_by_name['AbandonChannelRequest'] -_ABANDONCHANNELRESPONSE = DESCRIPTOR.message_types_by_name['AbandonChannelResponse'] -_DEBUGLEVELREQUEST = DESCRIPTOR.message_types_by_name['DebugLevelRequest'] -_DEBUGLEVELRESPONSE = DESCRIPTOR.message_types_by_name['DebugLevelResponse'] -_PAYREQSTRING = DESCRIPTOR.message_types_by_name['PayReqString'] -_PAYREQ = DESCRIPTOR.message_types_by_name['PayReq'] -_PAYREQ_FEATURESENTRY = _PAYREQ.nested_types_by_name['FeaturesEntry'] -_FEATURE = DESCRIPTOR.message_types_by_name['Feature'] -_FEEREPORTREQUEST = DESCRIPTOR.message_types_by_name['FeeReportRequest'] -_CHANNELFEEREPORT = DESCRIPTOR.message_types_by_name['ChannelFeeReport'] -_FEEREPORTRESPONSE = DESCRIPTOR.message_types_by_name['FeeReportResponse'] -_POLICYUPDATEREQUEST = DESCRIPTOR.message_types_by_name['PolicyUpdateRequest'] -_FAILEDUPDATE = DESCRIPTOR.message_types_by_name['FailedUpdate'] -_POLICYUPDATERESPONSE = DESCRIPTOR.message_types_by_name['PolicyUpdateResponse'] -_FORWARDINGHISTORYREQUEST = DESCRIPTOR.message_types_by_name['ForwardingHistoryRequest'] -_FORWARDINGEVENT = DESCRIPTOR.message_types_by_name['ForwardingEvent'] -_FORWARDINGHISTORYRESPONSE = DESCRIPTOR.message_types_by_name['ForwardingHistoryResponse'] -_EXPORTCHANNELBACKUPREQUEST = DESCRIPTOR.message_types_by_name['ExportChannelBackupRequest'] -_CHANNELBACKUP = DESCRIPTOR.message_types_by_name['ChannelBackup'] -_MULTICHANBACKUP = DESCRIPTOR.message_types_by_name['MultiChanBackup'] -_CHANBACKUPEXPORTREQUEST = DESCRIPTOR.message_types_by_name['ChanBackupExportRequest'] -_CHANBACKUPSNAPSHOT = DESCRIPTOR.message_types_by_name['ChanBackupSnapshot'] -_CHANNELBACKUPS = DESCRIPTOR.message_types_by_name['ChannelBackups'] -_RESTORECHANBACKUPREQUEST = DESCRIPTOR.message_types_by_name['RestoreChanBackupRequest'] -_RESTOREBACKUPRESPONSE = DESCRIPTOR.message_types_by_name['RestoreBackupResponse'] -_CHANNELBACKUPSUBSCRIPTION = DESCRIPTOR.message_types_by_name['ChannelBackupSubscription'] -_VERIFYCHANBACKUPRESPONSE = DESCRIPTOR.message_types_by_name['VerifyChanBackupResponse'] -_MACAROONPERMISSION = DESCRIPTOR.message_types_by_name['MacaroonPermission'] -_BAKEMACAROONREQUEST = DESCRIPTOR.message_types_by_name['BakeMacaroonRequest'] -_BAKEMACAROONRESPONSE = DESCRIPTOR.message_types_by_name['BakeMacaroonResponse'] -_LISTMACAROONIDSREQUEST = DESCRIPTOR.message_types_by_name['ListMacaroonIDsRequest'] -_LISTMACAROONIDSRESPONSE = DESCRIPTOR.message_types_by_name['ListMacaroonIDsResponse'] -_DELETEMACAROONIDREQUEST = DESCRIPTOR.message_types_by_name['DeleteMacaroonIDRequest'] -_DELETEMACAROONIDRESPONSE = DESCRIPTOR.message_types_by_name['DeleteMacaroonIDResponse'] -_MACAROONPERMISSIONLIST = DESCRIPTOR.message_types_by_name['MacaroonPermissionList'] -_LISTPERMISSIONSREQUEST = DESCRIPTOR.message_types_by_name['ListPermissionsRequest'] -_LISTPERMISSIONSRESPONSE = DESCRIPTOR.message_types_by_name['ListPermissionsResponse'] -_LISTPERMISSIONSRESPONSE_METHODPERMISSIONSENTRY = _LISTPERMISSIONSRESPONSE.nested_types_by_name['MethodPermissionsEntry'] -_FAILURE = DESCRIPTOR.message_types_by_name['Failure'] -_CHANNELUPDATE = DESCRIPTOR.message_types_by_name['ChannelUpdate'] -_MACAROONID = DESCRIPTOR.message_types_by_name['MacaroonId'] -_OP = DESCRIPTOR.message_types_by_name['Op'] -_CHECKMACPERMREQUEST = DESCRIPTOR.message_types_by_name['CheckMacPermRequest'] -_CHECKMACPERMRESPONSE = DESCRIPTOR.message_types_by_name['CheckMacPermResponse'] -_RPCMIDDLEWAREREQUEST = DESCRIPTOR.message_types_by_name['RPCMiddlewareRequest'] -_STREAMAUTH = DESCRIPTOR.message_types_by_name['StreamAuth'] -_RPCMESSAGE = DESCRIPTOR.message_types_by_name['RPCMessage'] -_RPCMIDDLEWARERESPONSE = DESCRIPTOR.message_types_by_name['RPCMiddlewareResponse'] -_MIDDLEWAREREGISTRATION = DESCRIPTOR.message_types_by_name['MiddlewareRegistration'] -_INTERCEPTFEEDBACK = DESCRIPTOR.message_types_by_name['InterceptFeedback'] -_CHANNELCLOSESUMMARY_CLOSURETYPE = _CHANNELCLOSESUMMARY.enum_types_by_name['ClosureType'] -_PEER_SYNCTYPE = _PEER.enum_types_by_name['SyncType'] -_PEEREVENT_EVENTTYPE = _PEEREVENT.enum_types_by_name['EventType'] -_PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL_ANCHORSTATE = _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL.enum_types_by_name['AnchorState'] -_CHANNELEVENTUPDATE_UPDATETYPE = _CHANNELEVENTUPDATE.enum_types_by_name['UpdateType'] -_INVOICE_INVOICESTATE = _INVOICE.enum_types_by_name['InvoiceState'] -_PAYMENT_PAYMENTSTATUS = _PAYMENT.enum_types_by_name['PaymentStatus'] -_HTLCATTEMPT_HTLCSTATUS = _HTLCATTEMPT.enum_types_by_name['HTLCStatus'] -_FAILURE_FAILURECODE = _FAILURE.enum_types_by_name['FailureCode'] -SubscribeCustomMessagesRequest = _reflection.GeneratedProtocolMessageType('SubscribeCustomMessagesRequest', (_message.Message,), { - 'DESCRIPTOR' : _SUBSCRIBECUSTOMMESSAGESREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SubscribeCustomMessagesRequest) - }) -_sym_db.RegisterMessage(SubscribeCustomMessagesRequest) - -CustomMessage = _reflection.GeneratedProtocolMessageType('CustomMessage', (_message.Message,), { - 'DESCRIPTOR' : _CUSTOMMESSAGE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.CustomMessage) - }) -_sym_db.RegisterMessage(CustomMessage) - -SendCustomMessageRequest = _reflection.GeneratedProtocolMessageType('SendCustomMessageRequest', (_message.Message,), { - 'DESCRIPTOR' : _SENDCUSTOMMESSAGEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendCustomMessageRequest) - }) -_sym_db.RegisterMessage(SendCustomMessageRequest) - -SendCustomMessageResponse = _reflection.GeneratedProtocolMessageType('SendCustomMessageResponse', (_message.Message,), { - 'DESCRIPTOR' : _SENDCUSTOMMESSAGERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendCustomMessageResponse) - }) -_sym_db.RegisterMessage(SendCustomMessageResponse) - -Utxo = _reflection.GeneratedProtocolMessageType('Utxo', (_message.Message,), { - 'DESCRIPTOR' : _UTXO, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Utxo) - }) -_sym_db.RegisterMessage(Utxo) - -OutputDetail = _reflection.GeneratedProtocolMessageType('OutputDetail', (_message.Message,), { - 'DESCRIPTOR' : _OUTPUTDETAIL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.OutputDetail) - }) -_sym_db.RegisterMessage(OutputDetail) - -Transaction = _reflection.GeneratedProtocolMessageType('Transaction', (_message.Message,), { - 'DESCRIPTOR' : _TRANSACTION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Transaction) - }) -_sym_db.RegisterMessage(Transaction) - -GetTransactionsRequest = _reflection.GeneratedProtocolMessageType('GetTransactionsRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETTRANSACTIONSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GetTransactionsRequest) - }) -_sym_db.RegisterMessage(GetTransactionsRequest) - -TransactionDetails = _reflection.GeneratedProtocolMessageType('TransactionDetails', (_message.Message,), { - 'DESCRIPTOR' : _TRANSACTIONDETAILS, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.TransactionDetails) - }) -_sym_db.RegisterMessage(TransactionDetails) - -FeeLimit = _reflection.GeneratedProtocolMessageType('FeeLimit', (_message.Message,), { - 'DESCRIPTOR' : _FEELIMIT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FeeLimit) - }) -_sym_db.RegisterMessage(FeeLimit) - -SendRequest = _reflection.GeneratedProtocolMessageType('SendRequest', (_message.Message,), { - - 'DestCustomRecordsEntry' : _reflection.GeneratedProtocolMessageType('DestCustomRecordsEntry', (_message.Message,), { - 'DESCRIPTOR' : _SENDREQUEST_DESTCUSTOMRECORDSENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendRequest.DestCustomRecordsEntry) - }) - , - 'DESCRIPTOR' : _SENDREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendRequest) - }) -_sym_db.RegisterMessage(SendRequest) -_sym_db.RegisterMessage(SendRequest.DestCustomRecordsEntry) - -SendResponse = _reflection.GeneratedProtocolMessageType('SendResponse', (_message.Message,), { - 'DESCRIPTOR' : _SENDRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendResponse) - }) -_sym_db.RegisterMessage(SendResponse) - -SendToRouteRequest = _reflection.GeneratedProtocolMessageType('SendToRouteRequest', (_message.Message,), { - 'DESCRIPTOR' : _SENDTOROUTEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendToRouteRequest) - }) -_sym_db.RegisterMessage(SendToRouteRequest) - -ChannelAcceptRequest = _reflection.GeneratedProtocolMessageType('ChannelAcceptRequest', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELACCEPTREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelAcceptRequest) - }) -_sym_db.RegisterMessage(ChannelAcceptRequest) - -ChannelAcceptResponse = _reflection.GeneratedProtocolMessageType('ChannelAcceptResponse', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELACCEPTRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelAcceptResponse) - }) -_sym_db.RegisterMessage(ChannelAcceptResponse) - -ChannelPoint = _reflection.GeneratedProtocolMessageType('ChannelPoint', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELPOINT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelPoint) - }) -_sym_db.RegisterMessage(ChannelPoint) - -OutPoint = _reflection.GeneratedProtocolMessageType('OutPoint', (_message.Message,), { - 'DESCRIPTOR' : _OUTPOINT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.OutPoint) - }) -_sym_db.RegisterMessage(OutPoint) - -PreviousOutPoint = _reflection.GeneratedProtocolMessageType('PreviousOutPoint', (_message.Message,), { - 'DESCRIPTOR' : _PREVIOUSOUTPOINT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PreviousOutPoint) - }) -_sym_db.RegisterMessage(PreviousOutPoint) - -LightningAddress = _reflection.GeneratedProtocolMessageType('LightningAddress', (_message.Message,), { - 'DESCRIPTOR' : _LIGHTNINGADDRESS, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.LightningAddress) - }) -_sym_db.RegisterMessage(LightningAddress) - -EstimateFeeRequest = _reflection.GeneratedProtocolMessageType('EstimateFeeRequest', (_message.Message,), { - - 'AddrToAmountEntry' : _reflection.GeneratedProtocolMessageType('AddrToAmountEntry', (_message.Message,), { - 'DESCRIPTOR' : _ESTIMATEFEEREQUEST_ADDRTOAMOUNTENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.EstimateFeeRequest.AddrToAmountEntry) - }) - , - 'DESCRIPTOR' : _ESTIMATEFEEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.EstimateFeeRequest) - }) -_sym_db.RegisterMessage(EstimateFeeRequest) -_sym_db.RegisterMessage(EstimateFeeRequest.AddrToAmountEntry) - -EstimateFeeResponse = _reflection.GeneratedProtocolMessageType('EstimateFeeResponse', (_message.Message,), { - 'DESCRIPTOR' : _ESTIMATEFEERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.EstimateFeeResponse) - }) -_sym_db.RegisterMessage(EstimateFeeResponse) - -SendManyRequest = _reflection.GeneratedProtocolMessageType('SendManyRequest', (_message.Message,), { - - 'AddrToAmountEntry' : _reflection.GeneratedProtocolMessageType('AddrToAmountEntry', (_message.Message,), { - 'DESCRIPTOR' : _SENDMANYREQUEST_ADDRTOAMOUNTENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendManyRequest.AddrToAmountEntry) - }) - , - 'DESCRIPTOR' : _SENDMANYREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendManyRequest) - }) -_sym_db.RegisterMessage(SendManyRequest) -_sym_db.RegisterMessage(SendManyRequest.AddrToAmountEntry) - -SendManyResponse = _reflection.GeneratedProtocolMessageType('SendManyResponse', (_message.Message,), { - 'DESCRIPTOR' : _SENDMANYRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendManyResponse) - }) -_sym_db.RegisterMessage(SendManyResponse) - -SendCoinsRequest = _reflection.GeneratedProtocolMessageType('SendCoinsRequest', (_message.Message,), { - 'DESCRIPTOR' : _SENDCOINSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendCoinsRequest) - }) -_sym_db.RegisterMessage(SendCoinsRequest) - -SendCoinsResponse = _reflection.GeneratedProtocolMessageType('SendCoinsResponse', (_message.Message,), { - 'DESCRIPTOR' : _SENDCOINSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SendCoinsResponse) - }) -_sym_db.RegisterMessage(SendCoinsResponse) - -ListUnspentRequest = _reflection.GeneratedProtocolMessageType('ListUnspentRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTUNSPENTREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListUnspentRequest) - }) -_sym_db.RegisterMessage(ListUnspentRequest) - -ListUnspentResponse = _reflection.GeneratedProtocolMessageType('ListUnspentResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTUNSPENTRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListUnspentResponse) - }) -_sym_db.RegisterMessage(ListUnspentResponse) - -NewAddressRequest = _reflection.GeneratedProtocolMessageType('NewAddressRequest', (_message.Message,), { - 'DESCRIPTOR' : _NEWADDRESSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NewAddressRequest) - }) -_sym_db.RegisterMessage(NewAddressRequest) - -NewAddressResponse = _reflection.GeneratedProtocolMessageType('NewAddressResponse', (_message.Message,), { - 'DESCRIPTOR' : _NEWADDRESSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NewAddressResponse) - }) -_sym_db.RegisterMessage(NewAddressResponse) - -SignMessageRequest = _reflection.GeneratedProtocolMessageType('SignMessageRequest', (_message.Message,), { - 'DESCRIPTOR' : _SIGNMESSAGEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SignMessageRequest) - }) -_sym_db.RegisterMessage(SignMessageRequest) - -SignMessageResponse = _reflection.GeneratedProtocolMessageType('SignMessageResponse', (_message.Message,), { - 'DESCRIPTOR' : _SIGNMESSAGERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SignMessageResponse) - }) -_sym_db.RegisterMessage(SignMessageResponse) - -VerifyMessageRequest = _reflection.GeneratedProtocolMessageType('VerifyMessageRequest', (_message.Message,), { - 'DESCRIPTOR' : _VERIFYMESSAGEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.VerifyMessageRequest) - }) -_sym_db.RegisterMessage(VerifyMessageRequest) - -VerifyMessageResponse = _reflection.GeneratedProtocolMessageType('VerifyMessageResponse', (_message.Message,), { - 'DESCRIPTOR' : _VERIFYMESSAGERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.VerifyMessageResponse) - }) -_sym_db.RegisterMessage(VerifyMessageResponse) - -ConnectPeerRequest = _reflection.GeneratedProtocolMessageType('ConnectPeerRequest', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTPEERREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ConnectPeerRequest) - }) -_sym_db.RegisterMessage(ConnectPeerRequest) - -ConnectPeerResponse = _reflection.GeneratedProtocolMessageType('ConnectPeerResponse', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTPEERRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ConnectPeerResponse) - }) -_sym_db.RegisterMessage(ConnectPeerResponse) - -DisconnectPeerRequest = _reflection.GeneratedProtocolMessageType('DisconnectPeerRequest', (_message.Message,), { - 'DESCRIPTOR' : _DISCONNECTPEERREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DisconnectPeerRequest) - }) -_sym_db.RegisterMessage(DisconnectPeerRequest) - -DisconnectPeerResponse = _reflection.GeneratedProtocolMessageType('DisconnectPeerResponse', (_message.Message,), { - 'DESCRIPTOR' : _DISCONNECTPEERRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DisconnectPeerResponse) - }) -_sym_db.RegisterMessage(DisconnectPeerResponse) - -HTLC = _reflection.GeneratedProtocolMessageType('HTLC', (_message.Message,), { - 'DESCRIPTOR' : _HTLC, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.HTLC) - }) -_sym_db.RegisterMessage(HTLC) - -ChannelConstraints = _reflection.GeneratedProtocolMessageType('ChannelConstraints', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELCONSTRAINTS, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelConstraints) - }) -_sym_db.RegisterMessage(ChannelConstraints) - -Channel = _reflection.GeneratedProtocolMessageType('Channel', (_message.Message,), { - 'DESCRIPTOR' : _CHANNEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Channel) - }) -_sym_db.RegisterMessage(Channel) - -ListChannelsRequest = _reflection.GeneratedProtocolMessageType('ListChannelsRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTCHANNELSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListChannelsRequest) - }) -_sym_db.RegisterMessage(ListChannelsRequest) - -ListChannelsResponse = _reflection.GeneratedProtocolMessageType('ListChannelsResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTCHANNELSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListChannelsResponse) - }) -_sym_db.RegisterMessage(ListChannelsResponse) - -ChannelCloseSummary = _reflection.GeneratedProtocolMessageType('ChannelCloseSummary', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELCLOSESUMMARY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelCloseSummary) - }) -_sym_db.RegisterMessage(ChannelCloseSummary) - -Resolution = _reflection.GeneratedProtocolMessageType('Resolution', (_message.Message,), { - 'DESCRIPTOR' : _RESOLUTION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Resolution) - }) -_sym_db.RegisterMessage(Resolution) - -ClosedChannelsRequest = _reflection.GeneratedProtocolMessageType('ClosedChannelsRequest', (_message.Message,), { - 'DESCRIPTOR' : _CLOSEDCHANNELSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ClosedChannelsRequest) - }) -_sym_db.RegisterMessage(ClosedChannelsRequest) - -ClosedChannelsResponse = _reflection.GeneratedProtocolMessageType('ClosedChannelsResponse', (_message.Message,), { - 'DESCRIPTOR' : _CLOSEDCHANNELSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ClosedChannelsResponse) - }) -_sym_db.RegisterMessage(ClosedChannelsResponse) - -Peer = _reflection.GeneratedProtocolMessageType('Peer', (_message.Message,), { - - 'FeaturesEntry' : _reflection.GeneratedProtocolMessageType('FeaturesEntry', (_message.Message,), { - 'DESCRIPTOR' : _PEER_FEATURESENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Peer.FeaturesEntry) - }) - , - 'DESCRIPTOR' : _PEER, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Peer) - }) -_sym_db.RegisterMessage(Peer) -_sym_db.RegisterMessage(Peer.FeaturesEntry) - -TimestampedError = _reflection.GeneratedProtocolMessageType('TimestampedError', (_message.Message,), { - 'DESCRIPTOR' : _TIMESTAMPEDERROR, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.TimestampedError) - }) -_sym_db.RegisterMessage(TimestampedError) - -ListPeersRequest = _reflection.GeneratedProtocolMessageType('ListPeersRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTPEERSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListPeersRequest) - }) -_sym_db.RegisterMessage(ListPeersRequest) - -ListPeersResponse = _reflection.GeneratedProtocolMessageType('ListPeersResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTPEERSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListPeersResponse) - }) -_sym_db.RegisterMessage(ListPeersResponse) - -PeerEventSubscription = _reflection.GeneratedProtocolMessageType('PeerEventSubscription', (_message.Message,), { - 'DESCRIPTOR' : _PEEREVENTSUBSCRIPTION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PeerEventSubscription) - }) -_sym_db.RegisterMessage(PeerEventSubscription) - -PeerEvent = _reflection.GeneratedProtocolMessageType('PeerEvent', (_message.Message,), { - 'DESCRIPTOR' : _PEEREVENT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PeerEvent) - }) -_sym_db.RegisterMessage(PeerEvent) - -GetInfoRequest = _reflection.GeneratedProtocolMessageType('GetInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETINFOREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GetInfoRequest) - }) -_sym_db.RegisterMessage(GetInfoRequest) - -GetInfoResponse = _reflection.GeneratedProtocolMessageType('GetInfoResponse', (_message.Message,), { - - 'FeaturesEntry' : _reflection.GeneratedProtocolMessageType('FeaturesEntry', (_message.Message,), { - 'DESCRIPTOR' : _GETINFORESPONSE_FEATURESENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GetInfoResponse.FeaturesEntry) - }) - , - 'DESCRIPTOR' : _GETINFORESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GetInfoResponse) - }) -_sym_db.RegisterMessage(GetInfoResponse) -_sym_db.RegisterMessage(GetInfoResponse.FeaturesEntry) - -GetRecoveryInfoRequest = _reflection.GeneratedProtocolMessageType('GetRecoveryInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETRECOVERYINFOREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GetRecoveryInfoRequest) - }) -_sym_db.RegisterMessage(GetRecoveryInfoRequest) - -GetRecoveryInfoResponse = _reflection.GeneratedProtocolMessageType('GetRecoveryInfoResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETRECOVERYINFORESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GetRecoveryInfoResponse) - }) -_sym_db.RegisterMessage(GetRecoveryInfoResponse) - -Chain = _reflection.GeneratedProtocolMessageType('Chain', (_message.Message,), { - 'DESCRIPTOR' : _CHAIN, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Chain) - }) -_sym_db.RegisterMessage(Chain) - -ConfirmationUpdate = _reflection.GeneratedProtocolMessageType('ConfirmationUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CONFIRMATIONUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ConfirmationUpdate) - }) -_sym_db.RegisterMessage(ConfirmationUpdate) - -ChannelOpenUpdate = _reflection.GeneratedProtocolMessageType('ChannelOpenUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELOPENUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelOpenUpdate) - }) -_sym_db.RegisterMessage(ChannelOpenUpdate) - -ChannelCloseUpdate = _reflection.GeneratedProtocolMessageType('ChannelCloseUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELCLOSEUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelCloseUpdate) - }) -_sym_db.RegisterMessage(ChannelCloseUpdate) - -CloseChannelRequest = _reflection.GeneratedProtocolMessageType('CloseChannelRequest', (_message.Message,), { - 'DESCRIPTOR' : _CLOSECHANNELREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.CloseChannelRequest) - }) -_sym_db.RegisterMessage(CloseChannelRequest) - -CloseStatusUpdate = _reflection.GeneratedProtocolMessageType('CloseStatusUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CLOSESTATUSUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.CloseStatusUpdate) - }) -_sym_db.RegisterMessage(CloseStatusUpdate) - -PendingUpdate = _reflection.GeneratedProtocolMessageType('PendingUpdate', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingUpdate) - }) -_sym_db.RegisterMessage(PendingUpdate) - -ReadyForPsbtFunding = _reflection.GeneratedProtocolMessageType('ReadyForPsbtFunding', (_message.Message,), { - 'DESCRIPTOR' : _READYFORPSBTFUNDING, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ReadyForPsbtFunding) - }) -_sym_db.RegisterMessage(ReadyForPsbtFunding) - -BatchOpenChannelRequest = _reflection.GeneratedProtocolMessageType('BatchOpenChannelRequest', (_message.Message,), { - 'DESCRIPTOR' : _BATCHOPENCHANNELREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.BatchOpenChannelRequest) - }) -_sym_db.RegisterMessage(BatchOpenChannelRequest) - -BatchOpenChannel = _reflection.GeneratedProtocolMessageType('BatchOpenChannel', (_message.Message,), { - 'DESCRIPTOR' : _BATCHOPENCHANNEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.BatchOpenChannel) - }) -_sym_db.RegisterMessage(BatchOpenChannel) - -BatchOpenChannelResponse = _reflection.GeneratedProtocolMessageType('BatchOpenChannelResponse', (_message.Message,), { - 'DESCRIPTOR' : _BATCHOPENCHANNELRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.BatchOpenChannelResponse) - }) -_sym_db.RegisterMessage(BatchOpenChannelResponse) - -OpenChannelRequest = _reflection.GeneratedProtocolMessageType('OpenChannelRequest', (_message.Message,), { - 'DESCRIPTOR' : _OPENCHANNELREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.OpenChannelRequest) - }) -_sym_db.RegisterMessage(OpenChannelRequest) - -OpenStatusUpdate = _reflection.GeneratedProtocolMessageType('OpenStatusUpdate', (_message.Message,), { - 'DESCRIPTOR' : _OPENSTATUSUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.OpenStatusUpdate) - }) -_sym_db.RegisterMessage(OpenStatusUpdate) - -KeyLocator = _reflection.GeneratedProtocolMessageType('KeyLocator', (_message.Message,), { - 'DESCRIPTOR' : _KEYLOCATOR, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.KeyLocator) - }) -_sym_db.RegisterMessage(KeyLocator) - -KeyDescriptor = _reflection.GeneratedProtocolMessageType('KeyDescriptor', (_message.Message,), { - 'DESCRIPTOR' : _KEYDESCRIPTOR, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.KeyDescriptor) - }) -_sym_db.RegisterMessage(KeyDescriptor) - -ChanPointShim = _reflection.GeneratedProtocolMessageType('ChanPointShim', (_message.Message,), { - 'DESCRIPTOR' : _CHANPOINTSHIM, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChanPointShim) - }) -_sym_db.RegisterMessage(ChanPointShim) - -PsbtShim = _reflection.GeneratedProtocolMessageType('PsbtShim', (_message.Message,), { - 'DESCRIPTOR' : _PSBTSHIM, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PsbtShim) - }) -_sym_db.RegisterMessage(PsbtShim) - -FundingShim = _reflection.GeneratedProtocolMessageType('FundingShim', (_message.Message,), { - 'DESCRIPTOR' : _FUNDINGSHIM, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FundingShim) - }) -_sym_db.RegisterMessage(FundingShim) - -FundingShimCancel = _reflection.GeneratedProtocolMessageType('FundingShimCancel', (_message.Message,), { - 'DESCRIPTOR' : _FUNDINGSHIMCANCEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FundingShimCancel) - }) -_sym_db.RegisterMessage(FundingShimCancel) - -FundingPsbtVerify = _reflection.GeneratedProtocolMessageType('FundingPsbtVerify', (_message.Message,), { - 'DESCRIPTOR' : _FUNDINGPSBTVERIFY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FundingPsbtVerify) - }) -_sym_db.RegisterMessage(FundingPsbtVerify) - -FundingPsbtFinalize = _reflection.GeneratedProtocolMessageType('FundingPsbtFinalize', (_message.Message,), { - 'DESCRIPTOR' : _FUNDINGPSBTFINALIZE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FundingPsbtFinalize) - }) -_sym_db.RegisterMessage(FundingPsbtFinalize) - -FundingTransitionMsg = _reflection.GeneratedProtocolMessageType('FundingTransitionMsg', (_message.Message,), { - 'DESCRIPTOR' : _FUNDINGTRANSITIONMSG, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FundingTransitionMsg) - }) -_sym_db.RegisterMessage(FundingTransitionMsg) - -FundingStateStepResp = _reflection.GeneratedProtocolMessageType('FundingStateStepResp', (_message.Message,), { - 'DESCRIPTOR' : _FUNDINGSTATESTEPRESP, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FundingStateStepResp) - }) -_sym_db.RegisterMessage(FundingStateStepResp) - -PendingHTLC = _reflection.GeneratedProtocolMessageType('PendingHTLC', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGHTLC, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingHTLC) - }) -_sym_db.RegisterMessage(PendingHTLC) - -PendingChannelsRequest = _reflection.GeneratedProtocolMessageType('PendingChannelsRequest', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGCHANNELSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsRequest) - }) -_sym_db.RegisterMessage(PendingChannelsRequest) - -PendingChannelsResponse = _reflection.GeneratedProtocolMessageType('PendingChannelsResponse', (_message.Message,), { - - 'PendingChannel' : _reflection.GeneratedProtocolMessageType('PendingChannel', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGCHANNELSRESPONSE_PENDINGCHANNEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsResponse.PendingChannel) - }) - , - - 'PendingOpenChannel' : _reflection.GeneratedProtocolMessageType('PendingOpenChannel', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGCHANNELSRESPONSE_PENDINGOPENCHANNEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsResponse.PendingOpenChannel) - }) - , - - 'WaitingCloseChannel' : _reflection.GeneratedProtocolMessageType('WaitingCloseChannel', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGCHANNELSRESPONSE_WAITINGCLOSECHANNEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsResponse.WaitingCloseChannel) - }) - , - - 'Commitments' : _reflection.GeneratedProtocolMessageType('Commitments', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGCHANNELSRESPONSE_COMMITMENTS, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsResponse.Commitments) - }) - , - - 'ClosedChannel' : _reflection.GeneratedProtocolMessageType('ClosedChannel', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGCHANNELSRESPONSE_CLOSEDCHANNEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsResponse.ClosedChannel) - }) - , - - 'ForceClosedChannel' : _reflection.GeneratedProtocolMessageType('ForceClosedChannel', (_message.Message,), { - 'DESCRIPTOR' : _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsResponse.ForceClosedChannel) - }) - , - 'DESCRIPTOR' : _PENDINGCHANNELSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PendingChannelsResponse) - }) -_sym_db.RegisterMessage(PendingChannelsResponse) -_sym_db.RegisterMessage(PendingChannelsResponse.PendingChannel) -_sym_db.RegisterMessage(PendingChannelsResponse.PendingOpenChannel) -_sym_db.RegisterMessage(PendingChannelsResponse.WaitingCloseChannel) -_sym_db.RegisterMessage(PendingChannelsResponse.Commitments) -_sym_db.RegisterMessage(PendingChannelsResponse.ClosedChannel) -_sym_db.RegisterMessage(PendingChannelsResponse.ForceClosedChannel) - -ChannelEventSubscription = _reflection.GeneratedProtocolMessageType('ChannelEventSubscription', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELEVENTSUBSCRIPTION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelEventSubscription) - }) -_sym_db.RegisterMessage(ChannelEventSubscription) - -ChannelEventUpdate = _reflection.GeneratedProtocolMessageType('ChannelEventUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELEVENTUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelEventUpdate) - }) -_sym_db.RegisterMessage(ChannelEventUpdate) - -WalletAccountBalance = _reflection.GeneratedProtocolMessageType('WalletAccountBalance', (_message.Message,), { - 'DESCRIPTOR' : _WALLETACCOUNTBALANCE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.WalletAccountBalance) - }) -_sym_db.RegisterMessage(WalletAccountBalance) - -WalletBalanceRequest = _reflection.GeneratedProtocolMessageType('WalletBalanceRequest', (_message.Message,), { - 'DESCRIPTOR' : _WALLETBALANCEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.WalletBalanceRequest) - }) -_sym_db.RegisterMessage(WalletBalanceRequest) - -WalletBalanceResponse = _reflection.GeneratedProtocolMessageType('WalletBalanceResponse', (_message.Message,), { - - 'AccountBalanceEntry' : _reflection.GeneratedProtocolMessageType('AccountBalanceEntry', (_message.Message,), { - 'DESCRIPTOR' : _WALLETBALANCERESPONSE_ACCOUNTBALANCEENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.WalletBalanceResponse.AccountBalanceEntry) - }) - , - 'DESCRIPTOR' : _WALLETBALANCERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.WalletBalanceResponse) - }) -_sym_db.RegisterMessage(WalletBalanceResponse) -_sym_db.RegisterMessage(WalletBalanceResponse.AccountBalanceEntry) - -Amount = _reflection.GeneratedProtocolMessageType('Amount', (_message.Message,), { - 'DESCRIPTOR' : _AMOUNT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Amount) - }) -_sym_db.RegisterMessage(Amount) - -ChannelBalanceRequest = _reflection.GeneratedProtocolMessageType('ChannelBalanceRequest', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELBALANCEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelBalanceRequest) - }) -_sym_db.RegisterMessage(ChannelBalanceRequest) - -ChannelBalanceResponse = _reflection.GeneratedProtocolMessageType('ChannelBalanceResponse', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELBALANCERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelBalanceResponse) - }) -_sym_db.RegisterMessage(ChannelBalanceResponse) - -QueryRoutesRequest = _reflection.GeneratedProtocolMessageType('QueryRoutesRequest', (_message.Message,), { - - 'DestCustomRecordsEntry' : _reflection.GeneratedProtocolMessageType('DestCustomRecordsEntry', (_message.Message,), { - 'DESCRIPTOR' : _QUERYROUTESREQUEST_DESTCUSTOMRECORDSENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.QueryRoutesRequest.DestCustomRecordsEntry) - }) - , - 'DESCRIPTOR' : _QUERYROUTESREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.QueryRoutesRequest) - }) -_sym_db.RegisterMessage(QueryRoutesRequest) -_sym_db.RegisterMessage(QueryRoutesRequest.DestCustomRecordsEntry) - -NodePair = _reflection.GeneratedProtocolMessageType('NodePair', (_message.Message,), { - 'DESCRIPTOR' : _NODEPAIR, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodePair) - }) -_sym_db.RegisterMessage(NodePair) - -EdgeLocator = _reflection.GeneratedProtocolMessageType('EdgeLocator', (_message.Message,), { - 'DESCRIPTOR' : _EDGELOCATOR, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.EdgeLocator) - }) -_sym_db.RegisterMessage(EdgeLocator) - -QueryRoutesResponse = _reflection.GeneratedProtocolMessageType('QueryRoutesResponse', (_message.Message,), { - 'DESCRIPTOR' : _QUERYROUTESRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.QueryRoutesResponse) - }) -_sym_db.RegisterMessage(QueryRoutesResponse) - -Hop = _reflection.GeneratedProtocolMessageType('Hop', (_message.Message,), { - - 'CustomRecordsEntry' : _reflection.GeneratedProtocolMessageType('CustomRecordsEntry', (_message.Message,), { - 'DESCRIPTOR' : _HOP_CUSTOMRECORDSENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Hop.CustomRecordsEntry) - }) - , - 'DESCRIPTOR' : _HOP, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Hop) - }) -_sym_db.RegisterMessage(Hop) -_sym_db.RegisterMessage(Hop.CustomRecordsEntry) - -MPPRecord = _reflection.GeneratedProtocolMessageType('MPPRecord', (_message.Message,), { - 'DESCRIPTOR' : _MPPRECORD, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.MPPRecord) - }) -_sym_db.RegisterMessage(MPPRecord) - -AMPRecord = _reflection.GeneratedProtocolMessageType('AMPRecord', (_message.Message,), { - 'DESCRIPTOR' : _AMPRECORD, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.AMPRecord) - }) -_sym_db.RegisterMessage(AMPRecord) - -Route = _reflection.GeneratedProtocolMessageType('Route', (_message.Message,), { - 'DESCRIPTOR' : _ROUTE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Route) - }) -_sym_db.RegisterMessage(Route) - -NodeInfoRequest = _reflection.GeneratedProtocolMessageType('NodeInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _NODEINFOREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeInfoRequest) - }) -_sym_db.RegisterMessage(NodeInfoRequest) - -NodeInfo = _reflection.GeneratedProtocolMessageType('NodeInfo', (_message.Message,), { - 'DESCRIPTOR' : _NODEINFO, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeInfo) - }) -_sym_db.RegisterMessage(NodeInfo) - -LightningNode = _reflection.GeneratedProtocolMessageType('LightningNode', (_message.Message,), { - - 'FeaturesEntry' : _reflection.GeneratedProtocolMessageType('FeaturesEntry', (_message.Message,), { - 'DESCRIPTOR' : _LIGHTNINGNODE_FEATURESENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.LightningNode.FeaturesEntry) - }) - , - 'DESCRIPTOR' : _LIGHTNINGNODE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.LightningNode) - }) -_sym_db.RegisterMessage(LightningNode) -_sym_db.RegisterMessage(LightningNode.FeaturesEntry) - -NodeAddress = _reflection.GeneratedProtocolMessageType('NodeAddress', (_message.Message,), { - 'DESCRIPTOR' : _NODEADDRESS, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeAddress) - }) -_sym_db.RegisterMessage(NodeAddress) - -RoutingPolicy = _reflection.GeneratedProtocolMessageType('RoutingPolicy', (_message.Message,), { - 'DESCRIPTOR' : _ROUTINGPOLICY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.RoutingPolicy) - }) -_sym_db.RegisterMessage(RoutingPolicy) - -ChannelEdge = _reflection.GeneratedProtocolMessageType('ChannelEdge', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELEDGE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelEdge) - }) -_sym_db.RegisterMessage(ChannelEdge) - -ChannelGraphRequest = _reflection.GeneratedProtocolMessageType('ChannelGraphRequest', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELGRAPHREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelGraphRequest) - }) -_sym_db.RegisterMessage(ChannelGraphRequest) - -ChannelGraph = _reflection.GeneratedProtocolMessageType('ChannelGraph', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELGRAPH, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelGraph) - }) -_sym_db.RegisterMessage(ChannelGraph) - -NodeMetricsRequest = _reflection.GeneratedProtocolMessageType('NodeMetricsRequest', (_message.Message,), { - 'DESCRIPTOR' : _NODEMETRICSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeMetricsRequest) - }) -_sym_db.RegisterMessage(NodeMetricsRequest) - -NodeMetricsResponse = _reflection.GeneratedProtocolMessageType('NodeMetricsResponse', (_message.Message,), { - - 'BetweennessCentralityEntry' : _reflection.GeneratedProtocolMessageType('BetweennessCentralityEntry', (_message.Message,), { - 'DESCRIPTOR' : _NODEMETRICSRESPONSE_BETWEENNESSCENTRALITYENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeMetricsResponse.BetweennessCentralityEntry) - }) - , - 'DESCRIPTOR' : _NODEMETRICSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeMetricsResponse) - }) -_sym_db.RegisterMessage(NodeMetricsResponse) -_sym_db.RegisterMessage(NodeMetricsResponse.BetweennessCentralityEntry) - -FloatMetric = _reflection.GeneratedProtocolMessageType('FloatMetric', (_message.Message,), { - 'DESCRIPTOR' : _FLOATMETRIC, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FloatMetric) - }) -_sym_db.RegisterMessage(FloatMetric) - -ChanInfoRequest = _reflection.GeneratedProtocolMessageType('ChanInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _CHANINFOREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChanInfoRequest) - }) -_sym_db.RegisterMessage(ChanInfoRequest) - -NetworkInfoRequest = _reflection.GeneratedProtocolMessageType('NetworkInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _NETWORKINFOREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NetworkInfoRequest) - }) -_sym_db.RegisterMessage(NetworkInfoRequest) - -NetworkInfo = _reflection.GeneratedProtocolMessageType('NetworkInfo', (_message.Message,), { - 'DESCRIPTOR' : _NETWORKINFO, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NetworkInfo) - }) -_sym_db.RegisterMessage(NetworkInfo) - -StopRequest = _reflection.GeneratedProtocolMessageType('StopRequest', (_message.Message,), { - 'DESCRIPTOR' : _STOPREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.StopRequest) - }) -_sym_db.RegisterMessage(StopRequest) - -StopResponse = _reflection.GeneratedProtocolMessageType('StopResponse', (_message.Message,), { - 'DESCRIPTOR' : _STOPRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.StopResponse) - }) -_sym_db.RegisterMessage(StopResponse) - -GraphTopologySubscription = _reflection.GeneratedProtocolMessageType('GraphTopologySubscription', (_message.Message,), { - 'DESCRIPTOR' : _GRAPHTOPOLOGYSUBSCRIPTION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GraphTopologySubscription) - }) -_sym_db.RegisterMessage(GraphTopologySubscription) - -GraphTopologyUpdate = _reflection.GeneratedProtocolMessageType('GraphTopologyUpdate', (_message.Message,), { - 'DESCRIPTOR' : _GRAPHTOPOLOGYUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GraphTopologyUpdate) - }) -_sym_db.RegisterMessage(GraphTopologyUpdate) - -NodeUpdate = _reflection.GeneratedProtocolMessageType('NodeUpdate', (_message.Message,), { - - 'FeaturesEntry' : _reflection.GeneratedProtocolMessageType('FeaturesEntry', (_message.Message,), { - 'DESCRIPTOR' : _NODEUPDATE_FEATURESENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeUpdate.FeaturesEntry) - }) - , - 'DESCRIPTOR' : _NODEUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.NodeUpdate) - }) -_sym_db.RegisterMessage(NodeUpdate) -_sym_db.RegisterMessage(NodeUpdate.FeaturesEntry) - -ChannelEdgeUpdate = _reflection.GeneratedProtocolMessageType('ChannelEdgeUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELEDGEUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelEdgeUpdate) - }) -_sym_db.RegisterMessage(ChannelEdgeUpdate) - -ClosedChannelUpdate = _reflection.GeneratedProtocolMessageType('ClosedChannelUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CLOSEDCHANNELUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ClosedChannelUpdate) - }) -_sym_db.RegisterMessage(ClosedChannelUpdate) - -HopHint = _reflection.GeneratedProtocolMessageType('HopHint', (_message.Message,), { - 'DESCRIPTOR' : _HOPHINT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.HopHint) - }) -_sym_db.RegisterMessage(HopHint) - -SetID = _reflection.GeneratedProtocolMessageType('SetID', (_message.Message,), { - 'DESCRIPTOR' : _SETID, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.SetID) - }) -_sym_db.RegisterMessage(SetID) - -RouteHint = _reflection.GeneratedProtocolMessageType('RouteHint', (_message.Message,), { - 'DESCRIPTOR' : _ROUTEHINT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.RouteHint) - }) -_sym_db.RegisterMessage(RouteHint) - -AMPInvoiceState = _reflection.GeneratedProtocolMessageType('AMPInvoiceState', (_message.Message,), { - 'DESCRIPTOR' : _AMPINVOICESTATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.AMPInvoiceState) - }) -_sym_db.RegisterMessage(AMPInvoiceState) - -Invoice = _reflection.GeneratedProtocolMessageType('Invoice', (_message.Message,), { - - 'FeaturesEntry' : _reflection.GeneratedProtocolMessageType('FeaturesEntry', (_message.Message,), { - 'DESCRIPTOR' : _INVOICE_FEATURESENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Invoice.FeaturesEntry) - }) - , - - 'AmpInvoiceStateEntry' : _reflection.GeneratedProtocolMessageType('AmpInvoiceStateEntry', (_message.Message,), { - 'DESCRIPTOR' : _INVOICE_AMPINVOICESTATEENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Invoice.AmpInvoiceStateEntry) - }) - , - 'DESCRIPTOR' : _INVOICE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Invoice) - }) -_sym_db.RegisterMessage(Invoice) -_sym_db.RegisterMessage(Invoice.FeaturesEntry) -_sym_db.RegisterMessage(Invoice.AmpInvoiceStateEntry) - -InvoiceHTLC = _reflection.GeneratedProtocolMessageType('InvoiceHTLC', (_message.Message,), { - - 'CustomRecordsEntry' : _reflection.GeneratedProtocolMessageType('CustomRecordsEntry', (_message.Message,), { - 'DESCRIPTOR' : _INVOICEHTLC_CUSTOMRECORDSENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.InvoiceHTLC.CustomRecordsEntry) - }) - , - 'DESCRIPTOR' : _INVOICEHTLC, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.InvoiceHTLC) - }) -_sym_db.RegisterMessage(InvoiceHTLC) -_sym_db.RegisterMessage(InvoiceHTLC.CustomRecordsEntry) - -AMP = _reflection.GeneratedProtocolMessageType('AMP', (_message.Message,), { - 'DESCRIPTOR' : _AMP, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.AMP) - }) -_sym_db.RegisterMessage(AMP) - -AddInvoiceResponse = _reflection.GeneratedProtocolMessageType('AddInvoiceResponse', (_message.Message,), { - 'DESCRIPTOR' : _ADDINVOICERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.AddInvoiceResponse) - }) -_sym_db.RegisterMessage(AddInvoiceResponse) - -PaymentHash = _reflection.GeneratedProtocolMessageType('PaymentHash', (_message.Message,), { - 'DESCRIPTOR' : _PAYMENTHASH, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PaymentHash) - }) -_sym_db.RegisterMessage(PaymentHash) - -ListInvoiceRequest = _reflection.GeneratedProtocolMessageType('ListInvoiceRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTINVOICEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListInvoiceRequest) - }) -_sym_db.RegisterMessage(ListInvoiceRequest) - -ListInvoiceResponse = _reflection.GeneratedProtocolMessageType('ListInvoiceResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTINVOICERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListInvoiceResponse) - }) -_sym_db.RegisterMessage(ListInvoiceResponse) - -InvoiceSubscription = _reflection.GeneratedProtocolMessageType('InvoiceSubscription', (_message.Message,), { - 'DESCRIPTOR' : _INVOICESUBSCRIPTION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.InvoiceSubscription) - }) -_sym_db.RegisterMessage(InvoiceSubscription) - -Payment = _reflection.GeneratedProtocolMessageType('Payment', (_message.Message,), { - 'DESCRIPTOR' : _PAYMENT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Payment) - }) -_sym_db.RegisterMessage(Payment) - -HTLCAttempt = _reflection.GeneratedProtocolMessageType('HTLCAttempt', (_message.Message,), { - 'DESCRIPTOR' : _HTLCATTEMPT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.HTLCAttempt) - }) -_sym_db.RegisterMessage(HTLCAttempt) - -ListPaymentsRequest = _reflection.GeneratedProtocolMessageType('ListPaymentsRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTPAYMENTSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListPaymentsRequest) - }) -_sym_db.RegisterMessage(ListPaymentsRequest) - -ListPaymentsResponse = _reflection.GeneratedProtocolMessageType('ListPaymentsResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTPAYMENTSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListPaymentsResponse) - }) -_sym_db.RegisterMessage(ListPaymentsResponse) - -DeletePaymentRequest = _reflection.GeneratedProtocolMessageType('DeletePaymentRequest', (_message.Message,), { - 'DESCRIPTOR' : _DELETEPAYMENTREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DeletePaymentRequest) - }) -_sym_db.RegisterMessage(DeletePaymentRequest) - -DeleteAllPaymentsRequest = _reflection.GeneratedProtocolMessageType('DeleteAllPaymentsRequest', (_message.Message,), { - 'DESCRIPTOR' : _DELETEALLPAYMENTSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DeleteAllPaymentsRequest) - }) -_sym_db.RegisterMessage(DeleteAllPaymentsRequest) - -DeletePaymentResponse = _reflection.GeneratedProtocolMessageType('DeletePaymentResponse', (_message.Message,), { - 'DESCRIPTOR' : _DELETEPAYMENTRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DeletePaymentResponse) - }) -_sym_db.RegisterMessage(DeletePaymentResponse) - -DeleteAllPaymentsResponse = _reflection.GeneratedProtocolMessageType('DeleteAllPaymentsResponse', (_message.Message,), { - 'DESCRIPTOR' : _DELETEALLPAYMENTSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DeleteAllPaymentsResponse) - }) -_sym_db.RegisterMessage(DeleteAllPaymentsResponse) - -AbandonChannelRequest = _reflection.GeneratedProtocolMessageType('AbandonChannelRequest', (_message.Message,), { - 'DESCRIPTOR' : _ABANDONCHANNELREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.AbandonChannelRequest) - }) -_sym_db.RegisterMessage(AbandonChannelRequest) - -AbandonChannelResponse = _reflection.GeneratedProtocolMessageType('AbandonChannelResponse', (_message.Message,), { - 'DESCRIPTOR' : _ABANDONCHANNELRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.AbandonChannelResponse) - }) -_sym_db.RegisterMessage(AbandonChannelResponse) - -DebugLevelRequest = _reflection.GeneratedProtocolMessageType('DebugLevelRequest', (_message.Message,), { - 'DESCRIPTOR' : _DEBUGLEVELREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DebugLevelRequest) - }) -_sym_db.RegisterMessage(DebugLevelRequest) - -DebugLevelResponse = _reflection.GeneratedProtocolMessageType('DebugLevelResponse', (_message.Message,), { - 'DESCRIPTOR' : _DEBUGLEVELRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DebugLevelResponse) - }) -_sym_db.RegisterMessage(DebugLevelResponse) - -PayReqString = _reflection.GeneratedProtocolMessageType('PayReqString', (_message.Message,), { - 'DESCRIPTOR' : _PAYREQSTRING, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PayReqString) - }) -_sym_db.RegisterMessage(PayReqString) - -PayReq = _reflection.GeneratedProtocolMessageType('PayReq', (_message.Message,), { - - 'FeaturesEntry' : _reflection.GeneratedProtocolMessageType('FeaturesEntry', (_message.Message,), { - 'DESCRIPTOR' : _PAYREQ_FEATURESENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PayReq.FeaturesEntry) - }) - , - 'DESCRIPTOR' : _PAYREQ, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PayReq) - }) -_sym_db.RegisterMessage(PayReq) -_sym_db.RegisterMessage(PayReq.FeaturesEntry) - -Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), { - 'DESCRIPTOR' : _FEATURE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Feature) - }) -_sym_db.RegisterMessage(Feature) - -FeeReportRequest = _reflection.GeneratedProtocolMessageType('FeeReportRequest', (_message.Message,), { - 'DESCRIPTOR' : _FEEREPORTREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FeeReportRequest) - }) -_sym_db.RegisterMessage(FeeReportRequest) - -ChannelFeeReport = _reflection.GeneratedProtocolMessageType('ChannelFeeReport', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELFEEREPORT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelFeeReport) - }) -_sym_db.RegisterMessage(ChannelFeeReport) - -FeeReportResponse = _reflection.GeneratedProtocolMessageType('FeeReportResponse', (_message.Message,), { - 'DESCRIPTOR' : _FEEREPORTRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FeeReportResponse) - }) -_sym_db.RegisterMessage(FeeReportResponse) - -PolicyUpdateRequest = _reflection.GeneratedProtocolMessageType('PolicyUpdateRequest', (_message.Message,), { - 'DESCRIPTOR' : _POLICYUPDATEREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PolicyUpdateRequest) - }) -_sym_db.RegisterMessage(PolicyUpdateRequest) - -FailedUpdate = _reflection.GeneratedProtocolMessageType('FailedUpdate', (_message.Message,), { - 'DESCRIPTOR' : _FAILEDUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.FailedUpdate) - }) -_sym_db.RegisterMessage(FailedUpdate) - -PolicyUpdateResponse = _reflection.GeneratedProtocolMessageType('PolicyUpdateResponse', (_message.Message,), { - 'DESCRIPTOR' : _POLICYUPDATERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.PolicyUpdateResponse) - }) -_sym_db.RegisterMessage(PolicyUpdateResponse) - -ForwardingHistoryRequest = _reflection.GeneratedProtocolMessageType('ForwardingHistoryRequest', (_message.Message,), { - 'DESCRIPTOR' : _FORWARDINGHISTORYREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ForwardingHistoryRequest) - }) -_sym_db.RegisterMessage(ForwardingHistoryRequest) - -ForwardingEvent = _reflection.GeneratedProtocolMessageType('ForwardingEvent', (_message.Message,), { - 'DESCRIPTOR' : _FORWARDINGEVENT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ForwardingEvent) - }) -_sym_db.RegisterMessage(ForwardingEvent) - -ForwardingHistoryResponse = _reflection.GeneratedProtocolMessageType('ForwardingHistoryResponse', (_message.Message,), { - 'DESCRIPTOR' : _FORWARDINGHISTORYRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ForwardingHistoryResponse) - }) -_sym_db.RegisterMessage(ForwardingHistoryResponse) - -ExportChannelBackupRequest = _reflection.GeneratedProtocolMessageType('ExportChannelBackupRequest', (_message.Message,), { - 'DESCRIPTOR' : _EXPORTCHANNELBACKUPREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ExportChannelBackupRequest) - }) -_sym_db.RegisterMessage(ExportChannelBackupRequest) - -ChannelBackup = _reflection.GeneratedProtocolMessageType('ChannelBackup', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELBACKUP, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelBackup) - }) -_sym_db.RegisterMessage(ChannelBackup) - -MultiChanBackup = _reflection.GeneratedProtocolMessageType('MultiChanBackup', (_message.Message,), { - 'DESCRIPTOR' : _MULTICHANBACKUP, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.MultiChanBackup) - }) -_sym_db.RegisterMessage(MultiChanBackup) - -ChanBackupExportRequest = _reflection.GeneratedProtocolMessageType('ChanBackupExportRequest', (_message.Message,), { - 'DESCRIPTOR' : _CHANBACKUPEXPORTREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChanBackupExportRequest) - }) -_sym_db.RegisterMessage(ChanBackupExportRequest) - -ChanBackupSnapshot = _reflection.GeneratedProtocolMessageType('ChanBackupSnapshot', (_message.Message,), { - 'DESCRIPTOR' : _CHANBACKUPSNAPSHOT, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChanBackupSnapshot) - }) -_sym_db.RegisterMessage(ChanBackupSnapshot) - -ChannelBackups = _reflection.GeneratedProtocolMessageType('ChannelBackups', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELBACKUPS, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelBackups) - }) -_sym_db.RegisterMessage(ChannelBackups) - -RestoreChanBackupRequest = _reflection.GeneratedProtocolMessageType('RestoreChanBackupRequest', (_message.Message,), { - 'DESCRIPTOR' : _RESTORECHANBACKUPREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.RestoreChanBackupRequest) - }) -_sym_db.RegisterMessage(RestoreChanBackupRequest) - -RestoreBackupResponse = _reflection.GeneratedProtocolMessageType('RestoreBackupResponse', (_message.Message,), { - 'DESCRIPTOR' : _RESTOREBACKUPRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.RestoreBackupResponse) - }) -_sym_db.RegisterMessage(RestoreBackupResponse) - -ChannelBackupSubscription = _reflection.GeneratedProtocolMessageType('ChannelBackupSubscription', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELBACKUPSUBSCRIPTION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelBackupSubscription) - }) -_sym_db.RegisterMessage(ChannelBackupSubscription) - -VerifyChanBackupResponse = _reflection.GeneratedProtocolMessageType('VerifyChanBackupResponse', (_message.Message,), { - 'DESCRIPTOR' : _VERIFYCHANBACKUPRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.VerifyChanBackupResponse) - }) -_sym_db.RegisterMessage(VerifyChanBackupResponse) - -MacaroonPermission = _reflection.GeneratedProtocolMessageType('MacaroonPermission', (_message.Message,), { - 'DESCRIPTOR' : _MACAROONPERMISSION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.MacaroonPermission) - }) -_sym_db.RegisterMessage(MacaroonPermission) - -BakeMacaroonRequest = _reflection.GeneratedProtocolMessageType('BakeMacaroonRequest', (_message.Message,), { - 'DESCRIPTOR' : _BAKEMACAROONREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.BakeMacaroonRequest) - }) -_sym_db.RegisterMessage(BakeMacaroonRequest) - -BakeMacaroonResponse = _reflection.GeneratedProtocolMessageType('BakeMacaroonResponse', (_message.Message,), { - 'DESCRIPTOR' : _BAKEMACAROONRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.BakeMacaroonResponse) - }) -_sym_db.RegisterMessage(BakeMacaroonResponse) - -ListMacaroonIDsRequest = _reflection.GeneratedProtocolMessageType('ListMacaroonIDsRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTMACAROONIDSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListMacaroonIDsRequest) - }) -_sym_db.RegisterMessage(ListMacaroonIDsRequest) - -ListMacaroonIDsResponse = _reflection.GeneratedProtocolMessageType('ListMacaroonIDsResponse', (_message.Message,), { - 'DESCRIPTOR' : _LISTMACAROONIDSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListMacaroonIDsResponse) - }) -_sym_db.RegisterMessage(ListMacaroonIDsResponse) - -DeleteMacaroonIDRequest = _reflection.GeneratedProtocolMessageType('DeleteMacaroonIDRequest', (_message.Message,), { - 'DESCRIPTOR' : _DELETEMACAROONIDREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DeleteMacaroonIDRequest) - }) -_sym_db.RegisterMessage(DeleteMacaroonIDRequest) - -DeleteMacaroonIDResponse = _reflection.GeneratedProtocolMessageType('DeleteMacaroonIDResponse', (_message.Message,), { - 'DESCRIPTOR' : _DELETEMACAROONIDRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.DeleteMacaroonIDResponse) - }) -_sym_db.RegisterMessage(DeleteMacaroonIDResponse) - -MacaroonPermissionList = _reflection.GeneratedProtocolMessageType('MacaroonPermissionList', (_message.Message,), { - 'DESCRIPTOR' : _MACAROONPERMISSIONLIST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.MacaroonPermissionList) - }) -_sym_db.RegisterMessage(MacaroonPermissionList) - -ListPermissionsRequest = _reflection.GeneratedProtocolMessageType('ListPermissionsRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTPERMISSIONSREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListPermissionsRequest) - }) -_sym_db.RegisterMessage(ListPermissionsRequest) - -ListPermissionsResponse = _reflection.GeneratedProtocolMessageType('ListPermissionsResponse', (_message.Message,), { - - 'MethodPermissionsEntry' : _reflection.GeneratedProtocolMessageType('MethodPermissionsEntry', (_message.Message,), { - 'DESCRIPTOR' : _LISTPERMISSIONSRESPONSE_METHODPERMISSIONSENTRY, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListPermissionsResponse.MethodPermissionsEntry) - }) - , - 'DESCRIPTOR' : _LISTPERMISSIONSRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ListPermissionsResponse) - }) -_sym_db.RegisterMessage(ListPermissionsResponse) -_sym_db.RegisterMessage(ListPermissionsResponse.MethodPermissionsEntry) - -Failure = _reflection.GeneratedProtocolMessageType('Failure', (_message.Message,), { - 'DESCRIPTOR' : _FAILURE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Failure) - }) -_sym_db.RegisterMessage(Failure) - -ChannelUpdate = _reflection.GeneratedProtocolMessageType('ChannelUpdate', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELUPDATE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChannelUpdate) - }) -_sym_db.RegisterMessage(ChannelUpdate) - -MacaroonId = _reflection.GeneratedProtocolMessageType('MacaroonId', (_message.Message,), { - 'DESCRIPTOR' : _MACAROONID, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.MacaroonId) - }) -_sym_db.RegisterMessage(MacaroonId) - -Op = _reflection.GeneratedProtocolMessageType('Op', (_message.Message,), { - 'DESCRIPTOR' : _OP, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.Op) - }) -_sym_db.RegisterMessage(Op) - -CheckMacPermRequest = _reflection.GeneratedProtocolMessageType('CheckMacPermRequest', (_message.Message,), { - 'DESCRIPTOR' : _CHECKMACPERMREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.CheckMacPermRequest) - }) -_sym_db.RegisterMessage(CheckMacPermRequest) - -CheckMacPermResponse = _reflection.GeneratedProtocolMessageType('CheckMacPermResponse', (_message.Message,), { - 'DESCRIPTOR' : _CHECKMACPERMRESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.CheckMacPermResponse) - }) -_sym_db.RegisterMessage(CheckMacPermResponse) - -RPCMiddlewareRequest = _reflection.GeneratedProtocolMessageType('RPCMiddlewareRequest', (_message.Message,), { - 'DESCRIPTOR' : _RPCMIDDLEWAREREQUEST, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.RPCMiddlewareRequest) - }) -_sym_db.RegisterMessage(RPCMiddlewareRequest) - -StreamAuth = _reflection.GeneratedProtocolMessageType('StreamAuth', (_message.Message,), { - 'DESCRIPTOR' : _STREAMAUTH, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.StreamAuth) - }) -_sym_db.RegisterMessage(StreamAuth) - -RPCMessage = _reflection.GeneratedProtocolMessageType('RPCMessage', (_message.Message,), { - 'DESCRIPTOR' : _RPCMESSAGE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.RPCMessage) - }) -_sym_db.RegisterMessage(RPCMessage) - -RPCMiddlewareResponse = _reflection.GeneratedProtocolMessageType('RPCMiddlewareResponse', (_message.Message,), { - 'DESCRIPTOR' : _RPCMIDDLEWARERESPONSE, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.RPCMiddlewareResponse) - }) -_sym_db.RegisterMessage(RPCMiddlewareResponse) - -MiddlewareRegistration = _reflection.GeneratedProtocolMessageType('MiddlewareRegistration', (_message.Message,), { - 'DESCRIPTOR' : _MIDDLEWAREREGISTRATION, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.MiddlewareRegistration) - }) -_sym_db.RegisterMessage(MiddlewareRegistration) - -InterceptFeedback = _reflection.GeneratedProtocolMessageType('InterceptFeedback', (_message.Message,), { - 'DESCRIPTOR' : _INTERCEPTFEEDBACK, - '__module__' : 'lightning_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.InterceptFeedback) - }) -_sym_db.RegisterMessage(InterceptFeedback) - -_LIGHTNING = DESCRIPTOR.services_by_name['Lightning'] +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'lightning_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None @@ -1857,8 +53,12 @@ if _descriptor._USE_C_DESCRIPTORS == False: _CHANNEL.fields_by_name['remote_chan_reserve_sat']._serialized_options = b'\030\001' _CHANNEL.fields_by_name['static_remote_key']._options = None _CHANNEL.fields_by_name['static_remote_key']._serialized_options = b'\030\001' + _CHANNEL.fields_by_name['peer_scid_alias']._options = None + _CHANNEL.fields_by_name['peer_scid_alias']._serialized_options = b'0\001' _CHANNELCLOSESUMMARY.fields_by_name['chan_id']._options = None _CHANNELCLOSESUMMARY.fields_by_name['chan_id']._serialized_options = b'0\001' + _CHANNELCLOSESUMMARY.fields_by_name['zero_conf_confirmed_scid']._options = None + _CHANNELCLOSESUMMARY.fields_by_name['zero_conf_confirmed_scid']._serialized_options = b'0\001' _PEER_FEATURESENTRY._options = None _PEER_FEATURESENTRY._serialized_options = b'8\001' _GETINFORESPONSE_FEATURESENTRY._options = None @@ -1905,6 +105,12 @@ if _descriptor._USE_C_DESCRIPTORS == False: _ROUTE.fields_by_name['total_amt']._serialized_options = b'\030\001' _LIGHTNINGNODE_FEATURESENTRY._options = None _LIGHTNINGNODE_FEATURESENTRY._serialized_options = b'8\001' + _LIGHTNINGNODE_CUSTOMRECORDSENTRY._options = None + _LIGHTNINGNODE_CUSTOMRECORDSENTRY._serialized_options = b'8\001' + _ROUTINGPOLICY_CUSTOMRECORDSENTRY._options = None + _ROUTINGPOLICY_CUSTOMRECORDSENTRY._serialized_options = b'8\001' + _CHANNELEDGE_CUSTOMRECORDSENTRY._options = None + _CHANNELEDGE_CUSTOMRECORDSENTRY._serialized_options = b'8\001' _CHANNELEDGE.fields_by_name['channel_id']._options = None _CHANNELEDGE.fields_by_name['channel_id']._serialized_options = b'0\001' _CHANNELEDGE.fields_by_name['last_update']._options = None @@ -1963,464 +169,480 @@ if _descriptor._USE_C_DESCRIPTORS == False: _LIGHTNING.methods_by_name['SendPayment']._serialized_options = b'\210\002\001' _LIGHTNING.methods_by_name['SendToRoute']._options = None _LIGHTNING.methods_by_name['SendToRoute']._serialized_options = b'\210\002\001' - _OUTPUTSCRIPTTYPE._serialized_start=27242 - _OUTPUTSCRIPTTYPE._serialized_end=27537 - _ADDRESSTYPE._serialized_start=27540 - _ADDRESSTYPE._serialized_end=27712 - _COMMITMENTTYPE._serialized_start=27714 - _COMMITMENTTYPE._serialized_end=27834 - _INITIATOR._serialized_start=27836 - _INITIATOR._serialized_end=27933 - _RESOLUTIONTYPE._serialized_start=27935 - _RESOLUTIONTYPE._serialized_end=28031 - _RESOLUTIONOUTCOME._serialized_start=28033 - _RESOLUTIONOUTCOME._serialized_end=28146 - _NODEMETRICTYPE._serialized_start=28148 - _NODEMETRICTYPE._serialized_end=28205 - _INVOICEHTLCSTATE._serialized_start=28207 - _INVOICEHTLCSTATE._serialized_end=28266 - _PAYMENTFAILUREREASON._serialized_start=28269 - _PAYMENTFAILUREREASON._serialized_end=28486 - _FEATUREBIT._serialized_start=28489 - _FEATUREBIT._serialized_end=29080 - _UPDATEFAILURE._serialized_start=29083 - _UPDATEFAILURE._serialized_end=29255 - _SUBSCRIBECUSTOMMESSAGESREQUEST._serialized_start=26 - _SUBSCRIBECUSTOMMESSAGESREQUEST._serialized_end=58 - _CUSTOMMESSAGE._serialized_start=60 - _CUSTOMMESSAGE._serialized_end=117 - _SENDCUSTOMMESSAGEREQUEST._serialized_start=119 - _SENDCUSTOMMESSAGEREQUEST._serialized_end=187 - _SENDCUSTOMMESSAGERESPONSE._serialized_start=189 - _SENDCUSTOMMESSAGERESPONSE._serialized_end=216 - _UTXO._serialized_start=219 - _UTXO._serialized_end=381 - _OUTPUTDETAIL._serialized_start=384 - _OUTPUTDETAIL._serialized_end=542 - _TRANSACTION._serialized_start=545 - _TRANSACTION._serialized_end=861 - _GETTRANSACTIONSREQUEST._serialized_start=863 - _GETTRANSACTIONSREQUEST._serialized_end=946 - _TRANSACTIONDETAILS._serialized_start=948 - _TRANSACTIONDETAILS._serialized_end=1010 - _FEELIMIT._serialized_start=1012 - _FEELIMIT._serialized_end=1089 - _SENDREQUEST._serialized_start=1092 - _SENDREQUEST._serialized_end=1614 - _SENDREQUEST_DESTCUSTOMRECORDSENTRY._serialized_start=1558 - _SENDREQUEST_DESTCUSTOMRECORDSENTRY._serialized_end=1614 - _SENDRESPONSE._serialized_start=1616 - _SENDRESPONSE._serialized_end=1738 - _SENDTOROUTEREQUEST._serialized_start=1740 - _SENDTOROUTEREQUEST._serialized_end=1850 - _CHANNELACCEPTREQUEST._serialized_start=1853 - _CHANNELACCEPTREQUEST._serialized_end=2210 - _CHANNELACCEPTRESPONSE._serialized_start=2213 - _CHANNELACCEPTRESPONSE._serialized_end=2457 - _CHANNELPOINT._serialized_start=2459 - _CHANNELPOINT._serialized_end=2569 - _OUTPOINT._serialized_start=2571 - _OUTPOINT._serialized_end=2641 - _PREVIOUSOUTPOINT._serialized_start=2643 - _PREVIOUSOUTPOINT._serialized_end=2702 - _LIGHTNINGADDRESS._serialized_start=2704 - _LIGHTNINGADDRESS._serialized_end=2752 - _ESTIMATEFEEREQUEST._serialized_start=2755 - _ESTIMATEFEEREQUEST._serialized_end=2962 - _ESTIMATEFEEREQUEST_ADDRTOAMOUNTENTRY._serialized_start=2911 - _ESTIMATEFEEREQUEST_ADDRTOAMOUNTENTRY._serialized_end=2962 - _ESTIMATEFEERESPONSE._serialized_start=2964 - _ESTIMATEFEERESPONSE._serialized_end=3059 - _SENDMANYREQUEST._serialized_start=3062 - _SENDMANYREQUEST._serialized_end=3327 - _SENDMANYREQUEST_ADDRTOAMOUNTENTRY._serialized_start=2911 - _SENDMANYREQUEST_ADDRTOAMOUNTENTRY._serialized_end=2962 - _SENDMANYRESPONSE._serialized_start=3329 - _SENDMANYRESPONSE._serialized_end=3361 - _SENDCOINSREQUEST._serialized_start=3364 - _SENDCOINSREQUEST._serialized_end=3561 - _SENDCOINSRESPONSE._serialized_start=3563 - _SENDCOINSRESPONSE._serialized_end=3596 - _LISTUNSPENTREQUEST._serialized_start=3598 - _LISTUNSPENTREQUEST._serialized_end=3673 - _LISTUNSPENTRESPONSE._serialized_start=3675 - _LISTUNSPENTRESPONSE._serialized_end=3724 - _NEWADDRESSREQUEST._serialized_start=3726 - _NEWADDRESSREQUEST._serialized_end=3796 - _NEWADDRESSRESPONSE._serialized_start=3798 - _NEWADDRESSRESPONSE._serialized_end=3835 - _SIGNMESSAGEREQUEST._serialized_start=3837 - _SIGNMESSAGEREQUEST._serialized_end=3891 - _SIGNMESSAGERESPONSE._serialized_start=3893 - _SIGNMESSAGERESPONSE._serialized_end=3933 - _VERIFYMESSAGEREQUEST._serialized_start=3935 - _VERIFYMESSAGEREQUEST._serialized_end=3989 - _VERIFYMESSAGERESPONSE._serialized_start=3991 - _VERIFYMESSAGERESPONSE._serialized_end=4045 - _CONNECTPEERREQUEST._serialized_start=4047 - _CONNECTPEERREQUEST._serialized_end=4137 - _CONNECTPEERRESPONSE._serialized_start=4139 - _CONNECTPEERRESPONSE._serialized_end=4160 - _DISCONNECTPEERREQUEST._serialized_start=4162 - _DISCONNECTPEERREQUEST._serialized_end=4202 - _DISCONNECTPEERRESPONSE._serialized_start=4204 - _DISCONNECTPEERRESPONSE._serialized_end=4228 - _HTLC._serialized_start=4231 - _HTLC._serialized_end=4396 - _CHANNELCONSTRAINTS._serialized_start=4399 - _CHANNELCONSTRAINTS._serialized_end=4569 - _CHANNEL._serialized_start=4572 - _CHANNEL._serialized_end=5388 - _LISTCHANNELSREQUEST._serialized_start=5390 - _LISTCHANNELSREQUEST._serialized_end=5512 - _LISTCHANNELSRESPONSE._serialized_start=5514 - _LISTCHANNELSRESPONSE._serialized_end=5570 - _CHANNELCLOSESUMMARY._serialized_start=5573 - _CHANNELCLOSESUMMARY._serialized_end=6126 - _CHANNELCLOSESUMMARY_CLOSURETYPE._serialized_start=5988 - _CHANNELCLOSESUMMARY_CLOSURETYPE._serialized_end=6126 - _RESOLUTION._serialized_start=6129 - _RESOLUTION._serialized_end=6307 - _CLOSEDCHANNELSREQUEST._serialized_start=6310 - _CLOSEDCHANNELSREQUEST._serialized_end=6458 - _CLOSEDCHANNELSRESPONSE._serialized_start=6460 - _CLOSEDCHANNELSRESPONSE._serialized_end=6530 - _PEER._serialized_start=6533 - _PEER._serialized_end=7028 - _PEER_FEATURESENTRY._serialized_start=6883 - _PEER_FEATURESENTRY._serialized_end=6946 - _PEER_SYNCTYPE._serialized_start=6948 - _PEER_SYNCTYPE._serialized_end=7028 - _TIMESTAMPEDERROR._serialized_start=7030 - _TIMESTAMPEDERROR._serialized_end=7082 - _LISTPEERSREQUEST._serialized_start=7084 - _LISTPEERSREQUEST._serialized_end=7124 - _LISTPEERSRESPONSE._serialized_start=7126 - _LISTPEERSRESPONSE._serialized_end=7173 - _PEEREVENTSUBSCRIPTION._serialized_start=7175 - _PEEREVENTSUBSCRIPTION._serialized_end=7198 - _PEEREVENT._serialized_start=7200 - _PEEREVENT._serialized_end=7318 - _PEEREVENT_EVENTTYPE._serialized_start=7272 - _PEEREVENT_EVENTTYPE._serialized_end=7318 - _GETINFOREQUEST._serialized_start=7320 - _GETINFOREQUEST._serialized_end=7336 - _GETINFORESPONSE._serialized_start=7339 - _GETINFORESPONSE._serialized_end=7907 - _GETINFORESPONSE_FEATURESENTRY._serialized_start=6883 - _GETINFORESPONSE_FEATURESENTRY._serialized_end=6946 - _GETRECOVERYINFOREQUEST._serialized_start=7909 - _GETRECOVERYINFOREQUEST._serialized_end=7933 - _GETRECOVERYINFORESPONSE._serialized_start=7935 - _GETRECOVERYINFORESPONSE._serialized_end=8028 - _CHAIN._serialized_start=8030 - _CHAIN._serialized_end=8069 - _CONFIRMATIONUPDATE._serialized_start=8071 - _CONFIRMATIONUPDATE._serialized_end=8156 - _CHANNELOPENUPDATE._serialized_start=8158 - _CHANNELOPENUPDATE._serialized_end=8221 - _CHANNELCLOSEUPDATE._serialized_start=8223 - _CHANNELCLOSEUPDATE._serialized_end=8282 - _CLOSECHANNELREQUEST._serialized_start=8285 - _CLOSECHANNELREQUEST._serialized_end=8461 - _CLOSESTATUSUPDATE._serialized_start=8463 - _CLOSESTATUSUPDATE._serialized_end=8588 - _PENDINGUPDATE._serialized_start=8590 - _PENDINGUPDATE._serialized_end=8641 - _READYFORPSBTFUNDING._serialized_start=8643 - _READYFORPSBTFUNDING._serialized_end=8727 - _BATCHOPENCHANNELREQUEST._serialized_start=8730 - _BATCHOPENCHANNELREQUEST._serialized_end=8903 - _BATCHOPENCHANNEL._serialized_start=8906 - _BATCHOPENCHANNEL._serialized_end=9155 - _BATCHOPENCHANNELRESPONSE._serialized_start=9157 - _BATCHOPENCHANNELRESPONSE._serialized_end=9231 - _OPENCHANNELREQUEST._serialized_start=9234 - _OPENCHANNELREQUEST._serialized_end=9740 - _OPENSTATUSUPDATE._serialized_start=9743 - _OPENSTATUSUPDATE._serialized_end=9938 - _KEYLOCATOR._serialized_start=9940 - _KEYLOCATOR._serialized_end=9991 - _KEYDESCRIPTOR._serialized_start=9993 - _KEYDESCRIPTOR._serialized_end=10067 - _CHANPOINTSHIM._serialized_start=10070 - _CHANPOINTSHIM._serialized_end=10246 - _PSBTSHIM._serialized_start=10248 - _PSBTSHIM._serialized_end=10322 - _FUNDINGSHIM._serialized_start=10324 - _FUNDINGSHIM._serialized_end=10432 - _FUNDINGSHIMCANCEL._serialized_start=10434 - _FUNDINGSHIMCANCEL._serialized_end=10478 - _FUNDINGPSBTVERIFY._serialized_start=10480 - _FUNDINGPSBTVERIFY._serialized_end=10568 - _FUNDINGPSBTFINALIZE._serialized_start=10570 - _FUNDINGPSBTFINALIZE._serialized_end=10659 - _FUNDINGTRANSITIONMSG._serialized_start=10662 - _FUNDINGTRANSITIONMSG._serialized_end=10891 - _FUNDINGSTATESTEPRESP._serialized_start=10893 - _FUNDINGSTATESTEPRESP._serialized_end=10915 - _PENDINGHTLC._serialized_start=10918 - _PENDINGHTLC._serialized_end=11052 - _PENDINGCHANNELSREQUEST._serialized_start=11054 - _PENDINGCHANNELSREQUEST._serialized_end=11078 - _PENDINGCHANNELSRESPONSE._serialized_start=11081 - _PENDINGCHANNELSRESPONSE._serialized_end=12864 - _PENDINGCHANNELSRESPONSE_PENDINGCHANNEL._serialized_start=11479 - _PENDINGCHANNELSRESPONSE_PENDINGCHANNEL._serialized_end=11835 - _PENDINGCHANNELSRESPONSE_PENDINGOPENCHANNEL._serialized_start=11838 - _PENDINGCHANNELSRESPONSE_PENDINGOPENCHANNEL._serialized_end=11991 - _PENDINGCHANNELSRESPONSE_WAITINGCLOSECHANNEL._serialized_start=11994 - _PENDINGCHANNELSRESPONSE_WAITINGCLOSECHANNEL._serialized_end=12189 - _PENDINGCHANNELSRESPONSE_COMMITMENTS._serialized_start=12192 - _PENDINGCHANNELSRESPONSE_COMMITMENTS._serialized_end=12375 - _PENDINGCHANNELSRESPONSE_CLOSEDCHANNEL._serialized_start=12377 - _PENDINGCHANNELSRESPONSE_CLOSEDCHANNEL._serialized_end=12478 - _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL._serialized_start=12481 - _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL._serialized_end=12864 - _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL_ANCHORSTATE._serialized_start=12815 - _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL_ANCHORSTATE._serialized_end=12864 - _CHANNELEVENTSUBSCRIPTION._serialized_start=12866 - _CHANNELEVENTSUBSCRIPTION._serialized_end=12892 - _CHANNELEVENTUPDATE._serialized_start=12895 - _CHANNELEVENTUPDATE._serialized_end=13426 - _CHANNELEVENTUPDATE_UPDATETYPE._serialized_start=13269 - _CHANNELEVENTUPDATE_UPDATETYPE._serialized_end=13415 - _WALLETACCOUNTBALANCE._serialized_start=13428 - _WALLETACCOUNTBALANCE._serialized_end=13506 - _WALLETBALANCEREQUEST._serialized_start=13508 - _WALLETBALANCEREQUEST._serialized_end=13530 - _WALLETBALANCERESPONSE._serialized_start=13533 - _WALLETBALANCERESPONSE._serialized_end=13856 - _WALLETBALANCERESPONSE_ACCOUNTBALANCEENTRY._serialized_start=13774 - _WALLETBALANCERESPONSE_ACCOUNTBALANCEENTRY._serialized_end=13856 - _AMOUNT._serialized_start=13858 - _AMOUNT._serialized_end=13893 - _CHANNELBALANCEREQUEST._serialized_start=13895 - _CHANNELBALANCEREQUEST._serialized_end=13918 - _CHANNELBALANCERESPONSE._serialized_start=13921 - _CHANNELBALANCERESPONSE._serialized_end=14277 - _QUERYROUTESREQUEST._serialized_start=14280 - _QUERYROUTESREQUEST._serialized_end=14891 - _QUERYROUTESREQUEST_DESTCUSTOMRECORDSENTRY._serialized_start=1558 - _QUERYROUTESREQUEST_DESTCUSTOMRECORDSENTRY._serialized_end=1614 - _NODEPAIR._serialized_start=14893 - _NODEPAIR._serialized_end=14929 - _EDGELOCATOR._serialized_start=14931 - _EDGELOCATOR._serialized_end=14995 - _QUERYROUTESRESPONSE._serialized_start=14997 - _QUERYROUTESRESPONSE._serialized_end=15070 - _HOP._serialized_start=15073 - _HOP._serialized_end=15479 - _HOP_CUSTOMRECORDSENTRY._serialized_start=15427 - _HOP_CUSTOMRECORDSENTRY._serialized_end=15479 - _MPPRECORD._serialized_start=15481 - _MPPRECORD._serialized_end=15538 - _AMPRECORD._serialized_start=15540 - _AMPRECORD._serialized_end=15608 - _ROUTE._serialized_start=15611 - _ROUTE._serialized_end=15765 - _NODEINFOREQUEST._serialized_start=15767 - _NODEINFOREQUEST._serialized_end=15827 - _NODEINFO._serialized_start=15830 - _NODEINFO._serialized_end=15960 - _LIGHTNINGNODE._serialized_start=15963 - _LIGHTNINGNODE._serialized_end=16204 - _LIGHTNINGNODE_FEATURESENTRY._serialized_start=6883 - _LIGHTNINGNODE_FEATURESENTRY._serialized_end=6946 - _NODEADDRESS._serialized_start=16206 - _NODEADDRESS._serialized_end=16250 - _ROUTINGPOLICY._serialized_start=16253 - _ROUTINGPOLICY._serialized_end=16425 - _CHANNELEDGE._serialized_start=16428 - _CHANNELEDGE._serialized_end=16654 - _CHANNELGRAPHREQUEST._serialized_start=16656 - _CHANNELGRAPHREQUEST._serialized_end=16706 - _CHANNELGRAPH._serialized_start=16708 - _CHANNELGRAPH._serialized_end=16794 - _NODEMETRICSREQUEST._serialized_start=16796 - _NODEMETRICSREQUEST._serialized_end=16854 - _NODEMETRICSRESPONSE._serialized_start=16857 - _NODEMETRICSRESPONSE._serialized_end=17047 - _NODEMETRICSRESPONSE_BETWEENNESSCENTRALITYENTRY._serialized_start=16967 - _NODEMETRICSRESPONSE_BETWEENNESSCENTRALITYENTRY._serialized_end=17047 - _FLOATMETRIC._serialized_start=17049 - _FLOATMETRIC._serialized_end=17103 - _CHANINFOREQUEST._serialized_start=17105 - _CHANINFOREQUEST._serialized_end=17143 - _NETWORKINFOREQUEST._serialized_start=17145 - _NETWORKINFOREQUEST._serialized_end=17165 - _NETWORKINFO._serialized_start=17168 - _NETWORKINFO._serialized_end=17463 - _STOPREQUEST._serialized_start=17465 - _STOPREQUEST._serialized_end=17478 - _STOPRESPONSE._serialized_start=17480 - _STOPRESPONSE._serialized_end=17494 - _GRAPHTOPOLOGYSUBSCRIPTION._serialized_start=17496 - _GRAPHTOPOLOGYSUBSCRIPTION._serialized_end=17523 - _GRAPHTOPOLOGYUPDATE._serialized_start=17526 - _GRAPHTOPOLOGYUPDATE._serialized_end=17689 - _NODEUPDATE._serialized_start=17692 - _NODEUPDATE._serialized_end=17968 - _NODEUPDATE_FEATURESENTRY._serialized_start=6883 - _NODEUPDATE_FEATURESENTRY._serialized_end=6946 - _CHANNELEDGEUPDATE._serialized_start=17971 - _CHANNELEDGEUPDATE._serialized_end=18167 - _CLOSEDCHANNELUPDATE._serialized_start=18169 - _CLOSEDCHANNELUPDATE._serialized_end=18293 - _HOPHINT._serialized_start=18296 - _HOPHINT._serialized_end=18430 - _SETID._serialized_start=18432 - _SETID._serialized_end=18455 - _ROUTEHINT._serialized_start=18457 - _ROUTEHINT._serialized_end=18503 - _AMPINVOICESTATE._serialized_start=18505 - _AMPINVOICESTATE._serialized_end=18628 - _INVOICE._serialized_start=18631 - _INVOICE._serialized_end=19532 - _INVOICE_FEATURESENTRY._serialized_start=6883 - _INVOICE_FEATURESENTRY._serialized_end=6946 - _INVOICE_AMPINVOICESTATEENTRY._serialized_start=19381 - _INVOICE_AMPINVOICESTATEENTRY._serialized_end=19459 - _INVOICE_INVOICESTATE._serialized_start=19461 - _INVOICE_INVOICESTATE._serialized_end=19526 - _INVOICEHTLC._serialized_start=19535 - _INVOICEHTLC._serialized_end=19906 - _INVOICEHTLC_CUSTOMRECORDSENTRY._serialized_start=15427 - _INVOICEHTLC_CUSTOMRECORDSENTRY._serialized_end=15479 - _AMP._serialized_start=19908 - _AMP._serialized_end=20002 - _ADDINVOICERESPONSE._serialized_start=20004 - _ADDINVOICERESPONSE._serialized_end=20106 - _PAYMENTHASH._serialized_start=20108 - _PAYMENTHASH._serialized_end=20161 - _LISTINVOICEREQUEST._serialized_start=20163 - _LISTINVOICEREQUEST._serialized_end=20271 - _LISTINVOICERESPONSE._serialized_start=20273 - _LISTINVOICERESPONSE._serialized_end=20383 - _INVOICESUBSCRIPTION._serialized_start=20385 - _INVOICESUBSCRIPTION._serialized_end=20447 - _PAYMENT._serialized_start=20450 - _PAYMENT._serialized_end=20930 - _PAYMENT_PAYMENTSTATUS._serialized_start=20854 - _PAYMENT_PAYMENTSTATUS._serialized_end=20924 - _HTLCATTEMPT._serialized_start=20933 - _HTLCATTEMPT._serialized_end=21199 - _HTLCATTEMPT_HTLCSTATUS._serialized_start=21145 - _HTLCATTEMPT_HTLCSTATUS._serialized_end=21199 - _LISTPAYMENTSREQUEST._serialized_start=21202 - _LISTPAYMENTSREQUEST._serialized_end=21343 - _LISTPAYMENTSRESPONSE._serialized_start=21346 - _LISTPAYMENTSRESPONSE._serialized_end=21485 - _DELETEPAYMENTREQUEST._serialized_start=21487 - _DELETEPAYMENTREQUEST._serialized_end=21558 - _DELETEALLPAYMENTSREQUEST._serialized_start=21560 - _DELETEALLPAYMENTSREQUEST._serialized_end=21643 - _DELETEPAYMENTRESPONSE._serialized_start=21645 - _DELETEPAYMENTRESPONSE._serialized_end=21668 - _DELETEALLPAYMENTSRESPONSE._serialized_start=21670 - _DELETEALLPAYMENTSRESPONSE._serialized_end=21697 - _ABANDONCHANNELREQUEST._serialized_start=21700 - _ABANDONCHANNELREQUEST._serialized_end=21834 - _ABANDONCHANNELRESPONSE._serialized_start=21836 - _ABANDONCHANNELRESPONSE._serialized_end=21860 - _DEBUGLEVELREQUEST._serialized_start=21862 - _DEBUGLEVELREQUEST._serialized_end=21915 - _DEBUGLEVELRESPONSE._serialized_start=21917 - _DEBUGLEVELRESPONSE._serialized_end=21958 - _PAYREQSTRING._serialized_start=21960 - _PAYREQSTRING._serialized_end=21991 - _PAYREQ._serialized_start=21994 - _PAYREQ._serialized_end=22384 - _PAYREQ_FEATURESENTRY._serialized_start=6883 - _PAYREQ_FEATURESENTRY._serialized_end=6946 - _FEATURE._serialized_start=22386 - _FEATURE._serialized_end=22448 - _FEEREPORTREQUEST._serialized_start=22450 - _FEEREPORTREQUEST._serialized_end=22468 - _CHANNELFEEREPORT._serialized_start=22470 - _CHANNELFEEREPORT._serialized_end=22594 - _FEEREPORTRESPONSE._serialized_start=22597 - _FEEREPORTRESPONSE._serialized_end=22729 - _POLICYUPDATEREQUEST._serialized_start=22732 - _POLICYUPDATEREQUEST._serialized_end=22990 - _FAILEDUPDATE._serialized_start=22992 - _FAILEDUPDATE._serialized_end=23101 - _POLICYUPDATERESPONSE._serialized_start=23103 - _POLICYUPDATERESPONSE._serialized_end=23170 - _FORWARDINGHISTORYREQUEST._serialized_start=23172 - _FORWARDINGHISTORYREQUEST._serialized_end=23282 - _FORWARDINGEVENT._serialized_start=23285 - _FORWARDINGEVENT._serialized_end=23503 - _FORWARDINGHISTORYRESPONSE._serialized_start=23505 - _FORWARDINGHISTORYRESPONSE._serialized_end=23610 - _EXPORTCHANNELBACKUPREQUEST._serialized_start=23612 - _EXPORTCHANNELBACKUPREQUEST._serialized_end=23681 - _CHANNELBACKUP._serialized_start=23683 - _CHANNELBACKUP._serialized_end=23760 - _MULTICHANBACKUP._serialized_start=23762 - _MULTICHANBACKUP._serialized_end=23848 - _CHANBACKUPEXPORTREQUEST._serialized_start=23850 - _CHANBACKUPEXPORTREQUEST._serialized_end=23875 - _CHANBACKUPSNAPSHOT._serialized_start=23877 - _CHANBACKUPSNAPSHOT._serialized_end=24000 - _CHANNELBACKUPS._serialized_start=24002 - _CHANNELBACKUPS._serialized_end=24062 - _RESTORECHANBACKUPREQUEST._serialized_start=24064 - _RESTORECHANBACKUPREQUEST._serialized_end=24176 - _RESTOREBACKUPRESPONSE._serialized_start=24178 - _RESTOREBACKUPRESPONSE._serialized_end=24201 - _CHANNELBACKUPSUBSCRIPTION._serialized_start=24203 - _CHANNELBACKUPSUBSCRIPTION._serialized_end=24230 - _VERIFYCHANBACKUPRESPONSE._serialized_start=24232 - _VERIFYCHANBACKUPRESPONSE._serialized_end=24258 - _MACAROONPERMISSION._serialized_start=24260 - _MACAROONPERMISSION._serialized_end=24312 - _BAKEMACAROONREQUEST._serialized_start=24314 - _BAKEMACAROONREQUEST._serialized_end=24440 - _BAKEMACAROONRESPONSE._serialized_start=24442 - _BAKEMACAROONRESPONSE._serialized_end=24482 - _LISTMACAROONIDSREQUEST._serialized_start=24484 - _LISTMACAROONIDSREQUEST._serialized_end=24508 - _LISTMACAROONIDSRESPONSE._serialized_start=24510 - _LISTMACAROONIDSRESPONSE._serialized_end=24557 - _DELETEMACAROONIDREQUEST._serialized_start=24559 - _DELETEMACAROONIDREQUEST._serialized_end=24605 - _DELETEMACAROONIDRESPONSE._serialized_start=24607 - _DELETEMACAROONIDRESPONSE._serialized_end=24650 - _MACAROONPERMISSIONLIST._serialized_start=24652 - _MACAROONPERMISSIONLIST._serialized_end=24724 - _LISTPERMISSIONSREQUEST._serialized_start=24726 - _LISTPERMISSIONSREQUEST._serialized_end=24750 - _LISTPERMISSIONSRESPONSE._serialized_start=24753 - _LISTPERMISSIONSRESPONSE._serialized_end=24950 - _LISTPERMISSIONSRESPONSE_METHODPERMISSIONSENTRY._serialized_start=24863 - _LISTPERMISSIONSRESPONSE_METHODPERMISSIONSENTRY._serialized_end=24950 - _FAILURE._serialized_start=24953 - _FAILURE._serialized_end=25934 - _FAILURE_FAILURECODE._serialized_start=25177 - _FAILURE_FAILURECODE._serialized_end=25928 - _CHANNELUPDATE._serialized_start=25937 - _CHANNELUPDATE._serialized_end=26219 - _MACAROONID._serialized_start=26221 - _MACAROONID._serialized_end=26291 - _OP._serialized_start=26293 - _OP._serialized_end=26330 - _CHECKMACPERMREQUEST._serialized_start=26332 - _CHECKMACPERMREQUEST._serialized_end=26439 - _CHECKMACPERMRESPONSE._serialized_start=26441 - _CHECKMACPERMRESPONSE._serialized_end=26478 - _RPCMIDDLEWAREREQUEST._serialized_start=26481 - _RPCMIDDLEWAREREQUEST._serialized_end=26731 - _STREAMAUTH._serialized_start=26733 - _STREAMAUTH._serialized_end=26770 - _RPCMESSAGE._serialized_start=26772 - _RPCMESSAGE._serialized_end=26868 - _RPCMIDDLEWARERESPONSE._serialized_start=26871 - _RPCMIDDLEWARERESPONSE._serialized_end=27033 - _MIDDLEWAREREGISTRATION._serialized_start=27035 - _MIDDLEWAREREGISTRATION._serialized_end=27145 - _INTERCEPTFEEDBACK._serialized_start=27147 - _INTERCEPTFEEDBACK._serialized_end=27239 - _LIGHTNING._serialized_start=29258 - _LIGHTNING._serialized_end=34067 + _OUTPUTSCRIPTTYPE._serialized_start=28607 + _OUTPUTSCRIPTTYPE._serialized_end=28938 + _ADDRESSTYPE._serialized_start=28941 + _ADDRESSTYPE._serialized_end=29113 + _COMMITMENTTYPE._serialized_start=29115 + _COMMITMENTTYPE._serialized_end=29235 + _INITIATOR._serialized_start=29237 + _INITIATOR._serialized_end=29334 + _RESOLUTIONTYPE._serialized_start=29336 + _RESOLUTIONTYPE._serialized_end=29432 + _RESOLUTIONOUTCOME._serialized_start=29434 + _RESOLUTIONOUTCOME._serialized_end=29547 + _NODEMETRICTYPE._serialized_start=29549 + _NODEMETRICTYPE._serialized_end=29606 + _INVOICEHTLCSTATE._serialized_start=29608 + _INVOICEHTLCSTATE._serialized_end=29667 + _PAYMENTFAILUREREASON._serialized_start=29670 + _PAYMENTFAILUREREASON._serialized_end=29887 + _FEATUREBIT._serialized_start=29890 + _FEATUREBIT._serialized_end=30481 + _UPDATEFAILURE._serialized_start=30484 + _UPDATEFAILURE._serialized_end=30656 + _LOOKUPHTLCRESOLUTIONREQUEST._serialized_start=26 + _LOOKUPHTLCRESOLUTIONREQUEST._serialized_end=92 + _LOOKUPHTLCRESOLUTIONRESPONSE._serialized_start=94 + _LOOKUPHTLCRESOLUTIONRESPONSE._serialized_end=159 + _SUBSCRIBECUSTOMMESSAGESREQUEST._serialized_start=161 + _SUBSCRIBECUSTOMMESSAGESREQUEST._serialized_end=193 + _CUSTOMMESSAGE._serialized_start=195 + _CUSTOMMESSAGE._serialized_end=252 + _SENDCUSTOMMESSAGEREQUEST._serialized_start=254 + _SENDCUSTOMMESSAGEREQUEST._serialized_end=322 + _SENDCUSTOMMESSAGERESPONSE._serialized_start=324 + _SENDCUSTOMMESSAGERESPONSE._serialized_end=351 + _UTXO._serialized_start=354 + _UTXO._serialized_end=516 + _OUTPUTDETAIL._serialized_start=519 + _OUTPUTDETAIL._serialized_end=677 + _TRANSACTION._serialized_start=680 + _TRANSACTION._serialized_end=996 + _GETTRANSACTIONSREQUEST._serialized_start=998 + _GETTRANSACTIONSREQUEST._serialized_end=1081 + _TRANSACTIONDETAILS._serialized_start=1083 + _TRANSACTIONDETAILS._serialized_end=1145 + _FEELIMIT._serialized_start=1147 + _FEELIMIT._serialized_end=1224 + _SENDREQUEST._serialized_start=1227 + _SENDREQUEST._serialized_end=1749 + _SENDREQUEST_DESTCUSTOMRECORDSENTRY._serialized_start=1693 + _SENDREQUEST_DESTCUSTOMRECORDSENTRY._serialized_end=1749 + _SENDRESPONSE._serialized_start=1751 + _SENDRESPONSE._serialized_end=1873 + _SENDTOROUTEREQUEST._serialized_start=1875 + _SENDTOROUTEREQUEST._serialized_end=1985 + _CHANNELACCEPTREQUEST._serialized_start=1988 + _CHANNELACCEPTREQUEST._serialized_end=2396 + _CHANNELACCEPTRESPONSE._serialized_start=2399 + _CHANNELACCEPTRESPONSE._serialized_end=2662 + _CHANNELPOINT._serialized_start=2664 + _CHANNELPOINT._serialized_end=2774 + _OUTPOINT._serialized_start=2776 + _OUTPOINT._serialized_end=2846 + _PREVIOUSOUTPOINT._serialized_start=2848 + _PREVIOUSOUTPOINT._serialized_end=2907 + _LIGHTNINGADDRESS._serialized_start=2909 + _LIGHTNINGADDRESS._serialized_end=2957 + _ESTIMATEFEEREQUEST._serialized_start=2960 + _ESTIMATEFEEREQUEST._serialized_end=3167 + _ESTIMATEFEEREQUEST_ADDRTOAMOUNTENTRY._serialized_start=3116 + _ESTIMATEFEEREQUEST_ADDRTOAMOUNTENTRY._serialized_end=3167 + _ESTIMATEFEERESPONSE._serialized_start=3169 + _ESTIMATEFEERESPONSE._serialized_end=3264 + _SENDMANYREQUEST._serialized_start=3267 + _SENDMANYREQUEST._serialized_end=3532 + _SENDMANYREQUEST_ADDRTOAMOUNTENTRY._serialized_start=3116 + _SENDMANYREQUEST_ADDRTOAMOUNTENTRY._serialized_end=3167 + _SENDMANYRESPONSE._serialized_start=3534 + _SENDMANYRESPONSE._serialized_end=3566 + _SENDCOINSREQUEST._serialized_start=3569 + _SENDCOINSREQUEST._serialized_end=3766 + _SENDCOINSRESPONSE._serialized_start=3768 + _SENDCOINSRESPONSE._serialized_end=3801 + _LISTUNSPENTREQUEST._serialized_start=3803 + _LISTUNSPENTREQUEST._serialized_end=3878 + _LISTUNSPENTRESPONSE._serialized_start=3880 + _LISTUNSPENTRESPONSE._serialized_end=3929 + _NEWADDRESSREQUEST._serialized_start=3931 + _NEWADDRESSREQUEST._serialized_end=4001 + _NEWADDRESSRESPONSE._serialized_start=4003 + _NEWADDRESSRESPONSE._serialized_end=4040 + _SIGNMESSAGEREQUEST._serialized_start=4042 + _SIGNMESSAGEREQUEST._serialized_end=4096 + _SIGNMESSAGERESPONSE._serialized_start=4098 + _SIGNMESSAGERESPONSE._serialized_end=4138 + _VERIFYMESSAGEREQUEST._serialized_start=4140 + _VERIFYMESSAGEREQUEST._serialized_end=4194 + _VERIFYMESSAGERESPONSE._serialized_start=4196 + _VERIFYMESSAGERESPONSE._serialized_end=4250 + _CONNECTPEERREQUEST._serialized_start=4252 + _CONNECTPEERREQUEST._serialized_end=4342 + _CONNECTPEERRESPONSE._serialized_start=4344 + _CONNECTPEERRESPONSE._serialized_end=4365 + _DISCONNECTPEERREQUEST._serialized_start=4367 + _DISCONNECTPEERREQUEST._serialized_end=4407 + _DISCONNECTPEERRESPONSE._serialized_start=4409 + _DISCONNECTPEERRESPONSE._serialized_end=4433 + _HTLC._serialized_start=4436 + _HTLC._serialized_end=4601 + _CHANNELCONSTRAINTS._serialized_start=4604 + _CHANNELCONSTRAINTS._serialized_end=4774 + _CHANNEL._serialized_start=4777 + _CHANNEL._serialized_end=5716 + _LISTCHANNELSREQUEST._serialized_start=5719 + _LISTCHANNELSREQUEST._serialized_end=5868 + _LISTCHANNELSRESPONSE._serialized_start=5870 + _LISTCHANNELSRESPONSE._serialized_end=5926 + _ALIASMAP._serialized_start=5928 + _ALIASMAP._serialized_end=5974 + _LISTALIASESREQUEST._serialized_start=5976 + _LISTALIASESREQUEST._serialized_end=5996 + _LISTALIASESRESPONSE._serialized_start=5998 + _LISTALIASESRESPONSE._serialized_end=6056 + _CHANNELCLOSESUMMARY._serialized_start=6059 + _CHANNELCLOSESUMMARY._serialized_end=6671 + _CHANNELCLOSESUMMARY_CLOSURETYPE._serialized_start=6533 + _CHANNELCLOSESUMMARY_CLOSURETYPE._serialized_end=6671 + _RESOLUTION._serialized_start=6674 + _RESOLUTION._serialized_end=6852 + _CLOSEDCHANNELSREQUEST._serialized_start=6855 + _CLOSEDCHANNELSREQUEST._serialized_end=7003 + _CLOSEDCHANNELSRESPONSE._serialized_start=7005 + _CLOSEDCHANNELSRESPONSE._serialized_end=7075 + _PEER._serialized_start=7078 + _PEER._serialized_end=7573 + _PEER_FEATURESENTRY._serialized_start=7428 + _PEER_FEATURESENTRY._serialized_end=7491 + _PEER_SYNCTYPE._serialized_start=7493 + _PEER_SYNCTYPE._serialized_end=7573 + _TIMESTAMPEDERROR._serialized_start=7575 + _TIMESTAMPEDERROR._serialized_end=7627 + _LISTPEERSREQUEST._serialized_start=7629 + _LISTPEERSREQUEST._serialized_end=7669 + _LISTPEERSRESPONSE._serialized_start=7671 + _LISTPEERSRESPONSE._serialized_end=7718 + _PEEREVENTSUBSCRIPTION._serialized_start=7720 + _PEEREVENTSUBSCRIPTION._serialized_end=7743 + _PEEREVENT._serialized_start=7745 + _PEEREVENT._serialized_end=7863 + _PEEREVENT_EVENTTYPE._serialized_start=7817 + _PEEREVENT_EVENTTYPE._serialized_end=7863 + _GETINFOREQUEST._serialized_start=7865 + _GETINFOREQUEST._serialized_end=7881 + _GETINFORESPONSE._serialized_start=7884 + _GETINFORESPONSE._serialized_end=8490 + _GETINFORESPONSE_FEATURESENTRY._serialized_start=7428 + _GETINFORESPONSE_FEATURESENTRY._serialized_end=7491 + _GETRECOVERYINFOREQUEST._serialized_start=8492 + _GETRECOVERYINFOREQUEST._serialized_end=8516 + _GETRECOVERYINFORESPONSE._serialized_start=8518 + _GETRECOVERYINFORESPONSE._serialized_end=8611 + _CHAIN._serialized_start=8613 + _CHAIN._serialized_end=8652 + _CONFIRMATIONUPDATE._serialized_start=8654 + _CONFIRMATIONUPDATE._serialized_end=8739 + _CHANNELOPENUPDATE._serialized_start=8741 + _CHANNELOPENUPDATE._serialized_end=8804 + _CHANNELCLOSEUPDATE._serialized_start=8806 + _CHANNELCLOSEUPDATE._serialized_end=8865 + _CLOSECHANNELREQUEST._serialized_start=8868 + _CLOSECHANNELREQUEST._serialized_end=9071 + _CLOSESTATUSUPDATE._serialized_start=9073 + _CLOSESTATUSUPDATE._serialized_end=9198 + _PENDINGUPDATE._serialized_start=9200 + _PENDINGUPDATE._serialized_end=9251 + _READYFORPSBTFUNDING._serialized_start=9253 + _READYFORPSBTFUNDING._serialized_end=9337 + _BATCHOPENCHANNELREQUEST._serialized_start=9340 + _BATCHOPENCHANNELREQUEST._serialized_end=9513 + _BATCHOPENCHANNEL._serialized_start=9516 + _BATCHOPENCHANNEL._serialized_end=9765 + _BATCHOPENCHANNELRESPONSE._serialized_start=9767 + _BATCHOPENCHANNELRESPONSE._serialized_end=9841 + _OPENCHANNELREQUEST._serialized_start=9844 + _OPENCHANNELREQUEST._serialized_end=10520 + _OPENSTATUSUPDATE._serialized_start=10523 + _OPENSTATUSUPDATE._serialized_end=10718 + _KEYLOCATOR._serialized_start=10720 + _KEYLOCATOR._serialized_end=10771 + _KEYDESCRIPTOR._serialized_start=10773 + _KEYDESCRIPTOR._serialized_end=10847 + _CHANPOINTSHIM._serialized_start=10850 + _CHANPOINTSHIM._serialized_end=11026 + _PSBTSHIM._serialized_start=11028 + _PSBTSHIM._serialized_end=11102 + _FUNDINGSHIM._serialized_start=11104 + _FUNDINGSHIM._serialized_end=11212 + _FUNDINGSHIMCANCEL._serialized_start=11214 + _FUNDINGSHIMCANCEL._serialized_end=11258 + _FUNDINGPSBTVERIFY._serialized_start=11260 + _FUNDINGPSBTVERIFY._serialized_end=11348 + _FUNDINGPSBTFINALIZE._serialized_start=11350 + _FUNDINGPSBTFINALIZE._serialized_end=11439 + _FUNDINGTRANSITIONMSG._serialized_start=11442 + _FUNDINGTRANSITIONMSG._serialized_end=11671 + _FUNDINGSTATESTEPRESP._serialized_start=11673 + _FUNDINGSTATESTEPRESP._serialized_end=11695 + _PENDINGHTLC._serialized_start=11698 + _PENDINGHTLC._serialized_end=11832 + _PENDINGCHANNELSREQUEST._serialized_start=11834 + _PENDINGCHANNELSREQUEST._serialized_end=11858 + _PENDINGCHANNELSRESPONSE._serialized_start=11861 + _PENDINGCHANNELSRESPONSE._serialized_end=13644 + _PENDINGCHANNELSRESPONSE_PENDINGCHANNEL._serialized_start=12259 + _PENDINGCHANNELSRESPONSE_PENDINGCHANNEL._serialized_end=12615 + _PENDINGCHANNELSRESPONSE_PENDINGOPENCHANNEL._serialized_start=12618 + _PENDINGCHANNELSRESPONSE_PENDINGOPENCHANNEL._serialized_end=12771 + _PENDINGCHANNELSRESPONSE_WAITINGCLOSECHANNEL._serialized_start=12774 + _PENDINGCHANNELSRESPONSE_WAITINGCLOSECHANNEL._serialized_end=12969 + _PENDINGCHANNELSRESPONSE_COMMITMENTS._serialized_start=12972 + _PENDINGCHANNELSRESPONSE_COMMITMENTS._serialized_end=13155 + _PENDINGCHANNELSRESPONSE_CLOSEDCHANNEL._serialized_start=13157 + _PENDINGCHANNELSRESPONSE_CLOSEDCHANNEL._serialized_end=13258 + _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL._serialized_start=13261 + _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL._serialized_end=13644 + _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL_ANCHORSTATE._serialized_start=13595 + _PENDINGCHANNELSRESPONSE_FORCECLOSEDCHANNEL_ANCHORSTATE._serialized_end=13644 + _CHANNELEVENTSUBSCRIPTION._serialized_start=13646 + _CHANNELEVENTSUBSCRIPTION._serialized_end=13672 + _CHANNELEVENTUPDATE._serialized_start=13675 + _CHANNELEVENTUPDATE._serialized_end=14206 + _CHANNELEVENTUPDATE_UPDATETYPE._serialized_start=14049 + _CHANNELEVENTUPDATE_UPDATETYPE._serialized_end=14195 + _WALLETACCOUNTBALANCE._serialized_start=14208 + _WALLETACCOUNTBALANCE._serialized_end=14286 + _WALLETBALANCEREQUEST._serialized_start=14288 + _WALLETBALANCEREQUEST._serialized_end=14310 + _WALLETBALANCERESPONSE._serialized_start=14313 + _WALLETBALANCERESPONSE._serialized_end=14636 + _WALLETBALANCERESPONSE_ACCOUNTBALANCEENTRY._serialized_start=14554 + _WALLETBALANCERESPONSE_ACCOUNTBALANCEENTRY._serialized_end=14636 + _AMOUNT._serialized_start=14638 + _AMOUNT._serialized_end=14673 + _CHANNELBALANCEREQUEST._serialized_start=14675 + _CHANNELBALANCEREQUEST._serialized_end=14698 + _CHANNELBALANCERESPONSE._serialized_start=14701 + _CHANNELBALANCERESPONSE._serialized_end=15057 + _QUERYROUTESREQUEST._serialized_start=15060 + _QUERYROUTESREQUEST._serialized_end=15671 + _QUERYROUTESREQUEST_DESTCUSTOMRECORDSENTRY._serialized_start=1693 + _QUERYROUTESREQUEST_DESTCUSTOMRECORDSENTRY._serialized_end=1749 + _NODEPAIR._serialized_start=15673 + _NODEPAIR._serialized_end=15709 + _EDGELOCATOR._serialized_start=15711 + _EDGELOCATOR._serialized_end=15775 + _QUERYROUTESRESPONSE._serialized_start=15777 + _QUERYROUTESRESPONSE._serialized_end=15850 + _HOP._serialized_start=15853 + _HOP._serialized_end=16259 + _HOP_CUSTOMRECORDSENTRY._serialized_start=16207 + _HOP_CUSTOMRECORDSENTRY._serialized_end=16259 + _MPPRECORD._serialized_start=16261 + _MPPRECORD._serialized_end=16318 + _AMPRECORD._serialized_start=16320 + _AMPRECORD._serialized_end=16388 + _ROUTE._serialized_start=16391 + _ROUTE._serialized_end=16545 + _NODEINFOREQUEST._serialized_start=16547 + _NODEINFOREQUEST._serialized_end=16607 + _NODEINFO._serialized_start=16610 + _NODEINFO._serialized_end=16740 + _LIGHTNINGNODE._serialized_start=16743 + _LIGHTNINGNODE._serialized_end=17103 + _LIGHTNINGNODE_FEATURESENTRY._serialized_start=7428 + _LIGHTNINGNODE_FEATURESENTRY._serialized_end=7491 + _LIGHTNINGNODE_CUSTOMRECORDSENTRY._serialized_start=16207 + _LIGHTNINGNODE_CUSTOMRECORDSENTRY._serialized_end=16259 + _NODEADDRESS._serialized_start=17105 + _NODEADDRESS._serialized_end=17149 + _ROUTINGPOLICY._serialized_start=17152 + _ROUTINGPOLICY._serialized_end=17443 + _ROUTINGPOLICY_CUSTOMRECORDSENTRY._serialized_start=16207 + _ROUTINGPOLICY_CUSTOMRECORDSENTRY._serialized_end=16259 + _CHANNELEDGE._serialized_start=17446 + _CHANNELEDGE._serialized_end=17789 + _CHANNELEDGE_CUSTOMRECORDSENTRY._serialized_start=16207 + _CHANNELEDGE_CUSTOMRECORDSENTRY._serialized_end=16259 + _CHANNELGRAPHREQUEST._serialized_start=17791 + _CHANNELGRAPHREQUEST._serialized_end=17841 + _CHANNELGRAPH._serialized_start=17843 + _CHANNELGRAPH._serialized_end=17929 + _NODEMETRICSREQUEST._serialized_start=17931 + _NODEMETRICSREQUEST._serialized_end=17989 + _NODEMETRICSRESPONSE._serialized_start=17992 + _NODEMETRICSRESPONSE._serialized_end=18182 + _NODEMETRICSRESPONSE_BETWEENNESSCENTRALITYENTRY._serialized_start=18102 + _NODEMETRICSRESPONSE_BETWEENNESSCENTRALITYENTRY._serialized_end=18182 + _FLOATMETRIC._serialized_start=18184 + _FLOATMETRIC._serialized_end=18238 + _CHANINFOREQUEST._serialized_start=18240 + _CHANINFOREQUEST._serialized_end=18278 + _NETWORKINFOREQUEST._serialized_start=18280 + _NETWORKINFOREQUEST._serialized_end=18300 + _NETWORKINFO._serialized_start=18303 + _NETWORKINFO._serialized_end=18598 + _STOPREQUEST._serialized_start=18600 + _STOPREQUEST._serialized_end=18613 + _STOPRESPONSE._serialized_start=18615 + _STOPRESPONSE._serialized_end=18629 + _GRAPHTOPOLOGYSUBSCRIPTION._serialized_start=18631 + _GRAPHTOPOLOGYSUBSCRIPTION._serialized_end=18658 + _GRAPHTOPOLOGYUPDATE._serialized_start=18661 + _GRAPHTOPOLOGYUPDATE._serialized_end=18824 + _NODEUPDATE._serialized_start=18827 + _NODEUPDATE._serialized_end=19103 + _NODEUPDATE_FEATURESENTRY._serialized_start=7428 + _NODEUPDATE_FEATURESENTRY._serialized_end=7491 + _CHANNELEDGEUPDATE._serialized_start=19106 + _CHANNELEDGEUPDATE._serialized_end=19302 + _CLOSEDCHANNELUPDATE._serialized_start=19304 + _CLOSEDCHANNELUPDATE._serialized_end=19428 + _HOPHINT._serialized_start=19431 + _HOPHINT._serialized_end=19565 + _SETID._serialized_start=19567 + _SETID._serialized_end=19590 + _ROUTEHINT._serialized_start=19592 + _ROUTEHINT._serialized_end=19638 + _AMPINVOICESTATE._serialized_start=19640 + _AMPINVOICESTATE._serialized_end=19763 + _INVOICE._serialized_start=19766 + _INVOICE._serialized_end=20667 + _INVOICE_FEATURESENTRY._serialized_start=7428 + _INVOICE_FEATURESENTRY._serialized_end=7491 + _INVOICE_AMPINVOICESTATEENTRY._serialized_start=20516 + _INVOICE_AMPINVOICESTATEENTRY._serialized_end=20594 + _INVOICE_INVOICESTATE._serialized_start=20596 + _INVOICE_INVOICESTATE._serialized_end=20661 + _INVOICEHTLC._serialized_start=20670 + _INVOICEHTLC._serialized_end=21041 + _INVOICEHTLC_CUSTOMRECORDSENTRY._serialized_start=16207 + _INVOICEHTLC_CUSTOMRECORDSENTRY._serialized_end=16259 + _AMP._serialized_start=21043 + _AMP._serialized_end=21137 + _ADDINVOICERESPONSE._serialized_start=21139 + _ADDINVOICERESPONSE._serialized_end=21241 + _PAYMENTHASH._serialized_start=21243 + _PAYMENTHASH._serialized_end=21296 + _LISTINVOICEREQUEST._serialized_start=21299 + _LISTINVOICEREQUEST._serialized_end=21463 + _LISTINVOICERESPONSE._serialized_start=21465 + _LISTINVOICERESPONSE._serialized_end=21575 + _INVOICESUBSCRIPTION._serialized_start=21577 + _INVOICESUBSCRIPTION._serialized_end=21639 + _PAYMENT._serialized_start=21642 + _PAYMENT._serialized_end=22122 + _PAYMENT_PAYMENTSTATUS._serialized_start=22046 + _PAYMENT_PAYMENTSTATUS._serialized_end=22116 + _HTLCATTEMPT._serialized_start=22125 + _HTLCATTEMPT._serialized_end=22391 + _HTLCATTEMPT_HTLCSTATUS._serialized_start=22337 + _HTLCATTEMPT_HTLCSTATUS._serialized_end=22391 + _LISTPAYMENTSREQUEST._serialized_start=22394 + _LISTPAYMENTSREQUEST._serialized_end=22591 + _LISTPAYMENTSRESPONSE._serialized_start=22594 + _LISTPAYMENTSRESPONSE._serialized_end=22733 + _DELETEPAYMENTREQUEST._serialized_start=22735 + _DELETEPAYMENTREQUEST._serialized_end=22806 + _DELETEALLPAYMENTSREQUEST._serialized_start=22808 + _DELETEALLPAYMENTSREQUEST._serialized_end=22891 + _DELETEPAYMENTRESPONSE._serialized_start=22893 + _DELETEPAYMENTRESPONSE._serialized_end=22916 + _DELETEALLPAYMENTSRESPONSE._serialized_start=22918 + _DELETEALLPAYMENTSRESPONSE._serialized_end=22945 + _ABANDONCHANNELREQUEST._serialized_start=22948 + _ABANDONCHANNELREQUEST._serialized_end=23082 + _ABANDONCHANNELRESPONSE._serialized_start=23084 + _ABANDONCHANNELRESPONSE._serialized_end=23108 + _DEBUGLEVELREQUEST._serialized_start=23110 + _DEBUGLEVELREQUEST._serialized_end=23163 + _DEBUGLEVELRESPONSE._serialized_start=23165 + _DEBUGLEVELRESPONSE._serialized_end=23206 + _PAYREQSTRING._serialized_start=23208 + _PAYREQSTRING._serialized_end=23239 + _PAYREQ._serialized_start=23242 + _PAYREQ._serialized_end=23632 + _PAYREQ_FEATURESENTRY._serialized_start=7428 + _PAYREQ_FEATURESENTRY._serialized_end=7491 + _FEATURE._serialized_start=23634 + _FEATURE._serialized_end=23696 + _FEEREPORTREQUEST._serialized_start=23698 + _FEEREPORTREQUEST._serialized_end=23716 + _CHANNELFEEREPORT._serialized_start=23718 + _CHANNELFEEREPORT._serialized_end=23842 + _FEEREPORTRESPONSE._serialized_start=23845 + _FEEREPORTRESPONSE._serialized_end=23977 + _POLICYUPDATEREQUEST._serialized_start=23980 + _POLICYUPDATEREQUEST._serialized_end=24238 + _FAILEDUPDATE._serialized_start=24240 + _FAILEDUPDATE._serialized_end=24349 + _POLICYUPDATERESPONSE._serialized_start=24351 + _POLICYUPDATERESPONSE._serialized_end=24418 + _FORWARDINGHISTORYREQUEST._serialized_start=24421 + _FORWARDINGHISTORYREQUEST._serialized_end=24558 + _FORWARDINGEVENT._serialized_start=24561 + _FORWARDINGEVENT._serialized_end=24826 + _FORWARDINGHISTORYRESPONSE._serialized_start=24828 + _FORWARDINGHISTORYRESPONSE._serialized_end=24933 + _EXPORTCHANNELBACKUPREQUEST._serialized_start=24935 + _EXPORTCHANNELBACKUPREQUEST._serialized_end=25004 + _CHANNELBACKUP._serialized_start=25006 + _CHANNELBACKUP._serialized_end=25083 + _MULTICHANBACKUP._serialized_start=25085 + _MULTICHANBACKUP._serialized_end=25171 + _CHANBACKUPEXPORTREQUEST._serialized_start=25173 + _CHANBACKUPEXPORTREQUEST._serialized_end=25198 + _CHANBACKUPSNAPSHOT._serialized_start=25200 + _CHANBACKUPSNAPSHOT._serialized_end=25323 + _CHANNELBACKUPS._serialized_start=25325 + _CHANNELBACKUPS._serialized_end=25385 + _RESTORECHANBACKUPREQUEST._serialized_start=25387 + _RESTORECHANBACKUPREQUEST._serialized_end=25499 + _RESTOREBACKUPRESPONSE._serialized_start=25501 + _RESTOREBACKUPRESPONSE._serialized_end=25524 + _CHANNELBACKUPSUBSCRIPTION._serialized_start=25526 + _CHANNELBACKUPSUBSCRIPTION._serialized_end=25553 + _VERIFYCHANBACKUPRESPONSE._serialized_start=25555 + _VERIFYCHANBACKUPRESPONSE._serialized_end=25581 + _MACAROONPERMISSION._serialized_start=25583 + _MACAROONPERMISSION._serialized_end=25635 + _BAKEMACAROONREQUEST._serialized_start=25637 + _BAKEMACAROONREQUEST._serialized_end=25763 + _BAKEMACAROONRESPONSE._serialized_start=25765 + _BAKEMACAROONRESPONSE._serialized_end=25805 + _LISTMACAROONIDSREQUEST._serialized_start=25807 + _LISTMACAROONIDSREQUEST._serialized_end=25831 + _LISTMACAROONIDSRESPONSE._serialized_start=25833 + _LISTMACAROONIDSRESPONSE._serialized_end=25880 + _DELETEMACAROONIDREQUEST._serialized_start=25882 + _DELETEMACAROONIDREQUEST._serialized_end=25928 + _DELETEMACAROONIDRESPONSE._serialized_start=25930 + _DELETEMACAROONIDRESPONSE._serialized_end=25973 + _MACAROONPERMISSIONLIST._serialized_start=25975 + _MACAROONPERMISSIONLIST._serialized_end=26047 + _LISTPERMISSIONSREQUEST._serialized_start=26049 + _LISTPERMISSIONSREQUEST._serialized_end=26073 + _LISTPERMISSIONSRESPONSE._serialized_start=26076 + _LISTPERMISSIONSRESPONSE._serialized_end=26273 + _LISTPERMISSIONSRESPONSE_METHODPERMISSIONSENTRY._serialized_start=26186 + _LISTPERMISSIONSRESPONSE_METHODPERMISSIONSENTRY._serialized_end=26273 + _FAILURE._serialized_start=26276 + _FAILURE._serialized_end=27257 + _FAILURE_FAILURECODE._serialized_start=26500 + _FAILURE_FAILURECODE._serialized_end=27251 + _CHANNELUPDATE._serialized_start=27260 + _CHANNELUPDATE._serialized_end=27542 + _MACAROONID._serialized_start=27544 + _MACAROONID._serialized_end=27614 + _OP._serialized_start=27616 + _OP._serialized_end=27653 + _CHECKMACPERMREQUEST._serialized_start=27655 + _CHECKMACPERMREQUEST._serialized_end=27762 + _CHECKMACPERMRESPONSE._serialized_start=27764 + _CHECKMACPERMRESPONSE._serialized_end=27801 + _RPCMIDDLEWAREREQUEST._serialized_start=27804 + _RPCMIDDLEWAREREQUEST._serialized_end=28078 + _STREAMAUTH._serialized_start=28080 + _STREAMAUTH._serialized_end=28117 + _RPCMESSAGE._serialized_start=28119 + _RPCMESSAGE._serialized_end=28233 + _RPCMIDDLEWARERESPONSE._serialized_start=28236 + _RPCMIDDLEWARERESPONSE._serialized_end=28398 + _MIDDLEWAREREGISTRATION._serialized_start=28400 + _MIDDLEWAREREGISTRATION._serialized_end=28510 + _INTERCEPTFEEDBACK._serialized_start=28512 + _INTERCEPTFEEDBACK._serialized_end=28604 + _LIGHTNING._serialized_start=30659 + _LIGHTNING._serialized_end=35635 # @@protoc_insertion_point(module_scope) diff --git a/home.admin/config.scripts/lndlibs/lightning_pb2_grpc.py b/home.admin/config.scripts/lndlibs/lightning_pb2_grpc.py index a89d25775..6ea7d5f0e 100644 --- a/home.admin/config.scripts/lndlibs/lightning_pb2_grpc.py +++ b/home.admin/config.scripts/lndlibs/lightning_pb2_grpc.py @@ -5,7 +5,6 @@ import grpc from . import lightning_pb2 as lightning__pb2 - class LightningStub(object): """ Comments in this file will be directly parsed into the API @@ -358,6 +357,16 @@ class LightningStub(object): request_serializer=lightning__pb2.SubscribeCustomMessagesRequest.SerializeToString, response_deserializer=lightning__pb2.CustomMessage.FromString, ) + self.ListAliases = channel.unary_unary( + '/lnrpc.Lightning/ListAliases', + request_serializer=lightning__pb2.ListAliasesRequest.SerializeToString, + response_deserializer=lightning__pb2.ListAliasesResponse.FromString, + ) + self.LookupHtlcResolution = channel.unary_unary( + '/lnrpc.Lightning/LookupHtlcResolution', + request_serializer=lightning__pb2.LookupHtlcResolutionRequest.SerializeToString, + response_deserializer=lightning__pb2.LookupHtlcResolutionResponse.FromString, + ) class LightningServicer(object): @@ -1093,6 +1102,30 @@ class LightningServicer(object): """lncli: `subscribecustom` SubscribeCustomMessages subscribes to a stream of incoming custom peer messages. + + To include messages with type outside of the custom range (>= 32768) lnd + needs to be compiled with the `dev` build tag, and the message type to + override should be specified in lnd's experimental protocol configuration. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListAliases(self, request, context): + """lncli: `listaliases` + ListAliases returns the set of all aliases that have ever existed with + their confirmed SCID (if it exists) and/or the base SCID (in the case of + zero conf). + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def LookupHtlcResolution(self, request, context): + """ + LookupHtlcResolution retrieves a final htlc resolution from the database. + If the htlc has no final resolution yet, a NotFound grpc status code is + returned. """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') @@ -1426,6 +1459,16 @@ def add_LightningServicer_to_server(servicer, server): request_deserializer=lightning__pb2.SubscribeCustomMessagesRequest.FromString, response_serializer=lightning__pb2.CustomMessage.SerializeToString, ), + 'ListAliases': grpc.unary_unary_rpc_method_handler( + servicer.ListAliases, + request_deserializer=lightning__pb2.ListAliasesRequest.FromString, + response_serializer=lightning__pb2.ListAliasesResponse.SerializeToString, + ), + 'LookupHtlcResolution': grpc.unary_unary_rpc_method_handler( + servicer.LookupHtlcResolution, + request_deserializer=lightning__pb2.LookupHtlcResolutionRequest.FromString, + response_serializer=lightning__pb2.LookupHtlcResolutionResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'lnrpc.Lightning', rpc_method_handlers) @@ -2558,3 +2601,37 @@ class Lightning(object): lightning__pb2.CustomMessage.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListAliases(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, '/lnrpc.Lightning/ListAliases', + lightning__pb2.ListAliasesRequest.SerializeToString, + lightning__pb2.ListAliasesResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def LookupHtlcResolution(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, '/lnrpc.Lightning/LookupHtlcResolution', + lightning__pb2.LookupHtlcResolutionRequest.SerializeToString, + lightning__pb2.LookupHtlcResolutionResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/home.admin/config.scripts/lndlibs/walletunlocker.proto b/home.admin/config.scripts/lndlibs/walletunlocker.proto index 55bc31ca1..faf3c0892 100644 --- a/home.admin/config.scripts/lndlibs/walletunlocker.proto +++ b/home.admin/config.scripts/lndlibs/walletunlocker.proto @@ -185,6 +185,13 @@ message InitWalletRequest { corresponding private keys and can serve signing RPC requests. */ WatchOnly watch_only = 9; + + /* + macaroon_root_key is an optional 32 byte macaroon root key that can be + provided when initializing the wallet rather than letting lnd generate one + on its own. + */ + bytes macaroon_root_key = 10; } message InitWalletResponse { /* diff --git a/home.admin/config.scripts/lndlibs/walletunlocker_pb2.py b/home.admin/config.scripts/lndlibs/walletunlocker_pb2.py index 031c0fb34..370389481 100644 --- a/home.admin/config.scripts/lndlibs/walletunlocker_pb2.py +++ b/home.admin/config.scripts/lndlibs/walletunlocker_pb2.py @@ -2,6 +2,7 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: walletunlocker.proto """Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import message as _message @@ -15,91 +16,10 @@ _sym_db = _symbol_database.Default() from . import lightning_pb2 as lightning__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14walletunlocker.proto\x12\x05lnrpc\x1a\x0flightning.proto\"A\n\x0eGenSeedRequest\x12\x19\n\x11\x61\x65zeed_passphrase\x18\x01 \x01(\x0c\x12\x14\n\x0cseed_entropy\x18\x02 \x01(\x0c\"H\n\x0fGenSeedResponse\x12\x1c\n\x14\x63ipher_seed_mnemonic\x18\x01 \x03(\t\x12\x17\n\x0f\x65nciphered_seed\x18\x02 \x01(\x0c\"\xbd\x02\n\x11InitWalletRequest\x12\x17\n\x0fwallet_password\x18\x01 \x01(\x0c\x12\x1c\n\x14\x63ipher_seed_mnemonic\x18\x02 \x03(\t\x12\x19\n\x11\x61\x65zeed_passphrase\x18\x03 \x01(\x0c\x12\x17\n\x0frecovery_window\x18\x04 \x01(\x05\x12\x32\n\x0f\x63hannel_backups\x18\x05 \x01(\x0b\x32\x19.lnrpc.ChanBackupSnapshot\x12\x16\n\x0estateless_init\x18\x06 \x01(\x08\x12\x1b\n\x13\x65xtended_master_key\x18\x07 \x01(\t\x12.\n&extended_master_key_birthday_timestamp\x18\x08 \x01(\x04\x12$\n\nwatch_only\x18\t \x01(\x0b\x32\x10.lnrpc.WatchOnly\",\n\x12InitWalletResponse\x12\x16\n\x0e\x61\x64min_macaroon\x18\x01 \x01(\x0c\"}\n\tWatchOnly\x12%\n\x1dmaster_key_birthday_timestamp\x18\x01 \x01(\x04\x12\x1e\n\x16master_key_fingerprint\x18\x02 \x01(\x0c\x12)\n\x08\x61\x63\x63ounts\x18\x03 \x03(\x0b\x32\x17.lnrpc.WatchOnlyAccount\"U\n\x10WatchOnlyAccount\x12\x0f\n\x07purpose\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\r\x12\x0f\n\x07\x61\x63\x63ount\x18\x03 \x01(\r\x12\x0c\n\x04xpub\x18\x04 \x01(\t\"\x93\x01\n\x13UnlockWalletRequest\x12\x17\n\x0fwallet_password\x18\x01 \x01(\x0c\x12\x17\n\x0frecovery_window\x18\x02 \x01(\x05\x12\x32\n\x0f\x63hannel_backups\x18\x03 \x01(\x0b\x32\x19.lnrpc.ChanBackupSnapshot\x12\x16\n\x0estateless_init\x18\x04 \x01(\x08\"\x16\n\x14UnlockWalletResponse\"~\n\x15\x43hangePasswordRequest\x12\x18\n\x10\x63urrent_password\x18\x01 \x01(\x0c\x12\x14\n\x0cnew_password\x18\x02 \x01(\x0c\x12\x16\n\x0estateless_init\x18\x03 \x01(\x08\x12\x1d\n\x15new_macaroon_root_key\x18\x04 \x01(\x08\"0\n\x16\x43hangePasswordResponse\x12\x16\n\x0e\x61\x64min_macaroon\x18\x01 \x01(\x0c\x32\xa5\x02\n\x0eWalletUnlocker\x12\x38\n\x07GenSeed\x12\x15.lnrpc.GenSeedRequest\x1a\x16.lnrpc.GenSeedResponse\x12\x41\n\nInitWallet\x12\x18.lnrpc.InitWalletRequest\x1a\x19.lnrpc.InitWalletResponse\x12G\n\x0cUnlockWallet\x12\x1a.lnrpc.UnlockWalletRequest\x1a\x1b.lnrpc.UnlockWalletResponse\x12M\n\x0e\x43hangePassword\x12\x1c.lnrpc.ChangePasswordRequest\x1a\x1d.lnrpc.ChangePasswordResponseB\'Z%github.com/lightningnetwork/lnd/lnrpcb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14walletunlocker.proto\x12\x05lnrpc\x1a\x0flightning.proto\"A\n\x0eGenSeedRequest\x12\x19\n\x11\x61\x65zeed_passphrase\x18\x01 \x01(\x0c\x12\x14\n\x0cseed_entropy\x18\x02 \x01(\x0c\"H\n\x0fGenSeedResponse\x12\x1c\n\x14\x63ipher_seed_mnemonic\x18\x01 \x03(\t\x12\x17\n\x0f\x65nciphered_seed\x18\x02 \x01(\x0c\"\xd8\x02\n\x11InitWalletRequest\x12\x17\n\x0fwallet_password\x18\x01 \x01(\x0c\x12\x1c\n\x14\x63ipher_seed_mnemonic\x18\x02 \x03(\t\x12\x19\n\x11\x61\x65zeed_passphrase\x18\x03 \x01(\x0c\x12\x17\n\x0frecovery_window\x18\x04 \x01(\x05\x12\x32\n\x0f\x63hannel_backups\x18\x05 \x01(\x0b\x32\x19.lnrpc.ChanBackupSnapshot\x12\x16\n\x0estateless_init\x18\x06 \x01(\x08\x12\x1b\n\x13\x65xtended_master_key\x18\x07 \x01(\t\x12.\n&extended_master_key_birthday_timestamp\x18\x08 \x01(\x04\x12$\n\nwatch_only\x18\t \x01(\x0b\x32\x10.lnrpc.WatchOnly\x12\x19\n\x11macaroon_root_key\x18\n \x01(\x0c\",\n\x12InitWalletResponse\x12\x16\n\x0e\x61\x64min_macaroon\x18\x01 \x01(\x0c\"}\n\tWatchOnly\x12%\n\x1dmaster_key_birthday_timestamp\x18\x01 \x01(\x04\x12\x1e\n\x16master_key_fingerprint\x18\x02 \x01(\x0c\x12)\n\x08\x61\x63\x63ounts\x18\x03 \x03(\x0b\x32\x17.lnrpc.WatchOnlyAccount\"U\n\x10WatchOnlyAccount\x12\x0f\n\x07purpose\x18\x01 \x01(\r\x12\x11\n\tcoin_type\x18\x02 \x01(\r\x12\x0f\n\x07\x61\x63\x63ount\x18\x03 \x01(\r\x12\x0c\n\x04xpub\x18\x04 \x01(\t\"\x93\x01\n\x13UnlockWalletRequest\x12\x17\n\x0fwallet_password\x18\x01 \x01(\x0c\x12\x17\n\x0frecovery_window\x18\x02 \x01(\x05\x12\x32\n\x0f\x63hannel_backups\x18\x03 \x01(\x0b\x32\x19.lnrpc.ChanBackupSnapshot\x12\x16\n\x0estateless_init\x18\x04 \x01(\x08\"\x16\n\x14UnlockWalletResponse\"~\n\x15\x43hangePasswordRequest\x12\x18\n\x10\x63urrent_password\x18\x01 \x01(\x0c\x12\x14\n\x0cnew_password\x18\x02 \x01(\x0c\x12\x16\n\x0estateless_init\x18\x03 \x01(\x08\x12\x1d\n\x15new_macaroon_root_key\x18\x04 \x01(\x08\"0\n\x16\x43hangePasswordResponse\x12\x16\n\x0e\x61\x64min_macaroon\x18\x01 \x01(\x0c\x32\xa5\x02\n\x0eWalletUnlocker\x12\x38\n\x07GenSeed\x12\x15.lnrpc.GenSeedRequest\x1a\x16.lnrpc.GenSeedResponse\x12\x41\n\nInitWallet\x12\x18.lnrpc.InitWalletRequest\x1a\x19.lnrpc.InitWalletResponse\x12G\n\x0cUnlockWallet\x12\x1a.lnrpc.UnlockWalletRequest\x1a\x1b.lnrpc.UnlockWalletResponse\x12M\n\x0e\x43hangePassword\x12\x1c.lnrpc.ChangePasswordRequest\x1a\x1d.lnrpc.ChangePasswordResponseB\'Z%github.com/lightningnetwork/lnd/lnrpcb\x06proto3') - - -_GENSEEDREQUEST = DESCRIPTOR.message_types_by_name['GenSeedRequest'] -_GENSEEDRESPONSE = DESCRIPTOR.message_types_by_name['GenSeedResponse'] -_INITWALLETREQUEST = DESCRIPTOR.message_types_by_name['InitWalletRequest'] -_INITWALLETRESPONSE = DESCRIPTOR.message_types_by_name['InitWalletResponse'] -_WATCHONLY = DESCRIPTOR.message_types_by_name['WatchOnly'] -_WATCHONLYACCOUNT = DESCRIPTOR.message_types_by_name['WatchOnlyAccount'] -_UNLOCKWALLETREQUEST = DESCRIPTOR.message_types_by_name['UnlockWalletRequest'] -_UNLOCKWALLETRESPONSE = DESCRIPTOR.message_types_by_name['UnlockWalletResponse'] -_CHANGEPASSWORDREQUEST = DESCRIPTOR.message_types_by_name['ChangePasswordRequest'] -_CHANGEPASSWORDRESPONSE = DESCRIPTOR.message_types_by_name['ChangePasswordResponse'] -GenSeedRequest = _reflection.GeneratedProtocolMessageType('GenSeedRequest', (_message.Message,), { - 'DESCRIPTOR' : _GENSEEDREQUEST, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GenSeedRequest) - }) -_sym_db.RegisterMessage(GenSeedRequest) - -GenSeedResponse = _reflection.GeneratedProtocolMessageType('GenSeedResponse', (_message.Message,), { - 'DESCRIPTOR' : _GENSEEDRESPONSE, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.GenSeedResponse) - }) -_sym_db.RegisterMessage(GenSeedResponse) - -InitWalletRequest = _reflection.GeneratedProtocolMessageType('InitWalletRequest', (_message.Message,), { - 'DESCRIPTOR' : _INITWALLETREQUEST, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.InitWalletRequest) - }) -_sym_db.RegisterMessage(InitWalletRequest) - -InitWalletResponse = _reflection.GeneratedProtocolMessageType('InitWalletResponse', (_message.Message,), { - 'DESCRIPTOR' : _INITWALLETRESPONSE, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.InitWalletResponse) - }) -_sym_db.RegisterMessage(InitWalletResponse) - -WatchOnly = _reflection.GeneratedProtocolMessageType('WatchOnly', (_message.Message,), { - 'DESCRIPTOR' : _WATCHONLY, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.WatchOnly) - }) -_sym_db.RegisterMessage(WatchOnly) - -WatchOnlyAccount = _reflection.GeneratedProtocolMessageType('WatchOnlyAccount', (_message.Message,), { - 'DESCRIPTOR' : _WATCHONLYACCOUNT, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.WatchOnlyAccount) - }) -_sym_db.RegisterMessage(WatchOnlyAccount) - -UnlockWalletRequest = _reflection.GeneratedProtocolMessageType('UnlockWalletRequest', (_message.Message,), { - 'DESCRIPTOR' : _UNLOCKWALLETREQUEST, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.UnlockWalletRequest) - }) -_sym_db.RegisterMessage(UnlockWalletRequest) - -UnlockWalletResponse = _reflection.GeneratedProtocolMessageType('UnlockWalletResponse', (_message.Message,), { - 'DESCRIPTOR' : _UNLOCKWALLETRESPONSE, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.UnlockWalletResponse) - }) -_sym_db.RegisterMessage(UnlockWalletResponse) - -ChangePasswordRequest = _reflection.GeneratedProtocolMessageType('ChangePasswordRequest', (_message.Message,), { - 'DESCRIPTOR' : _CHANGEPASSWORDREQUEST, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChangePasswordRequest) - }) -_sym_db.RegisterMessage(ChangePasswordRequest) - -ChangePasswordResponse = _reflection.GeneratedProtocolMessageType('ChangePasswordResponse', (_message.Message,), { - 'DESCRIPTOR' : _CHANGEPASSWORDRESPONSE, - '__module__' : 'walletunlocker_pb2' - # @@protoc_insertion_point(class_scope:lnrpc.ChangePasswordResponse) - }) -_sym_db.RegisterMessage(ChangePasswordResponse) - -_WALLETUNLOCKER = DESCRIPTOR.services_by_name['WalletUnlocker'] +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'walletunlocker_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None @@ -109,21 +29,21 @@ if _descriptor._USE_C_DESCRIPTORS == False: _GENSEEDRESPONSE._serialized_start=115 _GENSEEDRESPONSE._serialized_end=187 _INITWALLETREQUEST._serialized_start=190 - _INITWALLETREQUEST._serialized_end=507 - _INITWALLETRESPONSE._serialized_start=509 - _INITWALLETRESPONSE._serialized_end=553 - _WATCHONLY._serialized_start=555 - _WATCHONLY._serialized_end=680 - _WATCHONLYACCOUNT._serialized_start=682 - _WATCHONLYACCOUNT._serialized_end=767 - _UNLOCKWALLETREQUEST._serialized_start=770 - _UNLOCKWALLETREQUEST._serialized_end=917 - _UNLOCKWALLETRESPONSE._serialized_start=919 - _UNLOCKWALLETRESPONSE._serialized_end=941 - _CHANGEPASSWORDREQUEST._serialized_start=943 - _CHANGEPASSWORDREQUEST._serialized_end=1069 - _CHANGEPASSWORDRESPONSE._serialized_start=1071 - _CHANGEPASSWORDRESPONSE._serialized_end=1119 - _WALLETUNLOCKER._serialized_start=1122 - _WALLETUNLOCKER._serialized_end=1415 + _INITWALLETREQUEST._serialized_end=534 + _INITWALLETRESPONSE._serialized_start=536 + _INITWALLETRESPONSE._serialized_end=580 + _WATCHONLY._serialized_start=582 + _WATCHONLY._serialized_end=707 + _WATCHONLYACCOUNT._serialized_start=709 + _WATCHONLYACCOUNT._serialized_end=794 + _UNLOCKWALLETREQUEST._serialized_start=797 + _UNLOCKWALLETREQUEST._serialized_end=944 + _UNLOCKWALLETRESPONSE._serialized_start=946 + _UNLOCKWALLETRESPONSE._serialized_end=968 + _CHANGEPASSWORDREQUEST._serialized_start=970 + _CHANGEPASSWORDREQUEST._serialized_end=1096 + _CHANGEPASSWORDRESPONSE._serialized_start=1098 + _CHANGEPASSWORDRESPONSE._serialized_end=1146 + _WALLETUNLOCKER._serialized_start=1149 + _WALLETUNLOCKER._serialized_end=1442 # @@protoc_insertion_point(module_scope) diff --git a/home.admin/config.scripts/lndlibs/walletunlocker_pb2_grpc.py b/home.admin/config.scripts/lndlibs/walletunlocker_pb2_grpc.py index 145bad7c9..0b3abc525 100644 --- a/home.admin/config.scripts/lndlibs/walletunlocker_pb2_grpc.py +++ b/home.admin/config.scripts/lndlibs/walletunlocker_pb2_grpc.py @@ -5,7 +5,6 @@ import grpc from . import walletunlocker_pb2 as walletunlocker__pb2 - class WalletUnlockerStub(object): """ Comments in this file will be directly parsed into the API From 4c461a2055d99769941c19c364f57488ef4090ff Mon Sep 17 00:00:00 2001 From: Jason Brill Date: Wed, 3 May 2023 12:29:16 -0400 Subject: [PATCH 50/55] LIT update to v0.9.2-alpha (#3738) * LIT update to v0.9.2-alpha * lnd check for rpcmiddleware --- CHANGES.md | 2 +- home.admin/config.scripts/bonus.lit.sh | 11 +++++---- home.admin/config.scripts/lnd.check.sh | 33 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b0e9100da..0d4969089 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -65,7 +65,7 @@ - Update: C-lightningREST v0.7.2 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.7.2) - Update: CLBOSS 0.13A [details](https://github.com/ZmnSCPxj/clboss/releases/tag/0.13A) - Update: Channel Tools (chantools) v0.10.4 [details](https://github.com/guggero/chantools/blob/master/README.md) -- Update: Lightning Terminal v0.7.0-alpha with Lightning Node Connect over Tor [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.7.0-alpha) +- Update: Lightning Terminal v0.9.2-alpha with Lightning Node Connect over Tor [details](https://github.com/lightninglabs/lightning-terminal/releases/tag/v0.9.2-alpha) - Update: JoinMarket v0.9.6 [details](https://github.com/JoinMarket-Org/joinmarket-clientserver/releases/tag/v0.9.6) - Update: JoininBox v0.6.8 [details](https://github.com/openoms/joininbox/releases/tag/v0.6.8) - Update: JoinMarket Web UI (Jam) v0.0.9 (CLI install script) [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.0.9) diff --git a/home.admin/config.scripts/bonus.lit.sh b/home.admin/config.scripts/bonus.lit.sh index b8b94c51d..d624e2e4d 100644 --- a/home.admin/config.scripts/bonus.lit.sh +++ b/home.admin/config.scripts/bonus.lit.sh @@ -1,7 +1,7 @@ #!/bin/bash # https://github.com/lightninglabs/lightning-terminal/releases -LITVERSION="0.8.6-alpha" +LITVERSION="0.9.2-alpha" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -14,15 +14,18 @@ fi # check who signed the release in https://github.com/lightninglabs/lightning-terminal/releases PGPsigner="ellemouton" -if [ $PGPsigner = ellemouton ];then +if [ $PGPsigner = ellemouton ]; then PGPpkeys="https://github.com/${PGPsigner}.gpg" PGPcheck="D7D916376026F177" -elif [ $PGPsigner = guggero ];then +elif [ $PGPsigner = guggero ]; then PGPpkeys="https://keybase.io/${PGPsigner}/pgp_keys.asc" PGPcheck="03DB6322267C373B" -elif [ $PGPsigner = roasbeef ];then +elif [ $PGPsigner = roasbeef ]; then PGPpkeys="https://keybase.io/${PGPsigner}/pgp_keys.asc " PGPcheck="3BBD59E99B280306" +elif [ $PGPsigner = ellemouton ]; then + PGPpkeys="https://keybase.io/ellemo/pgp_keys.asc " + PGPcheck="D7D916376026F17" fi source /mnt/hdd/raspiblitz.conf diff --git a/home.admin/config.scripts/lnd.check.sh b/home.admin/config.scripts/lnd.check.sh index 126fde020..22f9f2205 100755 --- a/home.admin/config.scripts/lnd.check.sh +++ b/home.admin/config.scripts/lnd.check.sh @@ -305,6 +305,39 @@ fi fi + ##### RPCMIDDLEWARE SECTION ##### + + # [rpcmiddleware] + sectionName="[Rr]pcmiddleware" + echo "# [${sectionName}] config ..." + + # make sure lnd config has a [rpcmiddleware] section + sectionExists=$(cat ${lndConfFile} | grep -c "^\[${sectionName}\]") + echo "# sectionExists(${sectionExists})" + if [ "${sectionExists}" == "0" ]; then + echo "# adding section [${sectionName}]" + echo " + [${sectionName}] + " | tee -a ${lndConfFile} + fi + + # get line number of [rpcmiddleware] section + sectionLine=$(cat ${lndConfFile} | grep -n "^\[${sectionName}\]" | cut -d ":" -f1) + echo "# sectionLine(${sectionLine})" + insertLine=$(expr $sectionLine + 1) + echo "# insertLine(${insertLine})" + fileLines=$(wc -l ${lndConfFile} | cut -d " " -f1) + echo "# fileLines(${fileLines})" + if [ ${fileLines} -lt ${insertLine} ]; then + echo "# adding new line for inserts" + echo " + " | tee -a ${lndConfFile} + fi + + # SET/UPDATE rpcmiddleware.enable + setting ${lndConfFile} ${insertLine} "rpcmiddleware.enable" "true" + + echo "# OK PRESTART DONE" ###################################################################### From 3f2c2b2ff86fc799deba2e7b5acec6b6cf4a812b Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 3 May 2023 18:39:03 +0200 Subject: [PATCH 51/55] mute warning on build set display --- home.admin/config.scripts/blitz.display.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/home.admin/config.scripts/blitz.display.sh b/home.admin/config.scripts/blitz.display.sh index 268ba455d..b035a6ce4 100644 --- a/home.admin/config.scripts/blitz.display.sh +++ b/home.admin/config.scripts/blitz.display.sh @@ -140,7 +140,7 @@ if [ "${command}" == "rotate" ]; then sed -i "s/^dtoverlay=.*/dtoverlay=waveshare35a:rotate=90/g" /boot/config.txt rm /etc/X11/xorg.conf.d/40-libinput.conf 2>/dev/null - /home/admin/config.scripts/blitz.conf.sh set lcdrotate 1 2>/dev/null + /home/admin/config.scripts/blitz.conf.sh set lcdrotate 1 1>/dev/null 2>/dev/null echo "# OK - a restart is needed: sudo shutdown -r now" # TURN ROTATE OFF @@ -165,7 +165,7 @@ EOF fi # update raspiblitz conf - /home/admin/config.scripts/blitz.conf.sh set lcdrotate 0 2>/dev/null + /home/admin/config.scripts/blitz.conf.sh set lcdrotate 0 1>/dev/null 2>/dev/null echo "OK - a restart is needed: sudo shutdown -r now" else From 8b9b1225ad398b2c312b106e7b9ac78327909104 Mon Sep 17 00:00:00 2001 From: openoms <43343391+openoms@users.noreply.github.com> Date: Wed, 3 May 2023 18:07:08 +0100 Subject: [PATCH 52/55] lnproxy update with new specs (#3771) --- CHANGES.md | 2 +- .../nginx/sites-available/lnproxy_ssl.conf | 14 +- .../nginx/sites-available/lnproxy_tor.conf | 13 +- .../sites-available/lnproxy_tor_ssl.conf | 10 +- home.admin/config.scripts/bonus.lnproxy.sh | 123 +++++------------- 5 files changed, 44 insertions(+), 118 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0d4969089..de3c2e804 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,7 @@ - New: Support of X708 UPS HAT [details](https://github.com/rootzoll/raspiblitz/pull/3087) - New: BOS Telegram Bot Support (see OPTIONS on LND Balance of Satoshis menu entry) - New: LightningTipBot v0.5 [details](https://github.com/LightningTipBot/LightningTipBot) -- New: CLI shortcut for ↬lnproxy [details](https://github.com/rootzoll/raspiblitz/pull/3333) +- New: ↬lnproxy cli shortcut and server [details](https://github.com/lnproxy) - New: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186) - New on WebUI: Jam (JoinMarket Web UI) v0.1.5 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.5) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) diff --git a/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf b/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf index 18eb359b5..051c55e63 100644 --- a/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf +++ b/home.admin/assets/nginx/sites-available/lnproxy_ssl.conf @@ -1,8 +1,8 @@ ## lnproxy_ssl.conf server { - listen 4749 ssl http2; - listen [::]:4749 ssl http2; + listen 4748 ssl http2; + listen [::]:4748 ssl http2; server_name _; include /etc/nginx/snippets/ssl-params.conf; @@ -13,15 +13,7 @@ server { access_log /var/log/nginx/access_lnproxy.log; error_log /var/log/nginx/error_lnproxy.log; - location /api/ { - proxy_pass http://127.0.0.1:4747/; - - include /etc/nginx/snippets/ssl-proxy-params.conf; - } - location / { - proxy_pass http://127.0.0.1:4748; - - include /etc/nginx/snippets/ssl-proxy-params.conf; + proxy_pass http://127.0.0.1:4747; } } diff --git a/home.admin/assets/nginx/sites-available/lnproxy_tor.conf b/home.admin/assets/nginx/sites-available/lnproxy_tor.conf index 8151e0b1f..157f292aa 100644 --- a/home.admin/assets/nginx/sites-available/lnproxy_tor.conf +++ b/home.admin/assets/nginx/sites-available/lnproxy_tor.conf @@ -1,25 +1,16 @@ ## lnproxy_tor.conf server { - listen 4750; + listen 4749; server_name _; - include /etc/nginx/snippets/ssl-params.conf; - include /etc/nginx/snippets/ssl-certificate-app-data.conf; - include /etc/nginx/snippets/gzip-params.conf; access_log /var/log/nginx/access_lnproxy.log; error_log /var/log/nginx/error_lnproxy.log; - location /api/ { - proxy_pass http://127.0.0.1:4747/; - - include /etc/nginx/snippets/ssl-proxy-params.conf; - } - location / { - proxy_pass http://127.0.0.1:4748; + proxy_pass http://127.0.0.1:4747; include /etc/nginx/snippets/ssl-proxy-params.conf; } diff --git a/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf b/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf index 87d47840d..ffc90f63a 100644 --- a/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf +++ b/home.admin/assets/nginx/sites-available/lnproxy_tor_ssl.conf @@ -1,7 +1,7 @@ ## lnproxy_tor_ssl.conf server { - listen 4751 ssl http2; + listen 4750 ssl http2; server_name _; include /etc/nginx/snippets/ssl-params.conf; @@ -12,14 +12,8 @@ server { access_log /var/log/nginx/access_lnproxy.log; error_log /var/log/nginx/error_lnproxy.log; - location /api/ { - proxy_pass http://127.0.0.1:4747/; - - include /etc/nginx/snippets/ssl-proxy-params.conf; - } - location / { - proxy_pass http://127.0.0.1:4748; + proxy_pass http://127.0.0.1:4747; include /etc/nginx/snippets/ssl-proxy-params.conf; } diff --git a/home.admin/config.scripts/bonus.lnproxy.sh b/home.admin/config.scripts/bonus.lnproxy.sh index 3e5e75a81..c2639c783 100644 --- a/home.admin/config.scripts/bonus.lnproxy.sh +++ b/home.admin/config.scripts/bonus.lnproxy.sh @@ -1,9 +1,7 @@ #!/bin/bash # https://github.com/lnproxy/lnproxy/commits/main -LNPROXYVERSION="423723b58cc45daa2fdf6c8b22537d560aca4d7a" -# https://github.com/lnproxy/lnproxy-webui/commits/main -WEBUIVERSION=24d291c884a0b60126c1915301f29c893900a155 +LNPROXYVERSION="7c8a14106b42cfd89471c1dc02d7baab1122dfa2" # command info if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then @@ -20,33 +18,21 @@ localip=$(hostname -I | awk '{print $1}') if [ "$1" = "menu" ]; then if systemctl is-active --quiet lnproxy; then - # get network info torAddress=$(sudo cat /mnt/hdd/tor/lnproxy/hostname 2>/dev/null) - fingerprint=$(openssl x509 -in /mnt/hdd/app-data/nginx/tls.cert -fingerprint -noout | cut -d"=" -f2) + sudo /home/admin/config.scripts/blitz.display.sh qr "${torAddress}" + whiptail --title " lnproxy server API" --msgbox "\ +Use your hidden service as a relay on the lnproxy Tor website: +dx7pn6ehykq6cadce4bjbxn5tf64z7e3fufpxgxce7n4f5eja476cpyd.onion +Your address to be used as the relay: +http://${torAddress}/spec + +To use the API from another computer on your LAN: +curl -k https://${localip}:4748/api/{invoice}?routing_msat={budget} - if [ "${runBehindTor}" = "on" ] && [ -n "${torAddress}" ]; then - # Info with Tor - sudo /home/admin/config.scripts/blitz.display.sh qr "${torAddress}" - whiptail --title " lnproxy-webui and API" --msgbox "\ -Open in your local web browser: -http://${localip}:4748 -https://${localip}:4749 with Fingerprint: -${fingerprint}\n -Hidden Service address for Tor Browser (see LCD for QR): -${torAddress}\n -To use the API: -curl -k https://${localip}:4749/api/{invoice}?routing_msat={budget}\n The Tor Hidden Service address to share for using the API: ${torAddress}/api -" 20 70 - sudo /home/admin/config.scripts/blitz.display.sh hide - else - # Info without Tor - whiptail --title " lnproxy-webui " --msgbox "Open in your local web browser: -http://${localip}:4748\n -Activate Tor to access the web interface from outside your local network. -" 15 57 - fi +" 16 78 + sudo /home/admin/config.scripts/blitz.display.sh hide echo "# please wait ..." else echo "# *** LNPROXY IS NOT INSTALLED ***" @@ -138,53 +124,6 @@ EOF echo "# OK - the lnproxy.service is enabled, to start manually use: sudo systemctl start lnproxy" fi - # lnproxy-webui - cd /home/lnproxy/ || exit 1 - sudo -u lnproxy git clone https://github.com/lnproxy/lnproxy-webui - cd /home/lnproxy/lnproxy-webui || exit 1 - sudo -u lnproxy git reset --hard ${WEBUIVERSION} || exit 1 - - # build - sudo -u lnproxy /usr/local/go/bin/go get lnproxy-webui - sudo -u lnproxy /usr/local/go/bin/go build - - # create systemd service - cat </dev/null) + echo + echo "# Use your hidden service as a relay on the lnproxy Tor website:" + echo "dx7pn6ehykq6cadce4bjbxn5tf64z7e3fufpxgxce7n4f5eja476cpyd.onion" + echo "# Your address to be used as the relay:" + echo "http://${torAddress}/spec" + echo "# To use the API from another computer on your LAN:" + echo "curl -k https://${localip}:4748/api/{invoice}?routing_msat={budget}\n" + echo "# The Tor Hidden Service address to share for using the API:" + echo "${torAddress}/api" echo "# More info at:" - echo "https://github.com/lnproxy/lnproxy" + echo "https://github.com/lnproxy" exit 0 fi @@ -233,15 +175,22 @@ if [ "$1" = "0" ] || [ "$1" = "off" ]; then # remove systemd services sudo systemctl disable --now lnproxy sudo rm -f /etc/systemd/system/lnproxy.service - sudo systemctl disable --now lnproxy-webui - sudo rm -f /etc/systemd/system/lnproxy-webui.service # remove Tor service /home/admin/config.scripts/tor.onion-service.sh off lnproxy + sudo rm /etc/nginx/sites-available/lnproxy_ssl.conf + sudo rm /etc/nginx/sites-available/lnproxy_tor.conf + sudo rm /etc/nginx/sites-available/lnproxy_tor_ssl.conf + sudo rm /etc/nginx/sites-enabled/lnproxy_ssl.conf + sudo rm /etc/nginx/sites-enabled/lnproxy_tor.conf + sudo rm /etc/nginx/sites-enabled/lnproxy_tor_ssl.conf + + sudo nginx -t || exit 1 + sudo systemctl reload nginx + # close ports on firewall sudo ufw delete allow 4748 - sudo ufw delete allow 4749 # setting value in raspi blitz config /home/admin/config.scripts/blitz.conf.sh set lnproxy "off" From 02f0da720c6b954a3c5cf12cd3973e333fa6c254 Mon Sep 17 00:00:00 2001 From: Dipun Mistry Date: Wed, 3 May 2023 18:11:03 +0100 Subject: [PATCH 53/55] migrated only relevant fixes from #3770 (#3778) * migrated only relevant fixes from #3770 * add the missing apt_install function --- home.admin/config.scripts/blitz.fatpack.sh | 10 ++++++++++ home.admin/config.scripts/cl-plugin.cln-grpc.sh | 1 + 2 files changed, 11 insertions(+) diff --git a/home.admin/config.scripts/blitz.fatpack.sh b/home.admin/config.scripts/blitz.fatpack.sh index bd7146ff0..e4f106fad 100755 --- a/home.admin/config.scripts/blitz.fatpack.sh +++ b/home.admin/config.scripts/blitz.fatpack.sh @@ -9,6 +9,15 @@ if [ "$EUID" -ne 0 ] exit 1 fi +apt_install() { + apt install -y ${@} + if [ $? -eq 100 ]; then + echo "FAIL! apt failed to install needed packages!" + echo ${@} + exit 1 + fi +} + echo "# getting default user/repo from build_sdcard.sh" sudo cp /home/admin/raspiblitz/build_sdcard.sh /home/admin/build_sdcard.sh sudo chmod +x /home/admin/build_sdcard.sh 2>/dev/null @@ -48,6 +57,7 @@ sudo /home/admin/config.scripts/blitz.web.ui.sh on "${defaultWEBUIuser}" "${defa # set build code as new www default sudo rm -r /home/admin/assets/nginx/www_public +mkdir -p /home/admin/assets/nginx/www_public sudo cp -a /home/blitzapi/blitz_web/build/* /home/admin/assets/nginx/www_public sudo chown admin:admin /home/admin/assets/nginx/www_public sudo rm -r /home/blitzapi/blitz_web/build/* diff --git a/home.admin/config.scripts/cl-plugin.cln-grpc.sh b/home.admin/config.scripts/cl-plugin.cln-grpc.sh index 5c652ea34..61f6e8d0f 100644 --- a/home.admin/config.scripts/cl-plugin.cln-grpc.sh +++ b/home.admin/config.scripts/cl-plugin.cln-grpc.sh @@ -45,6 +45,7 @@ function buildGRPCplugin() { echo "# delete old dir or binary" sudo rm -rf /home/bitcoin/cl-plugins-available/cln-grpc echo "# move to /home/bitcoin/cl-plugins-available/" + sudo mkdir -p /home/bitcoin/cl-plugins-available sudo -u bitcoin mv /home/bitcoin/cln-grpc-build/debug/cln-grpc /home/bitcoin/cl-plugins-available/ else echo "# - cln-grpc plugin was already built/installed" From 69d30adca221cf81b9399ca418fb95e3ac939464 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 3 May 2023 19:36:37 +0200 Subject: [PATCH 54/55] update to lnd v0.16.2 --- CHANGES.md | 2 +- README.md | 2 +- home.admin/config.scripts/lnd.install.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index de3c2e804..2d24b95dd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,7 +12,7 @@ - New: Homebanking Interface FinTS/HBCI (experimental) [details](https://github.com/rootzoll/raspiblitz/issues/1186) - New on WebUI: Jam (JoinMarket Web UI) v0.1.5 [details](https://github.com/joinmarket-webui/joinmarket-webui/releases/tag/v0.1.5) - Update: Bitcoin Core v24.0.1 [details](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-24.0.1.md) -- Update: LND v0.16.1-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.1-beta) +- Update: LND v0.16.2-beta [details](https://github.com/lightningnetwork/lnd/releases/tag/v0.16.2-beta) - Update: Core Lightning v23.02.2 [details](https://github.com/ElementsProject/lightning/releases/tag/v23.02.2) - Update: C-lightningREST v0.10.2 [details](https://github.com/Ride-The-Lightning/c-lightning-REST/releases/tag/v0.10.2) - Update: Electrum Server in Rust (electrs) v0.9.11 [details](https://github.com/romanz/electrs/blob/master/RELEASE-NOTES.md#0911-jan-5-2023) diff --git a/README.md b/README.md index 8c122b6e9..a9b1b73d8 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ _Build your own Lightning & Bitcoin Fullnode on a RaspberryPi with an optional Display._ -`Version 1.9.0RC2 with bitcoin 24.0.1, lnd 0.16.1 & Core Lightning 23.02` ([api](https://github.com/fusion44/blitz_api)|[web](https://github.com/cstenglein/raspiblitz-web)) +`Version 1.9.0RC2 with bitcoin 24.0.1, lnd 0.16.2 & Core Lightning 23.02` ([api](https://github.com/fusion44/blitz_api)|[web](https://github.com/cstenglein/raspiblitz-web)) ![RaspiBlitz](pictures/raspiblitz.jpg) diff --git a/home.admin/config.scripts/lnd.install.sh b/home.admin/config.scripts/lnd.install.sh index afe5622cf..89544a1a0 100644 --- a/home.admin/config.scripts/lnd.install.sh +++ b/home.admin/config.scripts/lnd.install.sh @@ -4,7 +4,7 @@ ## based on https://raspibolt.github.io/raspibolt/raspibolt_40_lnd.html#lightning-lnd ## see LND releases: https://github.com/lightningnetwork/lnd/releases ### If you change here - make sure to also change interims version in lnd.update.sh #! -lndVersion="0.16.1-beta" +lndVersion="0.16.2-beta" # olaoluwa #PGPauthor="roasbeef" From a4ab1f6b8c5c7875b1ec921fb267d0b57905e5f5 Mon Sep 17 00:00:00 2001 From: rootzoll Date: Wed, 3 May 2023 22:58:37 +0200 Subject: [PATCH 55/55] v1.9.0rc4 version info --- home.admin/_version.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home.admin/_version.info b/home.admin/_version.info index 1d07fcd9a..9a7e4fe60 100644 --- a/home.admin/_version.info +++ b/home.admin/_version.info @@ -1,3 +1,3 @@ # RaspiBlitz Version - always [major].[main].[sub] (sub can be a string like '2rc1') -codeVersion="1.9.0rc3" +codeVersion="1.9.0rc4" # keep last line with comment \ No newline at end of file