56 lines
1.8 KiB
Bash
56 lines
1.8 KiB
Bash
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
if [[ ${1-} == "" ]]; then
|
|
echo "Usage: $0 <destination_address> [amount]"
|
|
echo "Amount defaults to 1 RIN if not specified."
|
|
exit 1
|
|
fi
|
|
|
|
ADDRESS="$1"
|
|
AMOUNT="${2-1}"
|
|
WALLET="main"
|
|
CONTAINER="rincoin-node"
|
|
CLI_CMD=(sudo docker exec "$CONTAINER" rincoin-cli -datadir=/data -conf=/data/rincoin.conf -rpcwallet="$WALLET")
|
|
|
|
echo "Checking RinCoin node container..."
|
|
if ! sudo docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
|
echo "Error: container ${CONTAINER} is not running. Start it with 'sudo docker start ${CONTAINER}'."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Ensuring wallet '${WALLET}' is loaded..."
|
|
if ! "${CLI_CMD[@]//-rpcwallet=$WALLET/}" listwallets | grep -q '"main"'; then
|
|
echo "Wallet ${WALLET} not loaded, attempting to load..."
|
|
"${CLI_CMD[@]//-rpcwallet=$WALLET/}" loadwallet "$WALLET" >/dev/null
|
|
fi
|
|
|
|
echo "Checking available balance..."
|
|
BALANCE_RAW=$("${CLI_CMD[@]}" getbalance)
|
|
BALANCE=$(printf '%.8f' "$BALANCE_RAW")
|
|
|
|
if [[ $(bc <<< "$BALANCE_RAW < $AMOUNT") -eq 1 ]]; then
|
|
echo "Error: insufficient balance. Available ${BALANCE} RIN, but ${AMOUNT} RIN requested."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Broadcasting transaction..."
|
|
set +e
|
|
TX_OUTPUT=$("${CLI_CMD[@]}" sendtoaddress "$ADDRESS" "$AMOUNT" '' '' false true)
|
|
STATUS=$?
|
|
set -e
|
|
|
|
if [[ $STATUS -ne 0 ]]; then
|
|
echo "Failed to send transaction."
|
|
if [[ $STATUS -eq 4 ]]; then
|
|
echo "Wallet appears to be locked. Unlock it with 'sudo docker exec ${CONTAINER} rincoin-cli -datadir=/data -conf=/data/rincoin.conf -rpcwallet=${WALLET} walletpassphrase <passphrase> 600 true' and rerun."
|
|
fi
|
|
exit $STATUS
|
|
fi
|
|
|
|
echo "Transaction broadcast. TXID: ${TX_OUTPUT}"
|
|
echo "Verify with: sudo docker exec ${CONTAINER} rincoin-cli -datadir=/data -conf=/data/rincoin.conf gettransaction ${TX_OUTPUT}"
|
|
|
|
|