๐ Miner Initialization and Metadata Registration
Setelah unit ini kamu akan:
- Konfigurasi
.envfile dengan semua secret (API keys, wallet paths) - Register metadata (sports & leagues yang kamu cover) ke subnet
- Launch miner process untuk pertama kali dan lihat log validator query masuk
- Setup PM2 atau systemd supaya miner running 24/7 dan auto-restart
- Tahu cara monitor health & log rotation
- โ Unit 4 โ Almanac Registration selesai โ binding sukses
- โ
Sportstensor repo sudah cloned di
~/bittensor/sportstensor - โ
config.yamlvalid - โ Port 8091 (atau sesuai config) accessible dari internet
- โ (Opsional tapi recommended) API key dari sports data provider โ The Odds API free tier gratis, Sportradar trial berbayar
๐๏ธ Step 1 โ Setup File .envโ
Secret dan config runtime sebaiknya tidak di config.yaml. Pakai .env supaya tidak ter-commit.
cd ~/bittensor/sportstensor
cp .env.example .env # kalau ada; kalau tidak buat manual
nano .env
Contoh isi:
# === Wallet (optional, override config.yaml) ===
BT_WALLET_NAME=sn41_miner
BT_WALLET_HOTKEY=miner_01
BT_WALLET_PATH=/home/ubuntu/.bittensor/wallets
# === Subnet ===
BT_NETUID=41
BT_NETWORK=finney # finney = mainnet; 'test' = testnet
# === Endpoint (miner listens here) ===
MINER_HOST=0.0.0.0
MINER_PORT=8091
MINER_EXTERNAL_IP=203.0.113.42
MINER_EXTERNAL_PORT=8091
# === Sports Data APIs ===
ODDS_API_KEY=your_odds_api_key_here
SPORTRADAR_API_KEY=your_sportradar_key_here # optional
# === Logging ===
LOG_LEVEL=debug
LOG_DIR=./logs
Pastikan .env ada di .gitignore. API key bocor = billing kamu jebol.
echo ".env" >> .gitignore
Checkpointโ
set -a; source .env; set +a
echo "Netuid: $BT_NETUID โ Hotkey: $BT_WALLET_HOTKEY"
๐ท๏ธ Step 2 โ Register Metadata (Sports Coverage)โ
Subnet butuh tahu sport apa yang kamu predict supaya validator route query yang relevan saja.
Jalankan metadata registrationโ
Command exact bervariasi per repo โ umum:
python scripts/register_metadata.py \
--wallet.name sn41_miner \
--wallet.hotkey miner_01 \
--sports "mlb,nba,nfl,soccer" \
--netuid 41
Atau via CLI package:
sportstensor-miner metadata \
--sports mlb,nba,nfl,soccer
Apa yang terjadiโ
- Script build payload:
{hotkey, sports: [...], model_version: "x.y.z"} - Sign dengan hotkey
- Submit ke metadata endpoint (bisa on-chain commitment atau almanac)
- Dapat konfirmasi
Output suksesโ
[metadata] Registering sports: ['mlb', 'nba', 'nfl', 'soccer']
[metadata] Model version: sportstensor-miner 2.1.0
[metadata] โ
Metadata commit successful
tx_hash / commit_ref: 0x9f3e...abcd
Kalau baru belajar, pick satu sport dulu (misal mlb saja). Fokus optimasi satu domain > jadi jack-of-all-trades-prediksi-jelek. Tambah sport setelah CLV positif.
๐ Step 3 โ Launch Miner Process (Foreground Dulu)โ
Jalankan di foreground dulu untuk verify semua berjalan:
cd ~/bittensor/sportstensor
source ~/bittensor/venv/bin/activate
python neurons/miner.py \
--netuid 41 \
--wallet.name sn41_miner \
--wallet.hotkey miner_01 \
--axon.port 8091 \
--axon.external_ip 203.0.113.42 \
--logging.debug
Log yang sehat (contoh awal)โ
2026-04-14 10:30:12 | INFO | Loading wallet sn41_miner/miner_01
2026-04-14 10:30:13 | INFO | Connected to subtensor finney (netuid 41)
2026-04-14 10:30:14 | INFO | Metagraph synced. UID=142. N_miners=256
2026-04-14 10:30:14 | INFO | Axon listening on 0.0.0.0:8091 (external: 203.0.113.42:8091)
2026-04-14 10:30:15 | INFO | Miner ready. Waiting for validator queries...
Query pertama masuk (bisa beberapa menit sampai jam)โ
2026-04-14 10:47:02 | DEBUG | [validator 5Gh...abc UID=7] Query received
event_id=mlb_2026_04_14_NYY_BOS sport=mlb kickoff=2026-04-14T19:05:00Z
2026-04-14 10:47:03 | DEBUG | Prediction generated: home_win=0.58 confidence=0.72
2026-04-14 10:47:03 | INFO | Response sent to validator 5Gh...abc in 247ms
Normal di awal โ validator kadang query dalam batch. Tunggu hingga 4 jam. Kalau tetap sepi:
- Verify almanac binding aktif
- Cek
metagraphโ pastikan UID kamu masih terdaftar - Cek port reachable dari internet
Stop (Ctrl+C) setelah yakin log sehat.โ
๐ Step 4 โ Jalankan 24/7 dengan PM2โ
PM2 = process manager Node.js yang juga jalan untuk Python. Auto-restart kalau crash, log rotation built-in.
Install PM2โ
# butuh Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g pm2
Start miner via PM2โ
cd ~/bittensor/sportstensor
pm2 start neurons/miner.py \
--name sn41-miner \
--interpreter ~/bittensor/venv/bin/python \
-- \
--netuid 41 \
--wallet.name sn41_miner \
--wallet.hotkey miner_01 \
--axon.port 8091 \
--axon.external_ip 203.0.113.42 \
--logging.debug
-- double dashFlag sebelum -- untuk PM2. Flag sesudah -- diteruskan ke script Python.
Kontrol PM2โ
pm2 status # list semua process
pm2 logs sn41-miner # tail log realtime
pm2 logs sn41-miner --lines 100 # last 100 lines
pm2 restart sn41-miner # restart
pm2 stop sn41-miner # stop (tidak delete)
pm2 delete sn41-miner # hapus dari PM2
Persist across rebootโ
pm2 save
pm2 startup
# ikuti instruksi output (copy-paste command `sudo env PATH=... pm2 ...`)
Setelah ini, miner auto-start tiap server reboot.
Checkpointโ
pm2 status
Expected:
โโโโโโโฌโโโโโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโ
โ id โ name โ mode โ status โ cpu โ memory โ โบ โ
โโโโโโโผโโโโโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโผโโโโโโโค
โ 0 โ sn41-miner โ fork โ online โ 1.2% โ 215mb โ 0 โ
โโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโดโโโโโโโ
status: online + restart count 0 = sehat.
๐ ๏ธ Step 4b (Alternatif) โ systemdโ
Kalau prefer native systemd:
sudo nano /etc/systemd/system/sn41-miner.service
Isi:
[Unit]
Description=Sportstensor SN41 Miner
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/bittensor/sportstensor
Environment="PATH=/home/ubuntu/bittensor/venv/bin:/usr/bin:/bin"
EnvironmentFile=/home/ubuntu/bittensor/sportstensor/.env
ExecStart=/home/ubuntu/bittensor/venv/bin/python neurons/miner.py \
--netuid 41 \
--wallet.name sn41_miner \
--wallet.hotkey miner_01 \
--axon.port 8091 \
--axon.external_ip 203.0.113.42 \
--logging.debug
Restart=always
RestartSec=10
StandardOutput=append:/var/log/sn41-miner.log
StandardError=append:/var/log/sn41-miner.err.log
[Install]
WantedBy=multi-user.target
Aktifkan:
sudo systemctl daemon-reload
sudo systemctl enable sn41-miner
sudo systemctl start sn41-miner
sudo systemctl status sn41-miner
sudo journalctl -u sn41-miner -f # tail log
๐ Step 5 โ Monitoring & Health Checksโ
A. Tail log realtimeโ
pm2 logs sn41-miner --lines 50
# atau
tail -f ~/bittensor/sportstensor/logs/miner.log
B. Simple watcher scriptโ
Buat scripts/watch.sh:
#!/bin/bash
while true; do
echo "=== $(date) ==="
echo "Process:"
pm2 jlist | python3 -c "import sys,json; d=json.load(sys.stdin); m=[x for x in d if x['name']=='sn41-miner']; print('status:', m[0]['pm2_env']['status'] if m else 'NOT FOUND')"
echo "Metagraph (emission & trust):"
btcli subnet metagraph --netuid 41 2>/dev/null | grep "<hotkey_prefix>"
echo
sleep 300
done
C. Query counterโ
Grep log untuk hitung query per jam:
grep "Query received" logs/miner.log | wc -l
D. Dashboard (opsional advanced)โ
- Grafana + Prometheus โ kalau miner expose
/metricsendpoint - Sportstensor public leaderboard โ cek rank miner kamu (URL lihat dokumentasi resmi)
๐งช Checkpoint Validation Komprehensifโ
Setelah 2โ6 jam running, verifikasi:
| Check | Command | Expected |
|---|---|---|
| Process alive | pm2 status | online + restart 0 |
| Ada query masuk | grep "Query received" logs/miner.log | tail | Minimal 1 entry |
| Response berhasil | grep "Response sent" logs/miner.log | wc -l | > 0 |
| Tidak ada error cascade | grep -i "error|exception" logs/miner.log | Rare / none |
| Trust/Rank mulai non-zero (setelah 24โ48 jam) | btcli subnet metagraph --netuid 41 | Trust > 0 |
Simpan:
- Output
pm2 status - 20โ30 line log yang menunjukkan
Query received+Response sent btcli subnet metagraph --netuid 41dengan UID kamu terlihat
๐๏ธ Log Rotation & Disk Hygieneโ
Log debug bisa tumbuh cepat. PM2 built-in rotation:
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 14
pm2 set pm2-logrotate:compress true
Atau manual via logrotate:
sudo nano /etc/logrotate.d/sn41-miner
/home/ubuntu/bittensor/sportstensor/logs/*.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
}
๐ Error Umum & Solusiโ
| Error log | Arti | Fix |
|---|---|---|
Axon port already in use | Port 8091 dipakai proses lain | lsof -i :8091 โ kill atau ganti port |
Wallet not found | Path wallet salah | Cek BT_WALLET_PATH; default ~/.bittensor/wallets |
UID not in metagraph | Belum ter-register / deregistered | Balik ke Unit 3 |
Connection refused to subtensor | Endpoint chain down | Coba fallback: --subtensor.chain_endpoint wss://entrypoint-finney.opentensor.ai:443 |
Timeout waiting for query | Normal kalau masih baru | Tunggu sampai 4 jam; verify almanac |
OOM killed | RAM kurang | Upgrade VPS atau tune model batch size |
Validator ping 404 di /health | Endpoint belum implement health check | Bukan blocker; tapi implement helps debugging |
๐ฏ Rangkumanโ
- โ
Setup
.envdengan secret (API keys, paths) - โ Register metadata sports coverage ke subnet
- โ Launch miner di foreground, verify log sehat
- โ Migrasi ke PM2/systemd untuk 24/7 operation
- โ Monitor log + setup log rotation
- โ Paham health check & common error remediation
โ Quick Checkโ
- Kenapa
.envterpisah dariconfig.yaml? - Apa gunanya metadata registration selain almanac binding?
- PM2 vs systemd โ kapan pilih mana?
- Kenapa log rotation penting untuk miner production?
- Setelah 6 jam run, angka apa di metagraph yang menandakan miner kamu sudah mulai di-score?
๐ Troubleshootingโ
| Gejala | Solusi |
|---|---|
| PM2 tidak restart setelah reboot | Jalankan ulang pm2 save && pm2 startup |
| Log tidak ke-rotate | Install pm2-logrotate plugin |
| Disk penuh mendadak | Check du -sh logs/ โ biasanya log debug yang biang kerok |
| Query masuk tapi response timeout | Handler kamu terlalu lama โ tune di Unit 6 |
| Validator beda-beda kirim versi query berbeda | Update repo ke versi terbaru (git pull) |
Miner yang di-"set and forget" sering underperform karena validator update protokol dan kamu ketinggalan. Minimal cek log 1ร per hari minggu pertama.