Skip to content

Instantly share code, notes, and snippets.

@Janaka-Steph
Created October 27, 2018 11:43
Show Gist options
  • Save Janaka-Steph/187d9e61505978b2b032655b30f0d087 to your computer and use it in GitHub Desktop.
Save Janaka-Steph/187d9e61505978b2b032655b30f0d087 to your computer and use it in GitHub Desktop.
Script to get detailed info about LND wallet balance and channels
#!/bin/bash
# RaspiBolt channel balance display, by robclark56
# make executable & copy to
# /usr/local/bin/lnbalance
# current user must be able to execute bitcoin-cli and lncli
# Usage
# $ lnbalance to display lnd mainnet status
# $ lnbalance --testnet to display lnd testnet status
# $ lnbalance litecoin to display lnd litecoin status
# Set default (mainnet)
lncli='/usr/local/bin/lncli'
lnd_pid=$(systemctl show -p MainPID lnd | awk -F"=" '{print $2}')
chain='main'
# read cli args
for i in "$@"
do
case $i in
--testnet*)
lncli="${lncli} --network=testnet"
lnd_pid=$(systemctl show -p MainPID lnd | awk -F"=" '{print $2}')
chain='test'
shift # past argument=value
;;
*)
lncli="/usr/local/bin/lncli --chain=$i"
;;
esac
done
# set colors
color_red='\033[0;31m'
color_green='\033[0;32m'
color_yellow='\033[0;33m'
color_gray='\033[0;37m'
# get LND info
wallet_color="${color_yellow}"
if [ "$lnd_pid" -ne "0" ]; then
${lncli} getinfo 2>&1 | grep "Please unlock" >/dev/null
wallet_unlocked=$?
if [ "$wallet_unlocked" -eq 0 ] ; then
wallet_color="${color_red}"
ln_walletbalance="Locked"
else
ln_walletbalance="$(${lncli} walletbalance | jq -r '.confirmed_balance')" 2>/dev/null
ln_channelbalance="$(${lncli} channelbalance | jq -r '.balance')" 2>/dev/null
ln_channels_active="$(${lncli} listchannels --active_only| jq '.[] | length')" 2>/dev/null
ln_channels_inactive="$(${lncli} listchannels --inactive_only| jq '.[] | length')" 2>/dev/null
active_remote="$(${lncli} listchannels --active_only | jq -r '.channels |.[] | .remote_balance ' | jq -s 'add')"
active_local="$(${lncli} listchannels --active_only | jq -r '.channels |.[] | .local_balance ' | jq -s 'add')"
inactive_remote="$(${lncli} listchannels --inactive_only | jq -r '.channels |.[] | .remote_balance ' | jq -s 'add')"
active_fees="$(${lncli} listchannels --active_only | jq -r '.channels |.[] | .commit_fee ' | jq -s 'add')"
inactive_fees="$(${lncli} listchannels --inactive_only | jq -r '.channels |.[] | .commit_fee ' | jq -s 'add')"
inactive_local="$(${lncli} listchannels --inactive_only | jq -r '.channels |.[] | .local_balance ' | jq -s 'add')"
if [ "${active_local}" = 'null' ];then active_local=0;fi
if [ "${active_remote}" = 'null' ];then active_remote=0;fi
if [ "${inactive_local}" = 'null' ];then inactive_local=0;fi
if [ "${active_fees}" = 'null' ];then active_fees=0;fi
if [ "${inactive_fees}" = 'null' ];then inactive_fees=0;fi
if [ "${inactive_remote}" = 'null' ];then inactive_remote=0;fi
if [ "${ln_walletbalance}" = 'null' ];then ln_walletbalance=0;fi
if [ "${ln_walletbalance}" = 'Locked' ];then ln_walletbalance=0;fi
total_local=$(( ${ln_walletbalance} + ${active_local} + ${inactive_local} ))
total_remote=$(( ${active_remote} + ${inactive_remote} ))
total_fees=$(( ${active_fees} + ${inactive_fees} ))
ln_channels=$(( ${ln_channels_active} + ${ln_channels_inactive} ))
fi
else
wallet_color="${color_red}"
ln_walletbalance="Not Running"
fi
margin=''
printf "
${margin}${color_yellow}%-21s${color_gray}| ${color_yellow}Local${color_gray}| ${color_yellow}Remote${color_gray}|${color_yellow}Commitment Fees${color_gray}|
${margin}${color_gray}%-21s|${color_green}%12s${color_gray}|%12s|%15s|
${margin}${color_gray}%-18s%3s|${color_green}%12s${color_gray}|${color_yellow}%12s${color_gray}|${color_red}%15s${color_gray}|
${margin}${color_gray}%-18s%3s|${color_red}%12s${color_gray}|${color_red}%12s${color_gray}|${color_red}%15s${color_gray}|
${margin}${color_gray}%-18s%3s|%12s|%12s|${color_red}%15s${color_gray}|
" \
"${chain}net (sat)" \
"Wallet" "${ln_walletbalance}" "" "" \
"Active Channels" "${ln_channels_active}" "${active_local}" "${active_remote}" "${active_fees}" \
"Inactive Channels" "${ln_channels_inactive}" "${inactive_local}" "${inactive_remote}" "${inactive_fees}" \
"Total" "${ln_channels}" "${total_local}" "${total_remote}" "${total_fees}"
echo "$(tput -T xterm sgr0)"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment