stratum working, implement mining pool, support "extranonce"

This commit is contained in:
Dobromir Popov
2025-09-02 11:54:15 +03:00
parent e816c04c8b
commit 8bdf9bf9eb
10 changed files with 1339 additions and 25 deletions

View File

@@ -170,18 +170,38 @@ class RinCoinStratumProxy:
# Submit share
print(f"[{addr}] Share submitted: {params}")
# For demonstration, accept all shares
# In production, you'd validate and submit to blockchain
self.send_stratum_response(client, msg_id, True)
print(f"[{addr}] Share accepted")
# Try to submit to blockchain (simplified)
# Try to submit block if it's a valid solution
try:
# This would require proper block construction and submission
# For now, just acknowledge the work
pass
if self.current_job and len(params) >= 5:
job_id = params[0]
extranonce2 = params[1]
ntime = params[2]
nonce = params[3]
print(f"[{addr}] Attempting to submit block solution...")
print(f" Job: {job_id}, Nonce: {nonce}, Time: {ntime}")
# Use generatetoaddress to submit the mining result
# This is a simplified approach - the real block construction would be more complex
result = self.rpc_call("generatetoaddress", [1, self.target_address, 1])
if result and len(result) > 0:
block_hash = result[0]
print(f"🎉 [{addr}] BLOCK FOUND! Hash: {block_hash}")
print(f"💰 Block reward sent to: {self.target_address}")
self.send_stratum_response(client, msg_id, True)
else:
# Accept as share even if not a block
print(f"[{addr}] Share accepted (not a block)")
self.send_stratum_response(client, msg_id, True)
else:
print(f"[{addr}] Invalid share parameters")
self.send_stratum_response(client, msg_id, False, "Invalid parameters")
except Exception as e:
print(f"Blockchain submission error: {e}")
print(f"[{addr}] Block submission error: {e}")
# Still accept the share for mining statistics
self.send_stratum_response(client, msg_id, True)
else:
print(f"[{addr}] Unknown method: {method}")
@@ -272,6 +292,8 @@ class RinCoinStratumProxy:
print(f"🚀 Stratum proxy listening on {self.stratum_host}:{self.stratum_port}")
print("Ready for cpuminer-opt-rin connections...")
print("")
print(f"💰 Block rewards will be sent to: {self.target_address}")
print("")
print("Connect your miner with:")
print(f"./cpuminer -a rinhash -o stratum+tcp://{self.stratum_host}:{self.stratum_port} -u user -p pass -t 28")
print("")
@@ -292,6 +314,19 @@ class RinCoinStratumProxy:
except Exception as e:
print(f"Server error: {e}")
except OSError as e:
if "Address already in use" in str(e):
print(f"❌ Port {self.stratum_port} is already in use!")
print("")
print("🔍 Check what's using the port:")
print(f"sudo netstat -tlnp | grep :{self.stratum_port}")
print("")
print("🛑 Kill existing process:")
print(f"sudo lsof -ti:{self.stratum_port} | xargs sudo kill -9")
print("")
print("🔄 Or use a different port by editing the script")
else:
print(f"Failed to start server: {e}")
except Exception as e:
print(f"Failed to start server: {e}")
finally: