diff --git a/home.admin/00infoLCD.sh b/home.admin/00infoLCD.sh index de40cb4..0eb4f59 100755 --- a/home.admin/00infoLCD.sh +++ b/home.admin/00infoLCD.sh @@ -98,7 +98,7 @@ if [ "$USER" = "pi" ]; then # RaspiBlitz is full Setup chain=$(sudo -u bitcoin ${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain') - locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log | grep -c unlock) + locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log 2>/dev/null | grep -c unlock) if [ ${locked} -gt 0 ]; then # special case: LND wallet is locked ---> show unlock info diff --git a/home.admin/00mainMenu.sh b/home.admin/00mainMenu.sh index f395baa..cbdf280 100755 --- a/home.admin/00mainMenu.sh +++ b/home.admin/00mainMenu.sh @@ -56,17 +56,24 @@ else # LOCK SCREEN MENU="!!! YOUR WALLET IS LOCKED !!!" - OPTIONS+=(X "Unlock your Lightning Wallet with 'lncli unlock'") + OPTIONS+=(U "Unlock your Lightning Wallet with 'lncli unlock'") else - # REGULAR MENU + chain=$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain') + switchOption="to MAINNET" + if [ "${chain}" = "test" ]; then + switchOption="back to TESTNET" + fi + + # REGULAR MENU OPTIONS+=(INFO "RaspiBlitz Status Screen" \ FUNDING "Fund your Wallet" \ CONNECT "Connect to a Peer" \ lnbalance "Detailed Wallet Balances" \ lnchannels "Lightning Channel List" \ - RECKLES "Console / Terminal") + SWITCH "Switch ${switchOption}" + X "Console / Terminal") fi @@ -129,11 +136,17 @@ case $CHOICE in read key ./00mainMenu.sh ;; - RECKLES) + SWITCH) + sudo ./95switchMainTest.sh + echo "Press ENTER to return to main menu." + read key + ./00mainMenu.sh + ;; + X) lncli -h echo "SUCH WOW come back with ./00mainMenu.sh" - ;; - X) # unlock + ;; + U) # unlock ./AAunlockLND.sh ./00mainMenu.sh ;; diff --git a/home.admin/70initLND.sh b/home.admin/70initLND.sh index 0f72bc4..1ad9658 100755 --- a/home.admin/70initLND.sh +++ b/home.admin/70initLND.sh @@ -4,6 +4,9 @@ echo "" # load network network=`cat .network` +# get chain +chain=$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain') + # verify that bitcoin is running echo "*** Checking ${network} ***" bitcoinRunning=$(sudo -u bitcoin ${network}-cli getblockchaininfo | grep -c blocks) @@ -72,8 +75,8 @@ if [ ${lndRunning} -eq 0 ]; then sudo chmod +x /etc/systemd/system/lnd.service sudo systemctl enable lnd sudo systemctl start lnd - echo "Started LND .. waiting 30 seconds for init ..." - sleep 30 + echo "Started LND .. waiting 60 seconds for init ..." + sleep 60 fi ###### Check LND is running @@ -89,9 +92,8 @@ echo "OK - LND is running" echo "" ###### Instructions on Creating LND Wallet -setupStep=0 -setupStep=$(sudo cat "/home/admin/.setup") -if [ ${setupStep} -lt 65 ]; then +walletExists=$(sudo ls /mnt/hdd/lnd/data/chain/${network}/${cahin}net/wallet.db 2>/dev/null | grep wallet.db -c) +if [ ${walletExists} -eq 0 ]; then # setup state signals, that no wallet has been created yet dialog --backtitle "RaspiBlitz - LND Lightning Wallet" --msgbox " ${network} and Lighthing Services are installed. @@ -123,6 +125,7 @@ Press OK and follow the 'Helping Instructions'. # set SetupState to 75 (mid thru this process) echo "65" > /home/admin/.setup fi + echo "--> lets wait 60 seconds for LND to get ready" sleep 60 @@ -153,7 +156,6 @@ fi ###### Unlock Wallet (if needed) echo "*** Check Wallet Lock ***" -chain=$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain') locked=$(sudo tail -n 1 /mnt/hdd/lnd/logs/${network}/${chain}net/lnd.log | grep -c unlock) if [ ${locked} -gt 0 ]; then echo "OK - Wallet is locked ... starting unlocking dialog" @@ -166,7 +168,6 @@ fi echo "" echo "*** Check LND Sync ***" item=0 -chain="$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain')" lndSyncing=$(sudo -u bitcoin lncli getinfo | jq -r '.synced_to_chain' | grep -c true) if [ ${lndSyncing} -eq 0 ]; then echo "OK - wait for LND to be synced" diff --git a/home.admin/95switchMainTest.sh b/home.admin/95switchMainTest.sh new file mode 100755 index 0000000..d4b9188 --- /dev/null +++ b/home.admin/95switchMainTest.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash +# based on pull request from vnnkl + +# load network +network=`cat .network` + +echo "" +echo "*** Switch between Testnet/Mainnet ***" + +# allow only on bitcoin network +if [ "${network}" = "bitcoin" ]; then + echo "Bitcoin network can be switched between testnet/mainnet ..." +else + echo "FAIL - Only Bitcoin Network can be switched between man/tast at the moment." + exit 1 +fi + +NETWORK_CONFIG="/home/bitcoin/.${network}/${network}.conf" +NETWORK_TEMPLATE="/home/admin/assets/${network}.conf" +LND_CONFIG="/home/bitcoin/.lnd/lnd.conf" +LND_TEMPLATE="/home/admin/assets/lnd.${network}.conf" +echo "NETWORK_CONFIG(${NETWORK_CONFIG})" +echo "LND_CONFIG(${LND_CONFIG})" +echo "NETWORK_TEMPLATE(${NETWORK_TEMPLATE})" +echo "LND_TEMPLATE(${LND_TEMPLATE})" + +# function to detect main/testnet +function isMainnet(){ + grep "^#testnet=1$" -q $NETWORK_CONFIG && return 1 + return 0 +} + +function switchToMainnet { + echo "switching to mainnet" + sed -i 's/^testnet=1/#testnet=1/g' $NETWORK_CONFIG + sed -i 's/^testnet=1/#testnet=1/g' $NETWORK_TEMPLATE + sed -i 's/^${network}.testnet=1/#${network}.testnet=1/g' $LND_CONFIG + sed -i 's/^#${network}.mainnet=1/${network}.mainnet=1/g' $LND_CONFIG + sed -i 's/^${network}.testnet=1/#${network}.testnet=1/g' $LND_TEMPLATE + sed -i 's/^#${network}.mainnet=1/${network}.mainnet=1/g' $LND_TEMPLATE + echo "OK switched to mainnet" +} + +function switchToTestnet { + echo "switching to testnet" + sed -i 's/^#testnet=1/testnet=1/g' $NETWORK_CONFIG + sed -i 's/^#testnet=1/testnet=1/g' $NETWORK_TEMPLATE + sed -i 's/^#${network}.testnet=1/${network}.testnet=1/g' $LND_CONFIG + sed -i 's/^${network}.mainnet=1/#${network}.mainnet=1/g' $LND_CONFIG + sed -i 's/^#${network}.testnet=1/${network}.testnet=1/g' $LND_TEMPLATE + sed -i 's/^${network}.mainnet=1/#${network}.mainnet=1/g' $LND_TEMPLATE + echo "OK switched to testnet" +} + +# LND Service +lndInstalled=$(systemctl status lnd.service | grep loaded -c) +if [ ${lndInstalled} -gt 0 ]; then + + echo "check for open channels" + openChannels=$(lncli listchannels 2>/dev/null | grep chan_id -c) + if [ ${openChannels} -gt 0 ]; then + echo "FAIL - You have still open channels and could loose funds !! - close those first with lncli closeallchannels" + exit 1 + else + echo "no open channels found" + fi + + echo "stopping lnd client" + systemctl stop lnd + sleep 4 + +else + echo "LND not running" +fi + +# NETWORK Service +networkInstalled=$(systemctl status ${network}d.service | grep loaded -c) +if [ ${networkInstalled} -gt 0 ]; then + echo "stopping bitcoind client" + systemctl stop bitcoind + sleep 4 +else + echo "Network ${network} not running" +fi + +# TURN THE SWITCH +isMainnet +if [ $? -eq 1 ]; then + echo "switching from mainnet to testnet" + switchToTestnet +else + echo "switching from testnet to mainnet" + switchToMainnet +fi + + +echo "copying over config to bitcoin user" +cp $NETWORK_CONFIG /home/admin/.${network}/ + +# restarting network +if [ ${networkInstalled} -gt 0 ]; then + + # start network + systemctl start bitcoind + echo "started ${network}d back up, giving it a 120 SECONDS to prepare" + sleep 120 + + # set setup info again + echo "60" > /home/admin/.setup + + # run again the complete LND init procedure + ./70initLND.sh + +else + echo "No starting of network, because it was not running before" +fi \ No newline at end of file diff --git a/home.admin/BBcloseAllChannels.sh b/home.admin/BBcloseAllChannels.sh new file mode 100755 index 0000000..79c23f2 --- /dev/null +++ b/home.admin/BBcloseAllChannels.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# load network and chain info +network=`cat .network` +chain=$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain') + +command="lncli closeallchannels -f" + +clear +echo "***********************************" +echo "Closing All Channels (EXPERIMENTAL)" +echo "***********************************" +echo "" +echo "COMMAND LINE: " +echo $command +echo "" +echo "RESULT:" + +# PRECHECK) check if chain is in sync +chainInSync=$(lncli getinfo | grep '"synced_to_chain": true' -c) +if [ ${chainInSync} -eq 0 ]; then + command="" + result="FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " +fi + +# TODO PRECHECK) are any channels open at all + +# TODO PRECHECK) are there INACTIVE channels that would need a force close (and manual YES) +# remember that for info below + +# execute command +if [ ${#command} -gt 0 ]; then + result=$($command) +fi + +# on no result TODO: check if there is any result at all +if [ ${#result} -eq 0 ]; then + echo "Sorry something went wrong - thats unusual." + echo "" + exit 1 +fi + +# when result is available +echo "$result" + +# TODO parse out closing transactions and monitor those with blockchain for confirmations + +# TODO give final info - let user know if its now safe to update RaspiBlitz or change test/main +# ask to make sure user has list for seed words still safe +echo "" +echo "******************************" +echo "INFO" +echo "******************************" diff --git a/home.admin/BBfundWallet.sh b/home.admin/BBfundWallet.sh index c3a1eb5..0322248 100755 --- a/home.admin/BBfundWallet.sh +++ b/home.admin/BBfundWallet.sh @@ -2,7 +2,7 @@ # load network and chain info network=`cat .network` -chain=$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo 2>/dev/null | jq -r '.chain') +chain=$(${network}-cli -datadir=/home/bitcoin/.${network} getblockchaininfo | jq -r '.chain') command="lncli newaddress np2wkh" @@ -16,8 +16,17 @@ echo $command echo "" echo "RESULT:" +# PRECHECK) check if chain is in sync +chainInSync=$(lncli getinfo | grep '"synced_to_chain": true' -c) +if [ ${chainInSync} -eq 0 ]; then + command="" + result="FAIL PRECHECK - lncli getinfo shows 'synced_to_chain': false - wait until chain is sync " +fi + # execute command -result=$($command) +if [ ${#command} -gt 0 ]; then + result=$($command) +fi # on no result if [ ${#result} -eq 0 ]; then