#!/bin/bash set -euo pipefail if [[ ${1-} == "" ]]; then echo "Usage: $0 [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 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}"