Full Stratum v1 protocol support. Connect any compatible miner software — CGMiner, BFGMiner, XMRig, NiceHash, or any custom mining client.
YOUR_SPN1_ADDRESS.worker_name
| e.g.
SPN1AbC...xyz.rig01
x or leave blank.
| Address must start with SPN1 (mainnet) or SPNt (testnet).
| Worker | Hashrate | Difficulty | Shares | Status |
|---|---|---|---|---|
| Loading miners... | ||||
192.168.1.100 — check your router's DHCP table for the actual IP).root — Password rootssh root@MINER_IPcat /var/log/log/etc/init.d/cgminer.sh restart
http://MINER_IP — default credentials: admin / adminecho '{"cmd":"summary"}' | nc MINER_IP 4028echo '{"cmd":"pools"}' | nc MINER_IP 4028
http://CONTROLLER_IP.cgminer -o stratum+tcp://YOUR_NODE_IP:3333 -u SPN1YourAddress.avalon01 -p x
http://MINER_IP — default: admin / adminhttp://MINER_IP → Login → Pool Settinghttp://MINER_IP — default: admin / adminhttp://MINER_IP → Pool Configurationssh admin@MINER_IP (password: admin)cat /tmp/miner.log | tail -20/etc/init.d/miner restart
http://MINER_IP — default: admin / 123456789http://MINER_IP → Settings → Mining Poolroot / roothttp://MINER_IProot / root → Navigate to Pool Managementhttp://MINER_IP — default: admin / adminhttp://MINER_IP → Login → Miner → Poolhttp://MINER_IP — default: admin / adminhttp://MINER_IP → Login → Settings → Poolhttp://MINER_IP → Vnish UI → Poolsssh root@MINER_IP (password: admin)vi /config/cgminer.conf"url": "stratum+tcp://YOUR_NODE_IP:3333"/etc/init.d/cgminer restart
bos toolbox or web UI./etc/bosminer.toml to add your pool:[[mining_groups]] name = "SPN Coin" [[mining_groups.pools]] enabled = true url = "stratum+tcp://YOUR_NODE_IP:3333" user = "SPN1YourAddress.braiins01" password = "x"Copy
bosminer restartluxos -a setpoolgroup --session USER=root PASSWD=admin IPADDRESS=MINER_IP --params pool1=stratum+tcp://YOUR_NODE_IP:3333 worker=SPN1YourAddress.luxos01 password=xCopy
http://MINER_IP → Pool Setting. Default login: admin / adminhttp://MINER_IP → Pool Configuration. Default: admin / adminhttp://MINER_IP. Default: admin / 123456789http://MINER_IP → Settings → Pool. Default: admin / admincgminer -o stratum+tcp://YOUR_NODE_IP:3333 -u SPN1YourAddress.rig01 -p x --thread-concurrency 8192Copy
bfgminer -o stratum+tcp://YOUR_NODE_IP:3333 -u SPN1YourAddress.rig01 -p xCopy
cgminer -o stratum+tcp://YOUR_NODE_IP:3333 -u SPN1YourAddress.cpu01 -p x --no-gpu -t 4Copy
{
"algorithm": "sha256",
"stratumUrl": "stratum+tcp://YOUR_NODE_IP:3333",
"username": "SPN1YourAddress.rig01",
"password": "x"
}
Copy
algorithm.json, add this as a new pool and select SHA-256 algorithm.import socket, json, hashlib
HOST = 'YOUR_NODE_IP'
PORT = 3333
ADDRESS = 'SPN1YourAddress'
WORKER = 'python01'
def sha256d(data):
b = bytes.fromhex(data) if isinstance(data, str) else data
return hashlib.sha256(hashlib.sha256(b).digest()).hexdigest()
sock = socket.socket()
sock.connect((HOST, PORT))
def send(msg):
sock.sendall((json.dumps(msg) + '\n').encode())
def recv():
buf = b''
while b'\n' not in buf:
buf += sock.recv(4096)
return json.loads(buf.split(b'\n')[0])
# Step 1: Subscribe
send({"id": 1, "method": "mining.subscribe", "params": ["python-miner/1.0"]})
sub = recv()
extra1 = sub['result'][1]
extra2_sz = sub['result'][2]
print(f"Subscribed — ExtraNonce1: {extra1}, ExtraNonce2 size: {extra2_sz}")
# Step 2: Authorize (format: ADDRESS.WORKERNAME)
send({"id": 2, "method": "mining.authorize", "params": [f"{ADDRESS}.{WORKER}", "x"]})
auth = recv()
print(f"Authorization: {'OK' if auth['result'] else 'FAILED — check address format'}")
# Step 3: Receive jobs and submit shares
while True:
msg = recv()
if msg.get('method') == 'mining.set_difficulty':
print(f"Difficulty set to: {msg['params'][0]}")
elif msg.get('method') == 'mining.notify':
job_id, prev, cb1, cb2, branches, ver, bits, ntime, clean = msg['params']
extra2 = '00' * extra2_sz
cb_hash = sha256d(cb1 + extra1 + extra2 + cb2)
print(f"New job: {job_id} | prev: {prev[:16]}...")
# Submit share (replace nonce with actual PoW result)
send({"id": 3, "method": "mining.submit",
"params": [f"{ADDRESS}.{WORKER}", job_id, extra2, ntime, "00000000"]})
result = recv()
print(f"Share result: {result.get('result')}")
Copy
.env file on the SPN Coin node server:# ── Stratum Pool ──────────────────────────────── STRATUM_PORT=3333 POOL_ADDRESS=SPN1YourPoolWalletAddress POOL_FEE=0.01 # 1% fee # ── Variable Difficulty (Vardiff) ─────────────── VARDIFF_MIN=1 VARDIFF_MAX=32 VARDIFF_TARGET_MS=15000 # 1 share per 15 seconds # ── Connection Security ────────────────────────── BAN_INVALID=10 # Ban after 10 invalid shares BAN_DURATION=600000 # Ban: 10 minutes MAX_MINERS=1000 MINER_TIMEOUT_MS=300000 # Disconnect idle: 5 minutes # ── PPLNS Payout ───────────────────────────────── PPLNS_WINDOW=100000Copy