Skip to content

Latest commit

 

History

History
548 lines (402 loc) · 13.8 KB

File metadata and controls

548 lines (402 loc) · 13.8 KB

PEMAKAIAN.md — Run, Monitor, Troubleshoot

Setelah INSTALASI.md selesai (build OK, preflight PASS, node orchestrator.js jalan dan [CONFIRMED] muncul minimal sekali), dokumen ini cara jalanin 24/7, monitoring, dan troubleshoot.


Daftar isi

  1. Mode running
  2. Run sebagai systemd service (recommended)
  3. Run via nohup + watchdog cron (alternatif)
  4. Monitoring
  5. Stop & restart
  6. Auto-withdraw HASH ke wallet utama
  7. Estimasi performa
  8. Troubleshooting

Mode running

3 cara run miner di VPS:

Mode Pros Cons Kapan dipakai
Foreground (node orchestrator.js) Lihat log live, gampang debug Mati kalau SSH disconnect Test awal, debugging
systemd service Auto-start on boot, auto-restart on crash, log managed Setup awal lebih ribet Production
nohup + cron watchdog Setup simpel Auto-restart manual via cron Quick deploy, hosting tanpa systemd

Run sebagai systemd service (recommended)

1. Bikin file hash256-miner.service

sudo nano /etc/systemd/system/hash256-miner.service

Isi:

[Unit]
Description=hash256.org CPU miner orchestrator
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=YOUR_USER
WorkingDirectory=/home/YOUR_USER/hash256-miner-c/orchestrator
ExecStart=/usr/bin/node orchestrator.js
StandardOutput=append:/home/YOUR_USER/hash256-miner-c/orchestrator/miner.log
StandardError=append:/home/YOUR_USER/hash256-miner-c/orchestrator/miner.log
Restart=always
RestartSec=10
# Hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/home/YOUR_USER/hash256-miner-c/orchestrator
ProtectHome=read-only

[Install]
WantedBy=multi-user.target

Ganti YOUR_USER dengan username VPS kamu (cek whoami).

2. Enable + start

sudo systemctl daemon-reload
sudo systemctl enable hash256-miner
sudo systemctl start hash256-miner

3. Verify running

sudo systemctl status hash256-miner

Output:

● hash256-miner.service - hash256.org CPU miner orchestrator
     Loaded: loaded (/etc/systemd/system/hash256-miner.service; enabled)
     Active: active (running) since Mon 2026-05-12 15:00:00 UTC; 2min ago
   Main PID: 12345 (node)
      Tasks: 8 (limit: 4690)
     Memory: 65.4M
        CPU: 1min 47s
     CGroup: /system.slice/hash256-miner.service
             ├─12345 /usr/bin/node orchestrator.js
             └─12356 /home/user/hash256-miner-c/bin/miner ...

4. Lihat log live

sudo journalctl -u hash256-miner -f
# atau:
tail -f ~/hash256-miner-c/orchestrator/miner.log

5. Service untuk monitor dashboard (opsional)

Bikin file kedua hash256-monitor.service:

sudo nano /etc/systemd/system/hash256-monitor.service
[Unit]
Description=hash256-miner-c web monitor dashboard
After=network-online.target hash256-miner.service

[Service]
Type=simple
User=YOUR_USER
WorkingDirectory=/home/YOUR_USER/hash256-miner-c/monitor
ExecStart=/usr/bin/node server.js
StandardOutput=append:/home/YOUR_USER/hash256-miner-c/monitor/monitor.log
StandardError=append:/home/YOUR_USER/hash256-miner-c/monitor/monitor.log
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable hash256-monitor
sudo systemctl start hash256-monitor
sudo systemctl status hash256-monitor

Run via nohup + watchdog cron (alternatif)

Kalau VPS tidak ada systemd (rare, tapi ada di container minimal), pakai script restart.sh + watchdog.sh:

1. Manual start

cd ~/hash256-miner-c
./restart.sh

restart.sh akan:

  • Kill orchestrator + monitor + miner subprocess yang lama
  • Start monitor di background (port 7878), output ke monitor/monitor.log
  • Start orchestrator di background, output ke orchestrator/miner.log
  • Tampilkan PID + HTTP health check

2. Setup watchdog cron

watchdog.sh cek tiap 5 menit apakah orchestrator + monitor masih jalan, kalau salah satu mati → call restart.sh.

crontab -e

Tambah baris:

# Hash256 watchdog: cek tiap 5 menit
*/5 * * * * /home/YOUR_USER/hash256-miner-c/watchdog.sh

Verify:

crontab -l | grep hash256
# */5 * * * * /home/.../hash256-miner-c/watchdog.sh

Cek log watchdog:

tail -f ~/hash256-miner-c/watchdog.log

Monitoring

A. Quick health snapshot

~/hash256-miner-c/monitor-check.sh

Output:

==============================================
  MONITOR CHECK  2026-05-12T15:30:00+00:00
==============================================

[PROCESSES]
  orchestrator: PID 12345, up 45:32
  monitor:      PID 12346, up 45:31
  miner bin:    PID 18934, up 02:14

[HASHRATE]
  last:      451.32 MH/s
  avg(30):   447.89 MH/s
  min/max:   38.42 / 462.18 MH/s

[STATS]
  uptime:       2732s
  eth balance:  0.004879 ETH
  hash balance: 200.00 HASH
  attempts:     2
  successes:    2
  reverts:      0
  skipped:      0
  epoch:        15
  blocks left:  31
  stats age:    8s (ok if <30s)

[RECENT EVENTS]
[2026-05-12T15:11:30Z] [orchestrator] miner FOUND nonce=12345...
[2026-05-12T15:11:31Z] [orchestrator] preflight OK, submitting mine(...)
[2026-05-12T15:11:43Z] [orchestrator] CONFIRMED block=25069405...

[ERRORS / WARNINGS LAST 500 LINES]
  error/warning count: 0

==============================================

Run kapan saja untuk health check.

B. Web dashboard (port 7878)

Kalau monitor jalan, buka:

# Akses dari laptop via SSH tunnel:
ssh -L 7878:127.0.0.1:7878 user@your-vps-host
# Lalu di browser laptop: http://localhost:7878

Dashboard menampilkan:

  • Hashrate live (line chart, last 60 samples)
  • Wallet ETH + HASH balance
  • Mining state (era, reward, difficulty, epoch)
  • Recent events (FOUND / CONFIRMED / REVERT / SKIP)
  • Last 200 log lines

C. JSON API endpoints

Endpoint Isi
GET /api/health Uptime + status check
GET /api/stats Snapshot dari orchestrator/stats.json (live)
GET /api/log?lines=200 Last N lines miner.log (plaintext)
GET /api/network Live contract state (cache 15s)

Contoh:

curl http://127.0.0.1:7878/api/stats | jq '.attempts, .successes, .ethBalance'
# 2
# 2
# "4879000000000000"

curl http://127.0.0.1:7878/api/network | jq '.epoch, .epochBlocksLeft'

D. Cron alert kalau ada anomali

Bikin script ~/hash256-miner-c/alert.sh:

#!/bin/bash
# Pakai monitor-check.sh, kirim alert kalau ada ANOMALY

OUTPUT=$(~/hash256-miner-c/monitor-check.sh)
if echo "$OUTPUT" | grep -q "ANOMALY\|NOT RUNNING"; then
  # Bisa ganti dengan curl ke Telegram bot, Discord webhook, atau email
  echo "$OUTPUT" | mail -s "[hash256] anomaly" your-email@example.com
fi

Cron tiap 30 menit:

*/30 * * * * /home/YOUR_USER/hash256-miner-c/alert.sh

Stop & restart

Restart (graceful)

# Systemd:
sudo systemctl restart hash256-miner

# Atau via script:
~/hash256-miner-c/restart.sh

Stop temporary

sudo systemctl stop hash256-miner
sudo systemctl stop hash256-monitor

Stop permanent + remove cron

~/hash256-miner-c/stop.sh

Script ini:

  • Hapus crontab entry yang match hash256-miner-c
  • Kill orchestrator, monitor, miner processes
  • Verify mati dengan /proc/*/cwd check
  • Force-kill kalau perlu

Kalau pakai systemd, tambahin manual:

sudo systemctl disable hash256-miner hash256-monitor
sudo systemctl stop hash256-miner hash256-monitor

Reboot VPS

Aman — kalau pakai WantedBy=multi-user.target di systemd unit, akan auto-start setelah reboot.


Auto-withdraw HASH ke wallet utama

Saat ini orchestrator tidak ada feature auto-transfer HASH ke wallet lain. Tapi gampang ditambah dengan small script Node.js:

Manual withdraw

cd ~/hash256-miner-c/orchestrator
node -e "
require('dotenv').config();
const { ethers } = require('ethers');

const RPC_URL = process.env.RPC_URL;
const PK = process.env.PRIVATE_KEY;
const TO = '0xYOUR_MAIN_WALLET_ADDRESS';
const HASH_CONTRACT = '0xAC7b5d06fa1e77D08aea40d46cB7C5923A87A0cc';
const ABI = [
  'function balanceOf(address) view returns (uint256)',
  'function transfer(address to, uint256 amount) returns (bool)',
];

(async () => {
  const provider = new ethers.JsonRpcProvider(RPC_URL);
  const wallet = new ethers.Wallet(PK, provider);
  const c = new ethers.Contract(HASH_CONTRACT, ABI, wallet);
  const bal = await c.balanceOf(wallet.address);
  console.log('HASH balance:', ethers.formatUnits(bal, 18));
  if (bal === 0n) { console.log('Nothing to withdraw'); process.exit(0); }
  const keepBuffer = 10n * 10n**18n;  // keep 10 HASH for safety
  const send = bal - keepBuffer;
  if (send <= 0n) { console.log('Below keep buffer'); process.exit(0); }
  const tx = await c.transfer(TO, send);
  console.log('tx:', tx.hash);
  const r = await tx.wait();
  console.log('CONFIRMED in block', r.blockNumber);
})();
"

Bisa di-cron weekly:

0 3 * * 0 cd /home/YOUR_USER/hash256-miner-c/orchestrator && node /path/to/withdraw.js >> withdraw.log 2>&1

Tapi sekali lagi, wallet mining = hot wallet. Kalau private key bocor, semua HASH yang masih di sana hilang. Withdraw rutin = kurangi exposure.


Estimasi performa

Faktor yang mempengaruhi solusi/jam

solusi/jam = (hashrate_aggregate / hashes_per_solution) × 3600
Hashrate Difficulty (~2.75e11 hashes/sol) Solusi/jam Solusi/hari
100 MH/s 2.75e11 1.31 31.4
200 MH/s 2.75e11 2.62 62.8
300 MH/s 2.75e11 3.93 94.3
400 MH/s 2.75e11 5.24 125.7
500 MH/s 2.75e11 6.55 157.1
600 MH/s 2.75e11 7.85 188.4

Reward per hari (Era 1, 100 HASH per solusi):

Hashrate HASH/hari
200 MH/s 6,280 HASH
400 MH/s 12,570 HASH
600 MH/s 18,840 HASH

Variance / luck

Ini solo mining → high variance. Standard deviation per solusi ~equal ke mean. Jadi:

  • Avg time to solve di 400 MH/s: 11 menit
  • P(< 5 min): ~36%
  • P(< 11 min): ~63% (median)
  • P(< 30 min): ~93%
  • P(< 60 min): ~99.5%

Jadi normal kalau kadang nemu solusi cepat, kadang stuck 30 menit. Long-run: avg 11 menit per solusi → 130 solusi/hari.

CPU temperature

Mining 24/7 di 4-vCPU push CPU ke 100% load terus. Cek thermal:

# VPS shared (paling banyak case): tidak bisa cek temp, vCPU mapped
# Dedicated CPU plan / bare metal: pakai sensors
sudo apt install lm-sensors -y
sudo sensors-detect --auto
sensors
# Cek "Tdie" atau "Tctl" (AMD) / "Core 0" (Intel)
# Sustained > 90°C = thermal throttling, hashrate akan turun

VPS provider biasanya provision dengan good cooling, jarang issue.


Troubleshooting

Orchestrator crash / restart loop

# Cek error
tail -100 ~/hash256-miner-c/orchestrator/miner.log | grep -E '\[error\]|FATAL'

# Atau journalctl:
sudo journalctl -u hash256-miner -n 100

Common errors:

Error Cause Fix
Cannot read properties of undefined (reading 'wait') RPC return null tx Ganti RPC, retry akan auto-jalan
RPC failed: timeout RPC down sementara Tambah failover RPC ke .env (atau pakai RPC_URL lain)
nonce too low Race condition dua submit dari wallet sama Jangan run > 1 instance per wallet
insufficient funds for gas ETH habis Top-up wallet
replacement transaction underpriced RPC timeout, retry pakai gas sama Naikin PRIORITY_FEE_GWEI di .env

Submit terus revert (status=0)

Berarti hash valid waktu submit, tapi sampai miner di-include di blok, challenge sudah rotasi. Pre-flight check biasanya catch ini, tapi race ada:

  1. Cek epochBlocksLeft saat solve. Kalau < 5 = high risk.
  2. MAX_GAS_PRICE_GWEI terlalu rendah → tx duduk lama di mempool, sementara epoch geser. Pertimbangkan naikin PRIORITY_FEE_GWEI jadi 1.0 supaya land cepat.
  3. Cek revertedBlock di Etherscan, baca revert reason di trace tab.

Hashrate drop dari ~450 ke ~50 MH/s

Kemungkinan:

  1. VPS shared CPU steal time tinggi — cek mpstat atau vmstat 1 lihat %steal. Kalau > 5% sustained = pindah ke dedicated CPU plan.
  2. Other process compete — cek top / htop, kill process lain yang heavy.
  3. Thermal throttling (jarang di VPS) — cek sensors.

Monitor dashboard tidak update

# Cek monitor jalan
sudo systemctl status hash256-monitor
# atau
pgrep -af 'node server.js'

# Cek stats file aktif
ls -la ~/hash256-miner-c/orchestrator/stats.json
# mtime harus < 30 detik dari sekarang

# Restart monitor:
sudo systemctl restart hash256-monitor

make error setelah update repo

make clean
make

Kadang object files lama cached, full rebuild fix it.

Wallet ETH habis tapi belum dapat reward

Kemungkinan banyak revert atau skipped (high gas, race). Cek stats:

curl http://127.0.0.1:7878/api/stats | jq '.attempts, .successes, .reverts, .skipped'

Kalau reverts > successes:

  • Naikin PRIORITY_FEE_GWEI
  • Atau turunin MAX_GAS_PRICE_GWEI (skip lebih agresif, save ETH)

"ALL DEAD ✓" muncul tapi miner masih jalan

stop.sh bug kalau ada process yang ganti cwd. Force kill manual:

sudo killall -9 node
sudo killall -9 miner  # atau "bin/miner"

Checklist running 24/7

Sebelum tinggal, pastikan:

  • systemd service hash256-miner.service enabled + active
  • systemd service hash256-monitor.service enabled + active (kalau pakai dashboard)
  • Watchdog cron */5 aktif (kalau tidak pakai systemd)
  • node preflight.js PASS semua
  • ETH balance ≥ 0.001 ETH (~10 tx budget)
  • Reboot VPS sekali untuk verify auto-start
  • monitor-check.sh tidak ada ANOMALY
  • Sudah catat 24-jam HASH balance, expected ~5,000-15,000 HASH
  • Backup .env di password manager (kalau VPS hilang, baru bisa recover dari PK)

🎉 Selamat mining!