diff --git a/p2pool/web.py b/p2pool/web.py index 034baa53d..b47ae6e8a 100644 --- a/p2pool/web.py +++ b/p2pool/web.py @@ -99,11 +99,15 @@ def get_global_stats(): nonstale_hash_rate = p2pool_data.get_pool_attempts_per_second(node.tracker, node.best_share_var.value, lookbehind) stale_prop = p2pool_data.get_average_stale_prop(node.tracker, node.best_share_var.value, lookbehind) + diff = bitcoin_data.target_to_difficulty(wb.current_work.value['bits'].target) + return dict( pool_nonstale_hash_rate=nonstale_hash_rate, pool_hash_rate=nonstale_hash_rate/(1 - stale_prop), pool_stale_prop=stale_prop, min_difficulty=bitcoin_data.target_to_difficulty(node.tracker.items[node.best_share_var.value].max_target), + network_block_difficulty=diff, + network_hashrate=(diff * 2**32 // node.net.PARENT.BLOCK_PERIOD), ) def get_local_stats(): @@ -130,6 +134,10 @@ def get_local_stats(): miner_hash_rates, miner_dead_hash_rates = wb.get_local_rates() (stale_orphan_shares, stale_doa_shares), shares, _ = wb.get_stale_counts() + + miner_last_difficulties = {} + for addr in wb.last_work_shares.value: + miner_last_difficulties[addr] = bitcoin_data.target_to_difficulty(wb.last_work_shares.value[addr].target) return dict( my_hash_rates_in_last_hour=dict( @@ -152,6 +160,7 @@ def get_local_stats(): ), miner_hash_rates=miner_hash_rates, miner_dead_hash_rates=miner_dead_hash_rates, + miner_last_difficulties=miner_last_difficulties, efficiency_if_miner_perfect=(1 - stale_orphan_shares/shares)/(1 - global_stale_prop) if shares else None, # ignores dead shares because those are miner's fault and indicated by pseudoshare rejection efficiency=(1 - (stale_orphan_shares+stale_doa_shares)/shares)/(1 - global_stale_prop) if shares else None, peers=dict( diff --git a/p2pool/work.py b/p2pool/work.py index af14ffba0..00829177d 100644 --- a/p2pool/work.py +++ b/p2pool/work.py @@ -36,6 +36,7 @@ def __init__(self, node, my_pubkey_hash, donation_percentage, merged_urls, worke self.removed_unstales_var = variable.Variable((0, 0, 0)) self.removed_doa_unstales_var = variable.Variable(0) + self.last_work_shares = variable.Variable( {} ) self.my_share_hashes = set() self.my_doa_share_hashes = set() @@ -319,6 +320,9 @@ def get_work(self, pubkey_hash, desired_share_target, desired_pseudoshare_target self.current_work.value['subsidy']*1e-8, self.node.net.PARENT.SYMBOL, len(self.current_work.value['transactions']), ) + + #need this for stats + self.last_work_shares.value[bitcoin_data.pubkey_hash_to_address(pubkey_hash, self.node.net.PARENT)]=share_info['bits'] ba = dict( version=min(self.current_work.value['version'], 2),