#!/usr/bin/env python3 import os import re import shutil import subprocess import time from pathlib import Path LOG = Path("/var/log/matador-miner.log") LAUNCHER = Path("/opt/matador/run_miner.sh") BIN = "/usr/local/bin/matador-miner" POOL = "stratum+tcp://ninjaraider.com:44920" WALLET = "btx1zfj9rwukzwwjh628m3y5v5y4dn8yjpyf5fmjjddqxetfygkq804uslr650h" def run(cmd, check=False): return subprocess.run(cmd, shell=True, executable="/bin/bash", check=check) def clean_worker(name): name = re.sub(r"[^A-Za-z0-9_.-]", "", name) return name or "rig" def main(): if os.geteuid() != 0: raise SystemExit("Run this with sudo: sudo python3 start_matador.py") run("curl -fsSL https://raw.githubusercontent.com/vanities/matador-miner/main/install.sh | bash", check=True) Path("/opt/matador").mkdir(parents=True, exist_ok=True) LOG.touch(exist_ok=True) os.chmod(LOG, 0o666) worker = clean_worker(os.environ.get("WORKER") or os.uname().nodename.split(".")[0]) launcher = f"""#!/bin/bash LOG="{LOG}" BIN="{BIN}" POOL="{POOL}" WALLET="{WALLET}" WORKER="{worker}" if command -v nvidia-smi >/dev/null 2>&1; then nvidia-smi -pm 1 >/dev/null 2>&1 || true GPU_INDEXES=$(nvidia-smi --query-gpu=index --format=csv,noheader 2>/dev/null | tr -d ' ') for GPU in $GPU_INDEXES; do nvidia-smi -i "$GPU" -rgc >/dev/null 2>&1 || true nvidia-smi -i "$GPU" -rac >/dev/null 2>&1 || true MAX_PL=$(nvidia-smi -i "$GPU" --query-gpu=power.max_limit --format=csv,noheader,nounits 2>/dev/null | head -n1 | tr -dc '0-9.') if [ -n "$MAX_PL" ]; then nvidia-smi -i "$GPU" -pl "$MAX_PL" >/dev/null 2>&1 || true fi done fi GPU_ARGS=() if command -v nvidia-smi >/dev/null 2>&1; then GPU_LIST=$(nvidia-smi --query-gpu=index --format=csv,noheader 2>/dev/null | paste -sd, -) if [ -n "$GPU_LIST" ]; then GPU_ARGS=(--gpus "$GPU_LIST") fi fi while true do echo "[$(date)] Starting Matador BTX Miner on NinjaRaider 44920 as worker '$WORKER'..." | tee -a "$LOG" "$BIN" \\ --mode pool \\ --pool "$POOL" \\ --worker "$WORKER" \\ --payoutaddress "$WALLET" \\ "${{GPU_ARGS[@]}}" \\ 2>&1 | tee -a "$LOG" echo "[$(date)] Miner exited. Restarting in 5 seconds..." | tee -a "$LOG" sleep 5 done """ LAUNCHER.write_text(launcher) os.chmod(LAUNCHER, 0o755) subprocess.Popen( [str(LAUNCHER)], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, start_new_session=True, ) time.sleep(3) subprocess.run(["tail", "-f", str(LOG)]) if __name__ == "__main__": main()