High-performance SHA-256 solo mining pool written in Go, with Stratum V1, Overt AsicBoost support, a LAN-only realtime web dashboard, and optional ntfy and Discord block-found notifications.
ntpool เป็น solo mining pool แบบพึ่งพา node ของตัวเอง โดยเน้น path การแจกงานและตรวจ share ที่ตรงไปตรงมา ใช้ Bitcoin RPC สำหรับ block template, ใช้ ZMQ สำหรับรับ block notification แบบทันที, และมี web dashboard สำหรับดู worker, hashrate, difficulty, best share, และ blocks found
ฟีเจอร์หลัก:
- Stratum V1 server สำหรับเครื่องขุด SHA-256
- รองรับ Overt AsicBoost / version rolling
- ใช้ block template จาก RPC และ refresh งานผ่าน ZMQ พร้อม backup poller
- Web dashboard แบบ realtime ผ่าน WebSocket
- บันทึก blocks found ลง
data/found_blocks.json - แจ้งเตือนผ่าน
ntfyเมื่อsubmitblockสำเร็จ - แจ้งเตือนผ่าน Discord webhook เมื่อ
submitblockสำเร็จ - รีเซ็ต
Best Shareของทุก session เป็น0หลังขุดพบบล็อกสำเร็จ
ntpool/
├── bitcoin/
│ ├── rpc.go # Bitcoin RPC client
│ └── zmq.go # ZMQ subscriber for new blocks
├── config/
│ └── config.go # Environment-based configuration loader
├── crypto/
│ └── sha256.go # SHA-256 and block header helpers
├── pool/
│ ├── coinbase.go # Coinbase transaction builder
│ └── job.go # Job manager and template conversion
├── public/
│ ├── app.js # Dashboard frontend logic
│ ├── index.html # Dashboard UI
│ └── style.css # Dashboard styles
├── stratum/
│ ├── server.go # Stratum server and share validation flow
│ └── session.go # Session stats, vardiff, best share tracking
├── web/
│ └── server.go # HTTP/WebSocket dashboard server
├── docker-compose.yml
├── Dockerfile
├── go.mod
├── main.go # Application entry point
└── README.md
- Go 1.22+
- Bitcoin-compatible SHA-256 node with RPC enabled
- ZMQ
rawblockpublisher enabled if you want instant new-block updates - Docker / Docker Compose optional
คัดลอก .env.example เป็น .env แล้วแก้ค่าตาม environment ของคุณ
cp .env.example .env| Variable | Description | Default |
|---|---|---|
STRATUM_PORT |
พอร์ตสำหรับ Stratum server | 3333 |
WEB_PORT |
พอร์ตสำหรับ web dashboard | 8080 |
DEFAULT_DIFF |
difficulty เริ่มต้นสำหรับ worker ใหม่ | 1024 |
ENABLE_VARDIFF |
เปิดใช้งาน vardiff หรือไม่ | false |
MIN_DIFF |
difficulty ต่ำสุดของ vardiff | 64 |
MAX_DIFF |
difficulty สูงสุดของ vardiff | 1048576 |
VARDIFF_TARGET_SHARES |
จำนวน share เป้าหมายต่อรอบสำหรับ vardiff | 12 |
RPC_HOST |
host ของ Bitcoin RPC | 127.0.0.1 |
RPC_PORT |
พอร์ต Bitcoin RPC | 8332 |
RPC_USER |
RPC username | bitcoinrpc |
RPC_PASSWORD |
RPC password | rpcpassword |
RPC_NETWORK |
network name ที่ใช้แสดงผล เช่น mainnet, testnet, regtest |
mainnet |
RPC_ALGO |
อัลกอริทึมของ chain | sha256d |
ZMQ_HOST |
host ของ ZMQ publisher | 127.0.0.1 |
ZMQ_PORT |
พอร์ตของ ZMQ rawblock |
28332 |
POOL_NAME |
ชื่อ pool | ntpool SHA-256 Solo Pool |
COIN_SYMBOL |
symbol ของเหรียญที่ใช้แสดงผล | BTC |
MARKET_API_URL |
URL ของ market API ที่คืน JSON รูปแบบ BUY[0].price; รองรับ {coin}/{quote}; refresh ทุก 5 นาที |
Freiexchange orderbook template |
MARKET_COIN_SYMBOL |
เหรียญฝั่ง market; ค่าเริ่มต้นตาม COIN_SYMBOL |
COIN_SYMBOL |
MARKET_QUOTE_SYMBOL |
สกุลเงินที่ใช้แสดงราคา | BTC |
COINBASE_TEXT |
ข้อความที่แทรกใน coinbase transaction | /ntpool/ |
POOL_FEE_PERCENT |
ค่า fee ของ pool | 0.0 |
POOL_FEE_ADDRESS |
ปลายทางสำหรับ fee ของ pool | "" |
WALLET_ADDRESS |
address สำหรับรับ coinbase payout | AWPuDcCymof8BRF9cfkxnLqmhn7ZPVPjEr |
ENABLE_NTFY |
เปิดการแจ้งเตือนบล็อกผ่าน ntfy หรือไม่ | false |
NTFY_SERVER |
URL ของ ntfy server | http://192.168.1.250:18080 |
NTFY_TOPIC |
topic ปลายทางบน ntfy | ntpool-blocks |
NTFY_USER |
username สำหรับ Basic Auth ของ ntfy | user |
NTFY_PASSWORD |
password สำหรับ Basic Auth ของ ntfy | pass |
ENABLE_DISCORD |
เปิดการแจ้งเตือนบล็อกผ่าน Discord หรือไม่ | false |
DISCORD_WEBHOOK_URL |
Discord webhook URL สำหรับแจ้งเตือนเมื่อพบบล็อก | "" |
DISCORD_USERNAME |
ชื่อผู้ส่งที่แสดงใน Discord (ไม่บังคับ) | "" |
DISCORD_AVATAR_URL |
URL รูปภาพสาธารณะสำหรับ avatar ของผู้ส่ง เช่น PNG (ไม่บังคับ) | "" |
go run .หรือ build binary ก่อน:
go build -o ntpool .
./ntpoolบน Windows binary ที่ build จะเป็น ntpool.exe
docker compose up -d --build
docker compose logs -f ntpool
docker compose downถ้า Bitcoin node อยู่บน host machine อาจต้องเปิด extra_hosts ใน docker-compose.yml
- Stratum server ฟังที่
0.0.0.0:STRATUM_PORT - Web dashboard ฟังที่
0.0.0.0:WEB_PORTแต่มี middleware จำกัดการเข้าถึงเฉพาะ loopback / private LAN - Dashboard ใช้ WebSocket เพื่อ push stats แบบ realtime
- เมื่อ
submitblockสำเร็จ ระบบจะส่งการแจ้งเตือนตามENABLE_NTFYและENABLE_DISCORD(Discord ต้องตั้ง webhook URL ด้วย) และ reset best share ของทุก session - รายการ blocks found ถูกเก็บไว้ใน
data/found_blocks.json
- URL:
stratum+tcp://<SERVER_IP>:3333 - Username:
<WALLET_ADDRESS>.<WORKER_NAME>หรือ<ANY_PREFIX>.<WORKER_NAME> - Password:
x
หมายเหตุ: โปรเจกต์นี้จะใช้ WALLET_ADDRESS จาก config เป็นปลายทาง payout เสมอ ส่วน prefix หน้า . จะถูกละทิ้ง และใช้เฉพาะชื่อหลังจุดเป็น worker name ที่แสดงใน dashboard เท่านั้น
ตัวอย่าง:
anyprefix.s21-01
go build ./...MIT