#!/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