#!/bin/bash _temp="./download/dialog.$$" _error="./.error.out" # load raspiblitz config data (with backup from old config) source /home/admin/raspiblitz.info source /mnt/hdd/raspiblitz.conf if [ ${#network} -eq 0 ]; then network=`cat .network`; fi if [ ${#network} -eq 0 ]; then network="bitcoin"; fi if [ ${#chain} -eq 0 ]; then echo "gathering chain info ... please wait" chain=$(${network}-cli getblockchaininfo | jq -r '.chain') fi echo "" echo "*** Precheck ***" # check if chain is in sync chainInSync=$(lncli --chain=${network} --network=${chain}net getinfo | grep '"synced_to_chain": true' -c) if [ ${chainInSync} -eq 0 ]; then echo "FAIL - 'lncli getinfo' shows 'synced_to_chain': false" echo "Wait until chain is sync with LND and try again." echo "" exit 1 fi # check available funding confirmedBalance=$(lncli --chain=${network} --network=${chain}net walletbalance | grep '"confirmed_balance"' | cut -d '"' -f4) if [ ${confirmedBalance} -eq 0 ]; then echo "FAIL - You have 0 SATOSHI in your confirmed LND On-Chain Wallet." echo "Please fund your on-chain wallet first and wait until confirmed." echo "" exit 1 fi # check number of connected peers numConnectedPeers=$(lncli --chain=${network} --network=${chain}net listpeers | grep pub_key -c) if [ ${numConnectedPeers} -eq 0 ]; then echo "FAIL - no peers connected on lightning network" echo "You can only open channels to peer nodes to connected to first." echo "Use CONNECT peer option in main menu first." echo "" exit 1 fi # let user pick a peer to open a channels with OPTIONS=() while IFS= read -r grepLine do pubKey=$(echo ${grepLine} | cut -d '"' -f4) #echo "grepLine(${pubKey})" OPTIONS+=(${pubKey} "") done < <(lncli --chain=${network} --network=${chain}net listpeers | grep pub_key) TITLE="Open (Payment) Channel" MENU="\nChoose a peer you connected to, to open the channel with: \n " pubKey=$(dialog --clear \ --title "$TITLE" \ --menu "$MENU" \ 14 73 5 \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) clear if [ ${#pubKey} -eq 0 ]; then echo "Selected CANCEL" echo "" exit 1 fi # find out what is the minimum amount # TODO find a better way - also consider dust and channel reserve # details see here: https://github.com/btcontract/lnwallet/issues/52 minSat=20000 if [ "${network}" = "bitcoin" ]; then minSat=250000 fi _error="./.error.out" lncli --chain=${network} openchannel --network=${chain}net ${CHOICE} 1 0 2>$_error error=`cat ${_error}` if [ $(echo "${error}" | grep "channel is too small" -c) -eq 1 ]; then minSat=$(echo "${error}" | tr -dc '0-9') fi # let user enter a amount l1="Amount in SATOSHI to fund this channel:" l2="min required : ${minSat}" l3="max available : ${confirmedBalance}" dialog --title "Funding of Channel" \ --inputbox "$l1\n$l2\n$l3" 10 60 2>$_temp amount=$(cat $_temp | xargs | tr -dc '0-9') shred $_temp if [ ${#amount} -eq 0 ]; then echo "FAIL - not a valid input (${amount})" exit 1 fi # build command command="lncli --chain=${network} --network=${chain}net openchannel ${pubKey} ${amount} 0" # info output clear echo "******************************" echo "Open Channel" echo "******************************" echo "" echo "COMMAND LINE: " echo $command echo "" echo "RESULT:" # execute command result=$($command 2>$_error) error=`cat ${_error}` #echo "result(${result})" #echo "error(${error})" if [ ${#error} -gt 0 ]; then echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "FAIL" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo "${error}" else echo "******************************" echo "WIN" echo "******************************" echo "${result}" echo "" echo "Whats next? --> You need to wait 6 confirmations, for the channel to be ready." fundingTX=$(echo "${result}" | grep 'funding_txid' | cut -d '"' -f4) if [ "${network}" = "bitcoin" ]; then if [ "${chain}" = "main" ]; then echo "https://live.blockcypher.com/btc/tx/${fundingTX}" else echo "https://live.blockcypher.com/btc-testnet/tx/${fundingTX}" fi fi if [ "${network}" = "litecoin" ]; then echo "https://live.blockcypher.com/ltc/tx/${fundingTX}/" fi fi echo ""