50 kW'lık bir madencilik (mining) kurulumu başlatmak, ev tipi "priz" ile ticari bir veri merkezi (data center) arasındaki sınır senaryodur. Bir tarafta, 50 kW'lık aktif yükü hâlâ küçük bir ticari alana veya kendi trafo merkezine (trafo binasına) sahip özel bir tesise besleyebilirsiniz. Diğer tarafta ise her biri 3.5 kW'a kadar ısı yayan, tek fazda 15 ila 16 amper çeken ve saatte 600–800 metreküp hava sirkülasyonu gerektiren yaklaşık 14–15 modern ASIC madenciden bahsediyoruz.
Bu rehberde; 50 kW'lık bir mining çiftliğinin (farm) tasarımı, ekipman tedariği, elektrik altyapı bağlantıları, soğutması ve otomasyonuna dair pratik bir döküm bulacaksınız. Safsata, soyut argümanlar veya akademizm yok; sadece net rakamlar, donanım, kablolar, zemin suyu profilleri ve sahada test edilmiş izleme (monitoring) scriptleri var.
1. Giriş Parametreleri ve Elektrik Altyapısı
Herhangi bir mining işinin temeli, kilovat-saat maliyeti ve trafo güvenilirliğidir. 7/24 kesintisiz 50 kW'lık yük için ana şalt/otomasyon akım değeriniz, sürekli yükler için NFPA/IEC standartlarına göre %20 akım emniyet payı ile hesaplanmalıdır.
I_total = P / (√3 · U · cosφ) = 50000 / (√3 · 380 · 0.95) ≈ 79.8 A
1.25'lik emniyet payı hesaba katıldığında, ana otomatik sigorta (şalter) en az 100A (3 fazlı) olarak seçilmelidir.
Ana Pano Spesifikasyonu (AG Dağıtım Panosu 50 kW)
- Ana Şalter (Giriş Kesicisi): 3P 100A (C karakteristiği, en az 10 kA kesme kapasitesi; örneğin Schneider Electric Acti9 veya ABB S200).
- Faz Dengelemesi: Faz dengesizliğini ve nötr akımını önlemek amacıyla 15 cihaz için faz başına tam 5 cihaz düşecek şekilde sıkı bir dengeyle dağıtılmış 3 faz (L1, L2, L3).
- Trafo - Pano Arası Kablo Hattı: Kanal içi döşemede 4x25 mm² bakır kablo (VVGng-LS eşdeğeri) veya 4x50 mm² alüminyum kablo (50 metrede %2'yi geçmeyen gerilim düşümü hesabı ile).
- Grup Hatları Koruması: Her ASIC için ayrı 2P 20A sigorta (C karakteristiği) + 3x2.5 mm² kablo (bakır, yangına dayanıklı, çift izolasyonlu).
- Topraklama: Direnci en fazla 4 Ohm olan TN-S veya TN-C-S topraklama çevresi (üçgen şeklinde çakılmış 2.5 metrelik 3 adet bakır kaplı çubuk/profilin 40x4 mm şerit ile kaynak yapılarak birleştirilmesiyle).
2. Donanım Seçimi ve CAPEX (Sermaye Harcamaları)
Hesaplama için sektörün altın standardını alıyoruz: Bitmain Antminer S19k Pro / S21 veya MicroBT Whatsminer M50/M60 serisi. 50 kW'lık dengeli bir yükleme için, cihaz başına yaklaşık 3500W standart tüketime sahip 14 adet Antminer S21 (200 TH/s) almak en idealidir.
- Toplam Hashrate: 14 · 200 TH/s = 2800 TH/s = 2.8 PH/s
- Toplam Güç Tüketimi: 14 · 3500 W = 49 kW (havalandırma payı dahil 50 kW'lık limite tam oturur).
Sermaye Harcamaları (CAPEX) Tablosu
| Harcama Kalemi | Spesifikasyon / Detaylar | Adet | Birim Fiyat ($) | Toplam ($) |
|---|---|---|---|---|
| ASIC Miner'lar | Antminer S21 200 TH/s (3500W) | 14 adet | 3,800 | 53,200 |
| Ana Pano (AG Panosu) | ABB/SE sigortalar, kontaktörler, voltmetreler, AG Alçak Gerilim Parafudru (SPD) | 1 set | 1,200 | 1,200 |
| Kablo Tesisatı | 3x2.5 kablo, kablo kanalları, PDU C19 (16A) | 14 hat | 70 | 980 |
| Soğutma / Havalandırma | Endüstriyel aksiyel fan (12,000 m³/h) + Frekans Konvertörü (Sürücü) | 2 adet | 850 | 1,700 |
| Taze Hava Filtrelemesi | Karkas, G4/F7 filtreler (toz tutma), panjurlar | 1 set | 600 | 600 |
| Ağ Altyapısı | Mikrotik 24 port yönetilebilir switch (Managed Switch), 4G/WAN router, UPS | 1 set | 550 | 550 |
| Topraklama Çevresi | Topraklama kiti, montaj, ölçümler | 1 set | 350 | 350 |
| Montaj İşleri | Raf montajı, elektrik kablolaması, devreye alma (commissioning) | - | - | 1,500 |
| TOPLAM CAPEX | $60,080 |
3. Soğutma ve Havalandırma: Termodinamik Hesaplama
Acemilerin yaptığı en büyük hata ev tipi klima takmaktır. Klima, freon döngüsü sayesinde nemi alır ve sıcaklığı düşürür, ancak 50 kW'lık ısı için kendisi de fazladan 15–18 kW elektrik yutacak 150.000 BTU'luk bir klimaya ihtiyaç duyarsınız.
Mining, sadece akışkan taze hava sirkülasyonlu (cebri havalandırma / üfleme ile) soğutulur.
Hava Değişim Hacmi Hesabı
Gerekli hava debisi formülü:
Q = P_dissip / (ρ · c_p · ΔT)
Burada:
- P_dissip = 49000 W (açığa çıkan ısı)
- ρ = 1.2 kg/m³ (20°C'de hava yoğunluğu)
- c_p = 1005 J/(kg·K) (havanın özgül ısı kapasitesi)
- ΔT = 15°C (giriş ve çıkış havası arasındaki izin verilen sıcaklık farkı)
Q = 49000 / (1.2 · 1005 · 15) ≈ 2.708 m³/s = 9750 m³/h
Kaba toz filtrelerinin (G4) direnci hesaba katıldığında, toplam kapasitesi en az 12.000 – 14.000 m³/h olan fanlar planlanmalıdır.
Bölge Ayırma (Sıcak/Soğuk Koridor - Hot/Cold Aisle)
- Soğuk Koridor: Filtre duvarlar aracılığıyla dışarıdan taze hava girişi. Atmosferik basınç burada hafifçe yüksek tutulur.
- Sıcak Koridor: ASIC madenciler sızdırmaz bir bölmeye (difüzörlü raflara) monte edilmiştir. Cihazların kendi fanları sıcak havayı izole edilmiş bir odaya üfler ve endüstriyel egzoz fanı bu havayı dışarı atar.
4. OPEX ve İşletme Giderleri (Aylık Hesaplama)
İşletme giderleri üç temel unsurdan oluşur: elektrik, bina kirası, internet ve teknik bakım.
Ticari elektriğin ortalama maliyetini kWh başına $0.07 olarak alalım.
Aylık Elektrik Tüketimi Hesabı
- Saatlik Tüketim: 49 kW (miner'lar) + 1.5 kW (havalandırma ve ağ) = 50.5 kW
- Günlük Tüketim: 50.5 · 24 = 1212 kWh
- Aylık Tüketim (30.5 gün): 1212 · 30.5 = 36,966 kWh
- Aylık Elektrik Maliyeti: 36,966 · $0.07 = $2,587.62
Sabit Aylık Giderler (OPEX)
| Gider Kalemi | Açıklama | Tutar ($) |
|---|---|---|
| Elektrik | $0.07/kWh üzerinden 36,966 kWh | 2,587.62 |
| Bina Kirası | Endüstriyel/depo alanı 20-30 m² | 300.00 |
| İletişim ve İnternet | Ana hat (Fiber) + Yedek hat (4G) | 40.00 |
| Bakım Fonu / Yedek Parça | ASIC fan değişimi, filtre temizliği, sarf malzemeleri | 150.00 |
| TOPLAM OPEX / ay | $3,077.62 |
5. Getiri, Geri Ödeme Süresi (ROI) ve Finansal Model
Gelir hesabı için 2026 yılındaki Bitcoin ağ zorluğu ve blok ödülü verileri baz alınmıştır. 1 TH/s'nin günlük olarak yaklaşık $0.042 getirdiğini varsayalım (elektrik hariç, BTC kuru ~$65,000 iken).
Gelir Hesabı (Revenue)
- Toplam Hashrate: 2800 TH/s
- Günlük Gelir: 2800 · $0.042 = $117.60
- Aylık Gelir (30.5 gün): $117.60 · 30.5 = $3,586.80
Net Kâr (EBITDA / Net Profit)
- Net Profit/mo = Gelir ($3,586.80) - OPEX ($3,077.62) = $509.18 (TH başına kârlılık yüksekse rakam artar; BTC $90,000 olduğunda kâr orantılı olarak yükselir).
ROI'nin Kura ve Elektriğe Hassasiyeti Üzerine Önemli Not:
Elektrik fiyatı $0.05 / kWh olduğunda elektrik OPEX'i $1,848.30'a düşer ve net kâr ayda $1,248.50'ye yükselir. Bu durum, geri ödeme süresini feci seviyelerden makul 35-40 aya çeker. Boğa piyasası (bull run) veya verimli hashrate olmaksızın $0.065–0.07/kWh üzerindeki ticari tarifelerle mining yapmak yüksek risk bölgesindedir.
6. Otomasyon ve Kontrol: Python İzleme Script'i (CGMiner / CGMiner API)
Gerçek bir mühendis 14 cihazın web arayüzünde tek tek elle tıklayarak vakit kaybetmez. Tüm modern ASIC cihazları (Antminer, Whatsminer) CGMiner API protokolünü (TCP soketleri üzerinden JSON tabanlı) destekler.
Aşağıda, farm havuzunuzu izlemek için kullanıma hazır, sahada test edilmiş bir Python script'i bulabilirsiniz. Bu script yerel ağdaki 14 ASIC'in tamamını yoklar, hashrate ve çip sıcaklıklarını toplar, performans düşüşü veya aşırı ısınma durumunda Telegram'a anında uyarı gönderir.
#!/usr/bin/env python3
"""
ASIC Miner Farm Monitoring via CGMiner API (Port 4028).
Features:
* Polls all devices in parallel;
* Supports Antminer (key "command") and Whatsminer (key "cmd") — configured in MINERS;
* Alerts: offline, hashrate drop, overheating, missing temperature fields;
* Deduplication: prevents spamming the exact same event more often than REPEAT_MINUTES;
* Recovery notice once the issue is resolved;
* Issue confirmation across CONFIRM_CYCLES consecutive polls (guards against false positives);
* State persists in a file, ensuring correct execution both in a loop and via cron (--once).
Configuration via environment variables:
TG_BOT_TOKEN, TG_CHAT_ID — required
TEMP_THRESHOLD (default 85) — chip temperature threshold, °C
HASHRATE_WARN_TH (default 170) — minimum acceptable hashrate, TH/s
POLL_INTERVAL_SEC (default 60) — polling interval in loop mode
REPEAT_MINUTES (default 60) — repeat interval for active alerts
CONFIRM_CYCLES (default 2) — consecutive polls required to confirm an issue
Execution:
python3 asic_monitor.py # infinite loop
python3 asic_monitor.py --once # single run (for cron / systemd timer)
IMPORTANT: Port 4028 must only be accessible from the local network.
Never expose it to the public internet.
"""
import json
import logging
import os
import socket
import sys
import time
from concurrent.futures import ThreadPoolExecutor
import requests
# --------------------------------------------------------------------------
# Configuration
# --------------------------------------------------------------------------
# (ip, kind): "antminer" or "whatsminer"
MINERS = [(f"192.168.1.{i}", "antminer") for i in range(101, 115)] # .101 - .114
# Mixed farm example:
# MINERS[0] = ("192.168.1.101", "whatsminer")
API_PORT = 4028
SOCKET_TIMEOUT = 3.0
TG_BOT_TOKEN = os.environ.get("TG_BOT_TOKEN", "")
TG_CHAT_ID = os.environ.get("TG_CHAT_ID", "")
TEMP_THRESHOLD = float(os.environ.get("TEMP_THRESHOLD", "85"))
HASHRATE_WARN_TH = float(os.environ.get("HASHRATE_WARN_TH", "170"))
POLL_INTERVAL_SEC = int(os.environ.get("POLL_INTERVAL_SEC", "60"))
REPEAT_MINUTES = int(os.environ.get("REPEAT_MINUTES", "60"))
CONFIRM_CYCLES = int(os.environ.get("CONFIRM_CYCLES", "2"))
STATE_FILE = os.environ.get("STATE_FILE", "asic_monitor_state.json")
# Antminer chip temperature key prefixes in the `stats` response.
# Verify against your specific firmware: run `stats` and inspect the raw keys.
ANTMINER_TEMP_PREFIXES = ("temp2_", "temp_chip")
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
log = logging.getLogger("asic_monitor")
# --------------------------------------------------------------------------
# Telegram
# --------------------------------------------------------------------------
def send_telegram(text: str) -> bool:
"""Sends a message without parse_mode (dynamic text won't break formatting).
Returns True only if Telegram successfully accepts the message."""
if not TG_BOT_TOKEN or not TG_CHAT_ID:
log.error("TG_BOT_TOKEN / TG_CHAT_ID not set, alert dropped: %s", text)
return False
url = f"https://api.telegram.org/bot{TG_BOT_TOKEN}/sendMessage"
try:
r = requests.post(url, json={"chat_id": TG_CHAT_ID, "text": text}, timeout=10)
if not r.ok:
log.error("Telegram returned %s: %s", r.status_code, r.text[:200])
return r.ok
except requests.RequestException as e:
log.error("Telegram transmission error: %s", e)
return False
# --------------------------------------------------------------------------
# CGMiner API Interaction
# --------------------------------------------------------------------------
def query_miner(ip: str, kind: str, command: str) -> dict:
"""Sends a command to the CGMiner API. Returns {"error": "..."} on failure."""
key = "cmd" if kind == "whatsminer" else "command"
try:
with socket.create_connection((ip, API_PORT), timeout=SOCKET_TIMEOUT) as s:
s.settimeout(SOCKET_TIMEOUT)
s.sendall(json.dumps({key: command}).encode("utf-8"))
chunks = []
while True:
chunk = s.recv(4096)
if not chunk:
break
chunks.append(chunk)
text = b"".join(chunks).decode("utf-8", errors="ignore").replace("\x00", "")
# Some firmware versions return "}{" without a comma between objects
text = text.replace("}{", "},{")
return json.loads(text)
except Exception as e: # network, timeout, invalid JSON
return {"error": f"{type(e).__name__}: {e}"}
def to_float(value):
"""Number or string representation -> float, or None on failure."""
try:
return float(value)
except (TypeError, ValueError):
return None
def get_hashrate_th(summary: dict, kind: str):
"""Hashrate in TH/s or None if the field is missing."""
try:
s = summary["SUMMARY"][0]
except (KeyError, IndexError, TypeError):
return None
if kind == "whatsminer":
# MH/s -> TH/s. 5-minute average if available, otherwise session average.
for key in ("MHS 5m", "MHS av"):
v = to_float(s.get(key))
if v is not None:
return v / 1_000_000.0
return None
# Antminer: GH/s -> TH/s. Avoid "GHS 5s" (too noisy).
for key in ("rate_30m", "GHS av"):
v = to_float(s.get(key))
if v is not None:
return v / 1000.0
return None
def get_max_chip_temp(ip: str, kind: str, summary: dict):
"""Maximum chip temperature or None if fields are missing."""
if kind == "whatsminer":
try:
s = summary["SUMMARY"][0]
except (KeyError, IndexError, TypeError):
return None
temps = [to_float(s.get(k)) for k in ("Chip Temp Max", "Temperature")]
temps = [t for t in temps if t]
return max(temps) if temps else None
stats = query_miner(ip, kind, "stats")
try:
info = stats["STATS"][1]
except (KeyError, IndexError, TypeError):
return None
temps = []
for k, v in info.items():
if k.startswith(ANTMINER_TEMP_PREFIXES):
t = to_float(v)
if t: # 0 = board reporting no value
temps.append(t)
return max(temps) if temps else None
# --------------------------------------------------------------------------
# Single Device Check
# --------------------------------------------------------------------------
def check_miner(ip: str, kind: str) -> dict:
"""Returns {issue_key: alert_text} for active problems."""
issues = {}
summary = query_miner(ip, kind, "summary")
if "error" in summary:
# Offline: further checks are meaningless
return {"offline": f"⚠️ {ip}: API unreachable ({summary['error']})"}
th = get_hashrate_th(summary, kind)
if th is None:
issues["parse"] = f"❌ {ip}: failed to extract hashrate from summary (check firmware/device type)"
elif th < HASHRATE_WARN_TH:
issues["hashrate"] = f"📉 {ip}: hashrate dropped to {th:.1f} TH/s (threshold {HASHRATE_WARN_TH:.0f})"
temp = get_max_chip_temp(ip, kind, summary)
if temp is None:
issues["temp_keys"] = f"❓ {ip}: temperature fields not found, verify keys in stats"
elif temp > TEMP_THRESHOLD:
issues["temp"] = f"🔥 {ip}: overheating, chips at {temp:.0f}°C (threshold {TEMP_THRESHOLD:.0f})"
return issues
# --------------------------------------------------------------------------
# State and Deduplication
# --------------------------------------------------------------------------
def load_state() -> dict:
try:
with open(STATE_FILE, encoding="utf-8") as f:
return json.load(f)
except (OSError, ValueError):
return {"sent": {}, "streak": {}}
def save_state(state: dict) -> None:
try:
tmp = STATE_FILE + ".tmp"
with open(tmp, "w", encoding="utf-8") as f:
json.dump(state, f)
os.replace(tmp, STATE_FILE)
except OSError as e:
log.error("Failed to save state: %s", e)
def run_cycle(state: dict) -> None:
sent, streak = state["sent"], state["streak"]
now = time.time()
with ThreadPoolExecutor(max_workers=len(MINERS)) as pool:
results = list(pool.map(lambda m: (m[0], check_miner(*m)), MINERS))
for ip, issues in results:
# 1) Active issues
for key, text in issues.items():
sid = f"{ip}|{key}"
streak[sid] = streak.get(sid, 0) + 1
if streak[sid] < CONFIRM_CYCLES:
continue
last = sent.get(sid)
if last is None or now - last >= REPEAT_MINUTES * 60:
if send_telegram(text):
sent[sid] = now
# 2) Resolved issues
prefix = f"{ip}|"
for sid in [s for s in list(streak) if s.startswith(prefix)]:
key = sid[len(prefix):]
if key in issues:
continue
streak.pop(sid, None)
if sid in sent: # notify recovery only if an alert was previously sent
if send_telegram(f"✅ {ip}: issue '{key}' resolved"):
sent.pop(sid, None)
ok = sum(1 for _, i in results if not i)
log.info("Poll completed: %d/%d healthy", ok, len(results))
save_state(state)
# --------------------------------------------------------------------------
def main() -> None:
state = load_state()
state.setdefault("sent", {})
state.setdefault("streak", {})
if "--once" in sys.argv:
run_cycle(state)
return
log.info("Starting monitoring: %d devices, period %d s", len(MINERS), POLL_INTERVAL_SEC)
while True:
try:
run_cycle(state)
except Exception:
log.exception("Unhandled exception in polling loop")
time.sleep(POLL_INTERVAL_SEC)
if __name__ == "__main__":
main()7. Başlatma Öncesi Kontrol Listesi (Mühendislik Onayı)
- 1. Yük Altında Elektrik Testi: Miner'ları kurmadan önce 50 kW'lık sanayi tipi ısıtıcıyı 4 saat boyunca çalıştırın. Ana sigorta ve baralardaki klemens gruplarının ısınmasını pirometre ile kontrol edin. Kontak sıcaklığı 65°C'yi geçmemelidir.
- 2. Topraklama Ölçümü: Elektrik laboratuvarını çağırarak faz-nötr çevrim empedansını ve topraklama yayıntı direncini ölçtürün (< 4 Ohm olmalıdır).
- 3. Hava Akışı Kontrolü: G4 filtre yoğunluğunun odada vakum yaratmadığından emin olun (egzoz fanı çalışırken soğuk koridor kapısı aşırı bir kuvvet gerektirmeden rahatça açılabilmelidir).
- 4. Watchdog Yapılandırması: Havuz kopması veya IP kaybı durumlarına karşı miner yazılımlarındaki (LUXOS, VNISH veya Stock) dahili Donanımsal Otomatik Yeniden Başlatma (Hardware Auto-Reboot) özelliklerini etkinleştirin.
Çalıştırma:
export TG_BOT_TOKEN="..." TG_CHAT_ID="..."
python3 asic_monitor.py8. Yasal Yapılanma, PPA Sözleşmesi ve Uluslararası Mali Muhasebe
Herhangi bir ülkede 50 kW'lık bir tesis kurmak, resmi ticari tüketici statüsü gerektirir. Ev prizinden beslenen "merdiven altı" madencilik; elektrik dağıtım şirketinden gelecek ihtarnameye, güç limiti ihlalleri nedeniyle kesilecek ağır cezalara ve şebekelerin amacı dışında kullanımına kaçınılmaz olarak yol açacaktır.
Kurulum Şeması ve Yasal Yapı
- Operasyonel Şirket Kurulumu (LLC / Inc. / Sp. z o.o.): Tesis, standart bir limited şirket tüzel kişiliği üzerine kurulur. Bu, ticari alan kiralama sözleşmesinin ve elektrik şebekesine teknolojik bağlantı anlaşmasının yasal olarak yapılabilmesi için zorunludur.
- PPA Sözleşmesi (Power Purchase Agreement): Tesisin en kritik belgesi; görevli tedarikçi veya trafo merkezi (TM) sahibi ile yapılan ticari elektrik tedarik sözleşmesidir (PPA). Sözleşmede şunlar belirlenir:
- Tahsis edilen aktif güç: III. güvenilirlik kategorisinde 50 kW (izin verilen kesintisiz 7/24 yük ile).
- Mülkiyet sınır noktası: Trafo alçak gerilim baralarında 0,4 kV.
- Tarife yapısı: Sabit kWh maliyeti (hedef < $0,065–0,07).
- Ekipman İthalatı (HS Kodu 8471): ASIC madencilerinin tedariki doğrudan dış ticaret (B2B) sözleşmeleriyle yapılır. Ekipman için uluslararası Gümrük Tarife İstatistik Pozisyonu (HS Kodu) 8471 50 000 0'dır (işlem birimleri). Şeffaf gümrükleme sürecinde ithalat KDV'si (VAT/GST) ve gümrük vergisi ödenir. Elinizde demirbaş varlıkların menşeini doğrulayan gümrük beyannameleri (GTD) ve ticari faturalar kalır.
- Mali Muhasebe ve Dönüştürme (Off-ramping): Madencilik karları pool üzerinde BTC cinsinden üretilir. Aylık giderleri (OPEX: elektrik, kira) karşılamak için KYB (Know Your Business) sürecinden geçilmiş bir kripto para borsası veya OTC masasındaki kurumsal hesap (Corporate Account) kullanılır. Elde edilen fiat para, elektrik faturalarının düzenli ödenmesi için havale yoluyla tüzel kişiliğin cari hesabına aktarılır.
9. Lojistik ve Ekipman Kabulü
Fabrika ambalajındaki 14 adet Antminer S21 ünitesinin toplam ağırlığı yaklaşık 230–250 kg'dır.
Giriş Kalite Kontrol Protokolü (Teslim Alırken QC)
- 1. Ambalajın Görsel Kontrolü: Kurcalama göstergesi (tamper) etiketlerinin ve kutu hasarlarının kontrol edilmesi.
- 2. Sallama Testi (Soğutucu Blok Kontrolü): Çin'den nakliye sırasında, şiddetli titreşimler nedeniyle sabitleme vidaları gevşeyebilir veya bireysel çip soğutucuları yerinden çıkabilir (özellikle ikinci el ekipmanlarda). Cihaz hafifçe sallanır; içeriden herhangi bir parça sesinin gelmemesi gerekir.
- 3. Direnç Ölçümü (Cold Test): 220V verilmeden önce multimetre ile hash kartlarının besleme baralarında kısa devre olup olmadığı kontrol edilir (VDD hattının direnci üretici verilerine uygun olmalı, onlarca ohm civarında olmalıdır).
- 4. Test İstasyonu (15 dakika): İzole bir devrede ardışık çalıştırma. Hedef hashrate'e (200 TH/s) ulaşmanın, 3 kartın tamamının yanıt vermesinin (3/3 Boards detected) ve arızalı çip bulunmadığının (HW Errors < %0,5) kontrolü.
10. Güvenlik ve Ağ İzolasyonu
50 kW'lık bir çiftlik, hem fiziksel hırsızlık hem de ağ saldırıları (stratum trafiği ele geçirme, madenci virüsü bulaştırma) açısından cazip bir hedeftir.
Ağ Çevresi Şeması:
[ İnternet (WAN) ]
&│
[ 4G/LTE Yedek ]
&│
┌───────┴────────┐
│ Router / WAF │ (MikroTik / OPNsense)
│ Firewall │ ── WireGuard VPN (Yalnızca Uzaktan Erişim)
└───────┬────────┘
│ (İzole VLAN 10.0.10.0/24)
┌────────┼─────────────────┬─────────────────┐
│ │ │ │
[ASIC 1] [ASIC 2] ... [ASIC 14] [Script Node]
10.0.10.101 10.0.10.102 10.0.10.114 10.0.10.250 (Python Watchdog)
Ağ Çevresi Parametreleri
- WAN'dan Tam İzolasyon: ASIC'ler, genel (public) IP adresi olmayan kapalı bir VLAN segmentinde bulunur.
- Kapalı Port 4028 (CGMiner API): Metrik toplama portuna yalnızca dahili izleme sunucusunun IP adresinden erişime izin verilir.
- Stratum/TLS Şifreleme: Trafiğin poole yönlendirilmesi (Stratum V2 veya Stratum over TLS), ISS seviyesinde Ortadaki Adam (MitM) saldırısıyla cüzdan adresinin değiştirilmesi ihtimalini ortadan kaldırır.
11. Mühendis Özeti (Kurulum Kontrol Listesi)
- 1. Elektrik: Her C19 prizi için VVGng-LS 3x2.5 mm² kablo kesitini kontrol edin, yük altında 48 saat çalıştıktan sonra ana pano (AGP) içindeki tüm klemensleri tork anahtarıyla sıkın.
- 2. Havalandırma: Giriş ve egzoz havaları arasındaki sıcaklık farkını ölçün. $\Delta T > 18^\circ\text{C}$ olduğunda, egzoz fanları invertör (VFD) aracılığıyla daha yüksek frekansa geçirilir.
- 3. İzleme: Hashrate 170 TH/s'nin altına düştüğünde alarm veren otomatik ASIC kontrol scriptini devreye alın.
- 4. Finansal Risk Yönetimi: Ağ zorluğunun yılda %15–20 oranında olası artışını hesaba katarak başa baş noktalarını hesaplayın.