res[share.desired_version] = res.get(share.desired_version, 0) + bitcoin_data.target_to_average_attempts(share.target)
return res
+def get_warnings(tracker, current_work):
+ res = []
+
+ height = tracker.get_height(current_work.value['best_share_hash'])
+ desired_version_counts = get_desired_version_counts(tracker, current_work.value['best_share_hash'], min(720, height))
+ majority_desired_version = max(desired_version_counts, key=lambda k: desired_version_counts[k])
+ if majority_desired_version not in [0, 1] and desired_version_counts[majority_desired_version] > sum(desired_version_counts.itervalues())/2:
+ res.append('A MAJORITY OF SHARES CONTAIN A VOTE FOR AN UNSUPPORTED SHARE IMPLEMENTATION! (v%i with %i%% support)\n'
+ 'An upgrade is likely necessary. Check http://p2pool.forre.st/ for more information.' % (
+ majority_desired_version, 100*desired_version_counts[majority_desired_version]/sum(desired_version_counts.itervalues())))
+
+ return res
+
def format_hash(x):
if x is None:
return 'xxxxxxxx'
math.format_dt(2**256 / current_work.value['bits'].target / real_att_s),
)
- desired_version_counts = p2pool_data.get_desired_version_counts(tracker, current_work.value['best_share_hash'], min(720, height))
- majority_desired_version = max(desired_version_counts, key=lambda k: desired_version_counts[k])
- if majority_desired_version not in [0, 1] and desired_version_counts[majority_desired_version] > sum(desired_version_counts.itervalues())/2:
+ for warning in p2pool_data.get_warnings(tracker, current_work):
print >>sys.stderr, '#'*40
- print >>sys.stderr, '>>> WARNING: A MAJORITY OF SHARES CONTAIN A VOTE FOR AN UNSUPPORTED SHARE IMPLEMENTATION! (v%i with %i%% support)' % (
- majority_desired_version, 100*desired_version_counts[majority_desired_version]/sum(desired_version_counts.itervalues()))
- print >>sys.stderr, '>>> An upgrade is likely necessary. Check http://p2pool.forre.st/ for more information.'
+ print >>sys.stderr, '>>> Warning: ' + warning
print >>sys.stderr, '#'*40
if this_str != last_str or time.time() > last_time + 15:
),
uptime=time.time() - start_time,
block_value=current_work2.value['subsidy']*1e-8,
+ warnings=p2pool_data.get_warnings(tracker, current_work),
)
class WebInterface(resource.Resource):
d3.select('#efficiency').text(local_stats.efficiency != null ? d3.format('.4p')(local_stats.efficiency) : '???')
d3.select('#uptime_days').text(d3.format('.3f')(local_stats.uptime / 60 / 60 / 24));
d3.select('#block_value').text(local_stats.block_value);
+
+ d3.select('#warnings').selectAll().data(local_stats.warnings).enter().append('p')
+ .text(function(w){ return 'Warning: ' + w })
+ .attr('style', 'color:red;border:1px solid red;padding:5px');
});
d3.json('/current_payouts', function(pays) {
<p>Shares: <span id="shares_total"></span> total (<span id="shares_orphan"></span> orphaned, <span id="shares_dead"></span> dead) Efficiency: <span id="efficiency"></span></p>
<p>Payout if a block were found NOW: <span id="payout_amount"></span> BTC to <span id="payout_addr"></span></p>
<p>Current block value: <span id="block_value"></span> BTC</p>
+ <div id="warnings"></div>
<h2>Share explorer</h2>
<p>Best share: <span id="best_share"></span></p>