111 / mining_stats.py
favoredone's picture
Upload 14 files
1170181 verified
"""
Utility functions for mining statistics and estimates
"""
import math
import logging
def calculate_mining_estimate(hash_rate_per_core: float, num_cores: int, target: int, best_hash: str) -> dict:
"""
Calculate mining estimates based on current performance
Args:
hash_rate_per_core: Hashes per second per core
num_cores: Number of cores being used
target: Current network target
best_hash: Best hash found so far (hex string)
"""
total_hash_rate = hash_rate_per_core * num_cores
# Convert target and best hash to integers for comparison
target_int = target
best_hash_int = int(best_hash, 16)
# Calculate probability of finding a block
max_target = int('0xFFFF' + '0' * 62, 16)
probability_per_hash = target_int / max_target
# Calculate expected hashes needed
expected_hashes = 1 / probability_per_hash
# Calculate time estimates
seconds_to_block = expected_hashes / total_hash_rate
days_to_block = seconds_to_block / (24 * 3600)
# Calculate progress towards target
progress_ratio = best_hash_int / target_int
progress_percent = (1 - progress_ratio) * 100 if progress_ratio < 1 else 0
return {
'probability_per_hash': probability_per_hash,
'expected_hashes_needed': expected_hashes,
'estimated_days': days_to_block,
'progress_percent': progress_percent,
'total_hash_rate': total_hash_rate
}
def log_mining_statistics(stats: dict):
"""Log mining statistics in a human-readable format"""
logging.info(f"Mining Statistics:")
logging.info(f"Total Hash Rate: {stats['total_hash_rate']/1e6:.2f} MH/s")
logging.info(f"Probability per hash: {stats['probability_per_hash']:.2e}")
logging.info(f"Expected hashes needed: {stats['expected_hashes_needed']:.2e}")
logging.info(f"Estimated days to find block: {stats['estimated_days']:.2f} days")
logging.info(f"Progress towards target: {stats['progress_percent']:.2f}%")