2020-05-28 01:15:47 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
2020-05-28 01:34:09 +02:00
|
|
|
if [ "$1" == "-h" ] || [ "$1" == "help" ]; then
|
2020-05-28 01:15:47 +02:00
|
|
|
echo "script to unlock LND wallet"
|
2021-07-02 23:55:33 +02:00
|
|
|
echo "lnd.unlock.sh status"
|
|
|
|
echo "lnd.unlock.sh unlock [?passwordC]"
|
2020-05-28 01:15:47 +02:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-04-08 18:04:16 +02:00
|
|
|
# load raspiblitz info & conf
|
|
|
|
source /home/admin/raspiblitz.info
|
2020-07-11 22:09:55 +02:00
|
|
|
source /mnt/hdd/raspiblitz.conf
|
|
|
|
|
2021-05-24 20:13:36 +01:00
|
|
|
source <(/home/admin/config.scripts/network.aliases.sh getvars lnd ${chain}net)
|
2021-05-23 19:00:52 +01:00
|
|
|
|
2021-07-02 23:55:33 +02:00
|
|
|
# 1. parameter (default is unlock)
|
|
|
|
action="$1"
|
|
|
|
|
|
|
|
# 2. parameter (optional password)
|
|
|
|
passwordC="$2"
|
2020-06-01 22:48:24 +02:00
|
|
|
|
2020-05-28 01:29:52 +02:00
|
|
|
# check if wallet is already unlocked
|
2021-07-15 23:32:27 +02:00
|
|
|
# echo "# checking LND wallet ... (can take some time)"
|
2021-07-20 22:58:24 +02:00
|
|
|
lndError=$(sudo -u bitcoin lncli --chain=${network} --network=${chain}net getinfo 2>&1)
|
|
|
|
walletLocked=$(echo "${lndError}" | grep -c "Wallet is encrypted")
|
|
|
|
macaroonsMissing=$(echo "${lndError}" | grep -c "unable to read macaroon")
|
2021-07-02 23:55:33 +02:00
|
|
|
|
|
|
|
# if action sis just status
|
|
|
|
if [ "${action}" == "status" ]; then
|
|
|
|
echo "locked=${walletLocked}"
|
|
|
|
echo "missingMacaroons=${macaroonsMissing}"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# if already unlocked all is done
|
2020-08-02 22:25:22 +02:00
|
|
|
if [ ${walletLocked} -eq 0 ] && [ ${macaroonsMissing} -eq 0 ]; then
|
2021-07-15 23:32:27 +02:00
|
|
|
# echo "# OK LND wallet was already unlocked"
|
2020-05-28 01:36:35 +02:00
|
|
|
exit 0
|
2020-05-28 01:29:52 +02:00
|
|
|
fi
|
|
|
|
|
2020-06-01 22:48:24 +02:00
|
|
|
# check if LND is below 0.10 (has no STDIN password option)
|
|
|
|
fallback=0
|
|
|
|
source <(/home/admin/config.scripts/lnd.update.sh info)
|
|
|
|
if [ ${lndInstalledVersionMajor} -eq 0 ] && [ ${lndInstalledVersionMain} -lt 10 ]; then
|
|
|
|
if [ ${#passwordC} -gt 0 ]; then
|
|
|
|
echo "error='lnd version too old'"
|
|
|
|
exit 1
|
|
|
|
else
|
|
|
|
fallback=1
|
|
|
|
fi
|
|
|
|
fi
|
2020-05-28 01:15:47 +02:00
|
|
|
|
|
|
|
# if no password check if stored for auto-unlock
|
|
|
|
if [ ${#passwordC} -eq 0 ]; then
|
|
|
|
autoUnlockExists=$(sudo ls /root/lnd.autounlock.pwd 2>/dev/null | grep -c "lnd.autounlock.pwd")
|
|
|
|
if [ ${autoUnlockExists} -eq 1 ]; then
|
|
|
|
echo "# using auto-unlock"
|
|
|
|
passwordC=$(sudo cat /root/lnd.autounlock.pwd)
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# if still no password get from user
|
|
|
|
manualEntry=0
|
2020-06-01 22:48:24 +02:00
|
|
|
if [ ${#passwordC} -eq 0 ] && [ ${fallback} -eq 0 ]; then
|
2020-05-28 02:50:30 +02:00
|
|
|
echo "# manual input"
|
2020-05-28 01:15:47 +02:00
|
|
|
manualEntry=1
|
|
|
|
passwordC=$(whiptail --passwordbox "\nEnter Password C to unlock wallet:\n" 9 52 "" --title " LND Wallet " --backtitle "RaspiBlitz" 3>&1 1>&2 2>&3)
|
|
|
|
fi
|
|
|
|
|
|
|
|
loopCount=0
|
2020-06-01 22:59:07 +02:00
|
|
|
while [ ${fallback} -eq 0 ]
|
2020-05-28 01:15:47 +02:00
|
|
|
do
|
|
|
|
|
|
|
|
# TRY TO UNLOCK ...
|
|
|
|
|
|
|
|
loopCount=$(($loopCount +1))
|
2020-05-28 03:31:07 +02:00
|
|
|
echo "# calling: lncli unlock"
|
2021-04-08 18:04:16 +02:00
|
|
|
recoveryOption=""
|
|
|
|
if [ "${fundRecovery}" == "1" ]; then
|
|
|
|
recoveryOption="--recovery_window=1000 "
|
2021-07-05 22:18:48 +01:00
|
|
|
echo "# running unlock with ${recoveryOption}"
|
2021-04-08 18:04:16 +02:00
|
|
|
fi
|
2021-06-29 13:25:25 +01:00
|
|
|
result=$(echo "$passwordC" | $lncli_alias unlock ${recoveryOption}--stdin 2>&1)
|
2020-05-28 01:41:45 +02:00
|
|
|
wasUnlocked=$(echo "${result}" | grep -c 'successfully unlocked')
|
|
|
|
wrongPassword=$(echo "${result}" | grep -c 'invalid passphrase')
|
2020-05-28 01:39:33 +02:00
|
|
|
if [ ${wasUnlocked} -gt 0 ]; then
|
2020-05-28 01:15:47 +02:00
|
|
|
|
|
|
|
# SUCCESS UNLOCK
|
|
|
|
|
|
|
|
echo "# OK LND wallet unlocked"
|
2020-05-28 01:35:24 +02:00
|
|
|
exit 0
|
2020-05-28 01:15:47 +02:00
|
|
|
|
2020-05-28 01:39:33 +02:00
|
|
|
elif [ ${wrongPassword} -gt 0 ]; then
|
2020-05-28 01:15:47 +02:00
|
|
|
|
|
|
|
# WRONG PASSWORD
|
|
|
|
|
|
|
|
echo "# wrong password"
|
|
|
|
if [ ${manualEntry} -eq 1 ]; then
|
|
|
|
passwordC=$(whiptail --passwordbox "\nEnter Password C again:\n" 9 52 "" --title " Password was Wrong " --backtitle "RaspiBlitz - LND Wallet" 3>&1 1>&2 2>&3)
|
|
|
|
else
|
2020-05-28 01:36:35 +02:00
|
|
|
echo "error='wrong password'"
|
2020-05-28 01:35:24 +02:00
|
|
|
exit 1
|
2020-05-28 01:15:47 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
else
|
|
|
|
|
2021-03-08 11:02:10 -08:00
|
|
|
# UNKNOWN RESULT
|
2020-05-28 01:15:47 +02:00
|
|
|
|
2020-05-28 01:29:52 +02:00
|
|
|
# check if wallet was unlocked anyway
|
2021-05-23 19:00:52 +01:00
|
|
|
walletLocked=$($lncli_alias getinfo 2>&1 | grep -c unlock)
|
2020-07-11 22:09:55 +02:00
|
|
|
if [ "${walletUnlocked}" = "0" ]; then
|
2020-05-28 01:29:52 +02:00
|
|
|
echo "# OK LND wallet unlocked"
|
2020-05-28 01:35:24 +02:00
|
|
|
exit 0
|
2020-05-28 01:29:52 +02:00
|
|
|
fi
|
|
|
|
|
2021-03-08 11:02:10 -08:00
|
|
|
echo "# unknown error"
|
2020-05-28 01:15:47 +02:00
|
|
|
if [ ${manualEntry} -eq 1 ]; then
|
2020-05-28 12:48:28 +02:00
|
|
|
whiptail --title " LND ERROR " --msgbox "${result}" --ok-button "Try CLI" 8 60
|
2020-06-01 22:48:24 +02:00
|
|
|
fallback=1
|
2020-05-28 01:15:47 +02:00
|
|
|
else
|
|
|
|
# maybe lncli is waiting to get ready (wait and loop)
|
|
|
|
if [ ${loopCount} -gt 10 ]; then
|
|
|
|
echo "error='failed to unlock'"
|
2020-05-28 01:35:24 +02:00
|
|
|
exit 1
|
2020-05-28 01:15:47 +02:00
|
|
|
fi
|
|
|
|
sleep 2
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2020-06-01 22:48:24 +02:00
|
|
|
done
|
|
|
|
|
2020-07-20 12:13:53 +02:00
|
|
|
# FALLBACK LND CLI UNLOCK
|
2020-06-01 23:20:19 +02:00
|
|
|
walletLocked=1
|
|
|
|
while [ ${walletLocked} -gt 0 ]
|
2020-06-01 22:48:24 +02:00
|
|
|
do
|
|
|
|
# do CLI unlock
|
2020-06-01 23:00:08 +02:00
|
|
|
echo
|
2020-06-01 22:48:24 +02:00
|
|
|
echo "############################"
|
2021-05-23 19:00:52 +01:00
|
|
|
echo "Calling: ${netprefix}lncli unlock"
|
2020-06-01 22:48:24 +02:00
|
|
|
echo "Please re-enter Password C:"
|
2021-06-27 22:33:47 +01:00
|
|
|
$lncli_alias unlock --recovery_window=1000
|
2020-06-01 22:48:24 +02:00
|
|
|
|
|
|
|
# test unlock
|
2021-05-23 19:00:52 +01:00
|
|
|
walletLocked=$($lncli_alias getinfo 2>&1 | grep -c unlock)
|
2020-06-01 23:20:19 +02:00
|
|
|
if [ ${walletLocked} -eq 0 ]; then
|
|
|
|
echo "# --> OK LND wallet unlocked"
|
2020-06-01 22:48:24 +02:00
|
|
|
else
|
2020-06-01 23:20:19 +02:00
|
|
|
echo "# --> Was not able to unlock wallet ... try again or use CTRL-C to exit"
|
2020-06-01 22:48:24 +02:00
|
|
|
fi
|
2020-06-01 22:59:07 +02:00
|
|
|
|
2020-07-11 22:09:55 +02:00
|
|
|
done
|