address validations
This commit is contained in:
@@ -18,7 +18,7 @@ from requests.auth import HTTPBasicAuth
|
||||
class RinCoinMiningPool:
|
||||
def __init__(self, stratum_host='0.0.0.0', stratum_port=3333,
|
||||
rpc_host='127.0.0.1', rpc_port=9556,
|
||||
rpc_user='rinrpc', rpc_password='745ce784d5d5d537fc06105a1b935b7657903cfc71a5fb3b90',
|
||||
rpc_user='rinrpc', rpc_password='745ce784d5d537fc06105a1b935b7657903cfc71a5fb3b90',
|
||||
pool_address='rin1qahvvv9d5f3443wtckeqavwp9950wacxfmwv20q',
|
||||
pool_fee_percent=1.0):
|
||||
|
||||
@@ -153,6 +153,18 @@ class RinCoinMiningPool:
|
||||
print(f"Get block template error: {e}")
|
||||
return None
|
||||
|
||||
def validate_rincoin_address(self, address):
|
||||
"""Validate if an address is a valid RinCoin address"""
|
||||
if not address or not address.startswith('rin'):
|
||||
return False
|
||||
|
||||
try:
|
||||
result = self.rpc_call("validateaddress", [address])
|
||||
return result and result.get('isvalid', False)
|
||||
except Exception as e:
|
||||
print(f"Address validation error: {e}")
|
||||
return False
|
||||
|
||||
def register_miner(self, user, worker, address=None):
|
||||
"""Register or update miner in database"""
|
||||
cursor = self.db.cursor()
|
||||
@@ -322,17 +334,27 @@ class RinCoinMiningPool:
|
||||
miner_address = None
|
||||
if user.startswith('rin'):
|
||||
# User is a RinCoin address
|
||||
miner_address = user
|
||||
user = f"miner_{miner_address[:8]}" # Create a user ID from address
|
||||
print(f"[{addr}] Miner using address as username: {miner_address}")
|
||||
if self.validate_rincoin_address(user):
|
||||
miner_address = user
|
||||
user = f"miner_{miner_address[:8]}" # Create a user ID from address
|
||||
print(f"[{addr}] ✅ Miner using valid RinCoin address: {miner_address}")
|
||||
else:
|
||||
print(f"[{addr}] ❌ Invalid RinCoin address: {user}")
|
||||
self.send_stratum_response(client, msg_id, False, "Invalid RinCoin address")
|
||||
return
|
||||
elif '.' in user and user.split('.')[0].startswith('rin'):
|
||||
# Format: rin1qahvvv9d5f3443wtckeqavwp9950wacxfmwv20q.workername
|
||||
address_part, worker_part = user.split('.', 1)
|
||||
if address_part.startswith('rin'):
|
||||
miner_address = address_part
|
||||
user = f"miner_{miner_address[:8]}"
|
||||
worker = worker_part
|
||||
print(f"[{addr}] Miner using address format: {miner_address}.{worker}")
|
||||
if self.validate_rincoin_address(address_part):
|
||||
miner_address = address_part
|
||||
user = f"miner_{miner_address[:8]}"
|
||||
worker = worker_part
|
||||
print(f"[{addr}] ✅ Miner using valid RinCoin address format: {miner_address}.{worker}")
|
||||
else:
|
||||
print(f"[{addr}] ❌ Invalid RinCoin address: {address_part}")
|
||||
self.send_stratum_response(client, msg_id, False, "Invalid RinCoin address")
|
||||
return
|
||||
|
||||
# Register miner with address
|
||||
miner_id = self.register_miner(user, worker, miner_address)
|
||||
@@ -382,6 +404,7 @@ class RinCoinMiningPool:
|
||||
print(f"[{addr}] 🔍 Attempting to submit block solution...")
|
||||
|
||||
# Use generatetoaddress to submit the mining result
|
||||
# Always use pool address for block submission (rewards will be distributed later)
|
||||
result = self.rpc_call("generatetoaddress", [1, self.pool_address, 1])
|
||||
|
||||
if result and len(result) > 0:
|
||||
@@ -399,7 +422,7 @@ class RinCoinMiningPool:
|
||||
print(f"🎉 [{addr}] BLOCK FOUND! Hash: {block_hash}")
|
||||
print(f"💰 Block reward: {total_reward} RIN")
|
||||
|
||||
# Distribute rewards
|
||||
# Distribute rewards to miners with valid addresses
|
||||
self.distribute_block_reward(block_hash, block_height, total_reward)
|
||||
|
||||
self.send_stratum_response(client, msg_id, True)
|
||||
|
Reference in New Issue
Block a user