# #!/bin/bash # # RinCoin Solo Mining using Built-in Core Mining # # Uses RinCoin Core's generatetoaddress command # # Default address (can be overridden with command line parameter) # DEFAULT_ADDRESS="rin1qahvvv9d5f3443wtckeqavwp9950wacxfmwv20q" # # Get total CPU cores for default thread count # TOTAL_CORES=$(nproc) # DEFAULT_THREADS=$TOTAL_CORES # # Parse command line arguments # RIN_ADDRESS="" # THREAD_COUNT="" # # Parse arguments # while [[ $# -gt 0 ]]; do # case $1 in # -a|--address) # RIN_ADDRESS="$2" # shift 2 # ;; # -t|--threads) # THREAD_COUNT="$2" # shift 2 # ;; # -h|--help) # echo "Usage: $0 [OPTIONS]" # echo "" # echo "Options:" # echo " -a, --address ADDRESS RinCoin address to mine to (default: $DEFAULT_ADDRESS)" # echo " -t, --threads COUNT Number of threads to use (default: $DEFAULT_THREADS)" # echo " -h, --help Show this help message" # echo "" # echo "Examples:" # echo " $0 # Use defaults (all cores, default address)" # echo " $0 -a rin1q... -t 16 # Custom address and 16 threads" # echo " $0 --address rin1q... --threads 8 # Custom address and 8 threads" # exit 0 # ;; # *) # echo "Unknown option: $1" # echo "Use -h or --help for usage information" # exit 1 # ;; # esac # done # # Set defaults if not provided # if [ -z "$RIN_ADDRESS" ]; then # RIN_ADDRESS="$DEFAULT_ADDRESS" # echo "No address provided, using default: $RIN_ADDRESS" # fi # if [ -z "$THREAD_COUNT" ]; then # THREAD_COUNT="$DEFAULT_THREADS" # echo "No thread count provided, using all cores: $THREAD_COUNT" # fi # # Validate thread count # if ! [[ "$THREAD_COUNT" =~ ^[0-9]+$ ]] || [ "$THREAD_COUNT" -lt 1 ] || [ "$THREAD_COUNT" -gt "$TOTAL_CORES" ]; then # echo "❌ Error: Invalid thread count: $THREAD_COUNT" # echo "Thread count must be between 1 and $TOTAL_CORES" # exit 1 # fi # echo "=== RinCoin Solo Mining (Built-in Core Mining) ===" # echo "CPU Cores Available: $TOTAL_CORES" # echo "Threads to Use: $THREAD_COUNT" # echo "Target Address: $RIN_ADDRESS" # echo "" # echo "" # # Configuration # RPC_HOST="127.0.0.1" # RPC_PORT="9556" # RPC_USER="rinrpc" # RPC_PASS="745ce784d5d537fc06105a1b935b7657903cfc71a5fb3b90" # # Function to call RPC # call_rpc() { # local method="$1" # local params="$2" # curl -s --user "$RPC_USER:$RPC_PASS" \ # -H 'content-type: text/plain' \ # --data "{\"jsonrpc\":\"1.0\",\"id\":\"curl\",\"method\":\"$method\",\"params\":$params}" \ # "http://$RPC_HOST:$RPC_PORT/" # } # # Wait for node to be ready # echo "Waiting for RinCoin node to be ready..." # while true; do # response=$(call_rpc "getblockchaininfo" "[]") # if [[ $response != *"Loading block index"* ]]; then # break # fi # echo "Node still loading... waiting 10 seconds" # sleep 10 # done # echo "✅ Node is ready!" # echo "" # # Load wallet if not already loaded # echo "Loading wallet..." # wallet_response=$(call_rpc "loadwallet" "[\"main\"]") # if [[ $wallet_response == *"error"* ]] && [[ $wallet_response == *"already loaded"* ]]; then # echo "✅ Wallet already loaded" # else # echo "✅ Wallet loaded successfully" # fi # echo "" # # Validate the provided address (basic check) # if [[ ! "$RIN_ADDRESS" =~ ^rin1[a-zA-Z0-9]{25,}$ ]]; then # echo "❌ Error: Invalid RinCoin address format: $RIN_ADDRESS" # echo "RinCoin addresses should start with 'rin1' and be ~30 characters long" # exit 1 # fi # echo "✅ Using RinCoin Address: $RIN_ADDRESS" # echo "" # # Get blockchain info # echo "Blockchain Status:" # blockchain_info=$(call_rpc "getblockchaininfo" "[]") # blocks=$(echo "$blockchain_info" | grep -o '"blocks":[^,]*' | cut -d':' -f2) # headers=$(echo "$blockchain_info" | grep -o '"headers":[^,]*' | cut -d':' -f2) # difficulty=$(echo "$blockchain_info" | grep -o '"difficulty":[^,]*' | cut -d':' -f2) # echo "Blocks: $blocks" # echo "Headers: $headers" # echo "Difficulty: $difficulty" # echo "" # echo "⚠️ IMPORTANT: Built-in Core Mining Limitations:" # echo "1. Uses CPU only (not GPU)" # echo "2. Very low hashpower compared to specialized miners" # echo "3. Extremely low chance of finding blocks solo" # echo "4. Best for testing, not profitable mining" # echo "5. Thread count affects mining attempts per cycle" # echo "" # echo "🚀 Starting Built-in Solo Mining..." # echo "Target Address: $RIN_ADDRESS" # echo "Threads: $THREAD_COUNT" # echo "Press Ctrl+C to stop mining" # echo "" # # Start built-in mining with specified thread count # # Note: RinCoin Core's generatetoaddress doesn't directly support thread count # # but we can run multiple instances or adjust the maxtries parameter # while true; do # echo "Attempting to mine 1 block with $THREAD_COUNT threads..." # # Adjust maxtries based on thread count for better distribution # adjusted_tries=$((1000000 * THREAD_COUNT / TOTAL_CORES)) # mining_result=$(call_rpc "generatetoaddress" "[1, \"$RIN_ADDRESS\", $adjusted_tries]") # if [[ $mining_result == *"result"* ]] && [[ $mining_result != *"[]"* ]]; then # echo "🎉 BLOCK FOUND!" # echo "Result: $mining_result" # break # else # echo "No block found in this attempt (tries: $adjusted_tries). Retrying..." # sleep 5 # fi # done