Files
scripts/MINE/gBench.sh
Dobromir Popov 0690149510 more scripts
2025-09-02 02:15:10 +03:00

245 lines
9.7 KiB
Bash

#!/bin/bash
# GMiner algorithm test script - save as test_gminer.sh
# Default docker image (can be overridden with parameter)
DOCKER_IMAGE=${1:-"amdopencl"}
# amd-strix-halo-llama-rocm
#amd-strix-halo-llama-vulkan-radv
# amd-strix-halo-llama-vulkan-amdvlk
BTC_WALLET="bc1qjn4m6rmrveuxhk02a5qhe4r6kdcsvvt3vhdn9j"
# Algorithm to coin mapping
declare -A ALGO_COINS=(
["ethash"]="ETH"
["etchash"]="ETC"
["autolykos2"]="ERG"
["ergo"]="ERG"
["equihash125_4"]="ZEL"
["equihash144_5"]="ZEL"
["equihash192_7"]="ZEL"
["equihash210_9"]="ZEL"
["beamhash"]="BEAM"
["cuckaroo29"]="GRIN"
["cuckatoo32"]="GRIN"
["flux"]="FLUX"
["octopus"]="CFX"
)
# Function to fetch current cryptocurrency prices
fetch_prices() {
echo "Fetching current cryptocurrency prices..."
# Use CoinGecko API to get current prices
local api_url="https://api.coingecko.com/api/v3/simple/price?ids=ethereum,ethereum-classic,ergo,zelcash,beam,grin,flux,conflux&vs_currencies=usd"
# Try to fetch prices with timeout and fallback
local prices_json=$(timeout 10s curl -s "$api_url" 2>/dev/null)
if [[ -z "$prices_json" ]]; then
echo "Warning: Could not fetch current prices, using fallback values"
PRICES_ETH=3500.00
PRICES_ETC=35.00
PRICES_ERG=2.50
PRICES_ZEL=0.15
PRICES_BEAM=0.05
PRICES_GRIN=0.05
PRICES_FLUX=0.80
PRICES_CFX=0.20
return
fi
# Parse JSON response and extract prices using jq if available, otherwise use grep
if command -v jq &> /dev/null; then
PRICES_ETH=$(echo "$prices_json" | jq -r '.ethereum.usd // "3500.00"')
PRICES_ETC=$(echo "$prices_json" | jq -r '.ethereum-classic.usd // "35.00"')
PRICES_ERG=$(echo "$prices_json" | jq -r '.ergo.usd // "2.50"')
PRICES_ZEL=$(echo "$prices_json" | jq -r '.zelcash.usd // "0.15"')
PRICES_BEAM=$(echo "$prices_json" | jq -r '.beam.usd // "0.05"')
PRICES_GRIN=$(echo "$prices_json" | jq -r '.grin.usd // "0.05"')
PRICES_FLUX=$(echo "$prices_json" | jq -r '.flux.usd // "0.80"')
PRICES_CFX=$(echo "$prices_json" | jq -r '.conflux.usd // "0.20"')
else
# Fallback to grep parsing
PRICES_ETH=$(echo "$prices_json" | grep -o '"ethereum":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "3500.00")
PRICES_ETC=$(echo "$prices_json" | grep -o '"ethereum-classic":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "35.00")
PRICES_ERG=$(echo "$prices_json" | grep -o '"ergo":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "2.50")
PRICES_ZEL=$(echo "$prices_json" | grep -o '"zelcash":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "0.15")
PRICES_BEAM=$(echo "$prices_json" | grep -o '"beam":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "0.05")
PRICES_GRIN=$(echo "$prices_json" | grep -o '"grin":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "0.05")
PRICES_FLUX=$(echo "$prices_json" | grep -o '"flux":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "0.80")
PRICES_CFX=$(echo "$prices_json" | grep -o '"conflux":{"usd":[0-9]*\.[0-9]*' | grep -o '[0-9]*\.[0-9]*$' || echo "0.20")
fi
echo "Current prices fetched successfully:"
echo " ETH: $PRICES_ETH"
echo " ETC: $PRICES_ETC"
echo " ERG: $PRICES_ERG"
echo " ZEL: $PRICES_ZEL"
echo " BEAM: $PRICES_BEAM"
echo " GRIN: $PRICES_GRIN"
echo " FLUX: $PRICES_FLUX"
echo " CFX: $PRICES_CFX"
echo ""
}
# GMiner supported algorithms
ALGOS=(
"ethash"
"etchash"
"autolykos2"
"equihash125_4"
"equihash144_5"
"equihash192_7"
"equihash210_9"
"beamhash"
"cuckaroo29"
"cuckatoo32"
"flux"
"octopus"
"ergo"
)
echo "=== GMiner Algorithm Tests ==="
echo "Using BTC wallet: $BTC_WALLET"
echo "Using Docker image: $DOCKER_IMAGE"
echo "Testing each algorithm for 30 seconds..."
echo "======================================="
# Fetch current prices at startup
fetch_prices
# Function to calculate USD value
calculate_usd_reward() {
local algo=$1
local hashrate=$2
local coin=${ALGO_COINS[$algo]}
# Get price based on coin
local price=0
case $coin in
"ETH") price=$PRICES_ETH ;;
"ETC") price=$PRICES_ETC ;;
"ERG") price=$PRICES_ERG ;;
"ZEL") price=$PRICES_ZEL ;;
"BEAM") price=$PRICES_BEAM ;;
"GRIN") price=$PRICES_GRIN ;;
"FLUX") price=$PRICES_FLUX ;;
"CFX") price=$PRICES_CFX ;;
*) echo "Unknown" && return ;;
esac
if [[ -z "$price" || "$price" == "0" ]]; then
echo "Unknown"
return
fi
# Rough calculation: hashrate * price * 0.000001 (simplified)
local usd_value=$(echo "$hashrate * $price * 0.000001" | bc -l 2>/dev/null)
printf "%.2f" $usd_value 2>/dev/null || echo "Unknown"
}
# Function to extract hashrate from miner output
extract_hashrate() {
local output="$1"
# Look for common hashrate patterns in GMiner output
local hashrate=$(echo "$output" | grep -oE "[0-9]+\.[0-9]+ [KMGT]?H/s" | tail -1 | grep -oE "[0-9]+\.[0-9]+" | tail -1)
# If no decimal found, look for integer hashrates
if [[ -z "$hashrate" ]]; then
hashrate=$(echo "$output" | grep -oE "[0-9]+ [KMGT]?H/s" | tail -1 | grep -oE "[0-9]+" | tail -1)
fi
# If still no hashrate found, look for any number followed by H/s
if [[ -z "$hashrate" ]]; then
hashrate=$(echo "$output" | grep -oE "[0-9]+[\.]?[0-9]* H/s" | tail -1 | grep -oE "[0-9]+[\.]?[0-9]*" | tail -1)
fi
# If still no hashrate, look for "Speed:" patterns
if [[ -z "$hashrate" ]]; then
hashrate=$(echo "$output" | grep -i "speed:" | tail -1 | grep -oE "[0-9]+[\.]?[0-9]*" | tail -1)
fi
# If still no hashrate, look for any number followed by H/s (case insensitive)
if [[ -z "$hashrate" ]]; then
hashrate=$(echo "$output" | grep -ioE "[0-9]+[\.]?[0-9]* h/s" | tail -1 | grep -oE "[0-9]+[\.]?[0-9]*" | tail -1)
fi
echo "$hashrate"
}
for algo in "${ALGOS[@]}"; do
echo ""
echo "Testing: $algo"
echo "------------------------"
case $algo in
"ethash")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server eth.2miners.com:2020 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"etchash")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server etc.2miners.com:1010 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"autolykos2"|"ergo")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo autolykos2 --server ergo.2miners.com:8888 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"equihash125_4")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server zel.2miners.com:9090 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"equihash144_5")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server zel.2miners.com:9090 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"equihash192_7")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server zel.2miners.com:9090 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"equihash210_9")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server zel.2miners.com:9090 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"beamhash")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server beam.2miners.com:5252 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"cuckaroo29")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server grin.2miners.com:3030 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"cuckatoo32")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server grin.2miners.com:3030 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"flux")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server flux.2miners.com:2020 --user '$BTC_WALLET' --pass x" 2>&1)
;;
"octopus")
output=$(sudo docker exec -it $DOCKER_IMAGE timeout 35s bash -c "/mnt/dl/gminer/miner --algo $algo --server cfx.2miners.com:3254 --user '$BTC_WALLET' --pass x" 2>&1)
;;
*)
echo "No specific pool configured for $algo - skipping"
continue
;;
esac
exit_code=$?
# Extract hashrate and calculate USD value
hashrate=$(extract_hashrate "$output")
coin=${ALGO_COINS[$algo]}
usd_value=$(calculate_usd_reward "$algo" "$hashrate")
if [ $exit_code -eq 0 ]; then
echo "SUCCESS: $algo - Hashrate: ${hashrate}H/s - Coin: $coin - Est. USD/day: $usd_value"
elif [ $exit_code -eq 124 ]; then
echo "TIMEOUT: $algo - Hashrate: ${hashrate}H/s - Coin: $coin - Est. USD/day: $usd_value (likely working)"
else
echo "FAILED: $algo - Error code: $exit_code"
# Debug: show first few lines of output for failed attempts
echo "Debug output (first 5 lines):"
echo "$output" | head -5
fi
sleep 3
done
echo ""
echo "=== GMiner Tests Complete ==="
echo "Usage: $0 [docker_image_name]"
echo "Default: amdopencl"
echo "Example for RockM: $0 rockm"