From 0e5547d07973eebb9c82caf195031dff05857398 Mon Sep 17 00:00:00 2001 From: Forrest Voight Date: Sun, 15 Sep 2013 17:54:07 -0400 Subject: [PATCH] warn about bitcoin <0.8.5 --- p2pool/data.py | 12 ++++++++---- p2pool/main.py | 9 ++++----- p2pool/networks.py | 1 + p2pool/web.py | 4 ++-- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/p2pool/data.py b/p2pool/data.py index a988e54..3ebc1f7 100644 --- a/p2pool/data.py +++ b/p2pool/data.py @@ -594,7 +594,7 @@ def get_desired_version_counts(tracker, best_share_hash, dist): res[share.desired_version] = res.get(share.desired_version, 0) + bitcoin_data.target_to_average_attempts(share.target) return res -def get_warnings(tracker, best_share, net, bitcoind_warning, bitcoind_work_value): +def get_warnings(tracker, best_share, net, bitcoind_getinfo, bitcoind_work_value): res = [] desired_version_counts = get_desired_version_counts(tracker, best_share, @@ -605,9 +605,13 @@ def get_warnings(tracker, best_share, net, bitcoind_warning, bitcoind_work_value '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()))) - if bitcoind_warning is not None: - if 'This is a pre-release test build' not in bitcoind_warning: - res.append('(from bitcoind) %s' % (bitcoind_warning,)) + if bitcoind_getinfo['errors'] != '': + if 'This is a pre-release test build' not in bitcoind_getinfo['errors']: + res.append('(from bitcoind) %s' % (bitcoind_getinfo['errors'],)) + + version_warning = getattr(net, 'VERSION_WARNING', lambda v: None)(bitcoind_getinfo['version']) + if version_warning is not None: + res.append(version_warning) if time.time() > bitcoind_work_value['last_update'] + 60: res.append('''LOST CONTACT WITH BITCOIND for %s! Check that it isn't frozen or dead!''' % (math.format_dt(time.time() - bitcoind_work_value['last_update']),)) diff --git a/p2pool/main.py b/p2pool/main.py index 5a8c79f..42635f1 100644 --- a/p2pool/main.py +++ b/p2pool/main.py @@ -56,11 +56,10 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): yield helper.check(bitcoind, net) temp_work = yield helper.getwork(bitcoind) - bitcoind_warning_var = variable.Variable(None) + bitcoind_getinfo_var = variable.Variable(None) @defer.inlineCallbacks def poll_warnings(): - errors = (yield deferral.retry('Error while calling getmininginfo:')(bitcoind.rpc_getmininginfo)())['errors'] - bitcoind_warning_var.set(errors if errors != '' else None) + bitcoind_getinfo_var.set((yield deferral.retry('Error while calling getinfo:')(bitcoind.rpc_getinfo)())) yield poll_warnings() deferral.RobustLoopingCall(poll_warnings).start(20*60) @@ -212,7 +211,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): print 'Listening for workers on %r port %i...' % (worker_endpoint[0], worker_endpoint[1]) wb = work.WorkerBridge(node, my_pubkey_hash, args.donation_percentage, merged_urls, args.worker_fee) - web_root = web.get_web_root(wb, datadir_path, bitcoind_warning_var) + web_root = web.get_web_root(wb, datadir_path, bitcoind_getinfo_var) caching_wb = worker_interface.CachingWorkerBridge(wb) worker_interface.WorkerInterface(caching_wb).attach_to(web_root, get_handler=lambda request: request.redirect('static/')) web_serverfactory = server.Site(web_root) @@ -335,7 +334,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): math.format_dt(2**256 / node.bitcoind_work.value['bits'].target / real_att_s), ) - for warning in p2pool_data.get_warnings(node.tracker, node.best_share_var.value, net, bitcoind_warning_var.value, node.bitcoind_work.value): + for warning in p2pool_data.get_warnings(node.tracker, node.best_share_var.value, net, bitcoind_getinfo_var.value, node.bitcoind_work.value): print >>sys.stderr, '#'*40 print >>sys.stderr, '>>> Warning: ' + warning print >>sys.stderr, '#'*40 diff --git a/p2pool/networks.py b/p2pool/networks.py index 4ff1b7a..67aa2da 100644 --- a/p2pool/networks.py +++ b/p2pool/networks.py @@ -25,6 +25,7 @@ nets = dict( BOOTSTRAP_ADDRS='forre.st vps.forre.st portals94.ns01.us 54.227.25.14 119.1.96.99 204.10.105.113 76.104.150.248 89.71.151.9 76.114.13.54 72.201.24.106 79.160.2.128 207.244.175.195 168.7.116.243 94.23.215.27 218.54.45.177 5.9.157.150 78.155.217.76 91.154.90.163 173.52.43.124 78.225.49.209 220.135.57.230 169.237.101.193:8335 98.236.74.28 204.19.23.19 98.122.165.84:8338 71.90.88.222 67.168.132.228 193.6.148.18 80.218.174.253 50.43.56.102 68.13.4.106 24.246.31.2 176.31.208.222 1.202.128.218 86.155.135.31 204.237.15.51 5.12.158.126:38007 202.60.68.242 94.19.53.147 65.130.126.82 184.56.21.182 213.112.114.73 218.242.51.246 86.173.200.160 204.15.85.157 37.59.15.50 62.217.124.203 80.87.240.47 198.61.137.12 108.161.134.32 198.154.60.183:10333 71.39.52.34:9335 46.23.72.52:9343 83.143.42.177 192.95.61.149 144.76.17.34 46.65.68.119 188.227.176.66:9336 75.142.155.245:9336 213.67.135.99 76.115.224.177 50.148.193.245 64.53.185.79 80.65.30.137 109.126.14.42 76.84.63.146'.split(' '), ANNOUNCE_CHANNEL='#p2pool', VERSION_CHECK=lambda v: 50700 <= v < 60000 or 60010 <= v < 60100 or 60400 <= v, + VERSION_WARNING=lambda v: 'Upgrade Bitcoin to >=0.8.5!' if v < 80500 else None, ), bitcoin_testnet=math.Object( PARENT=networks.nets['bitcoin_testnet'], diff --git a/p2pool/web.py b/p2pool/web.py index bac76f9..6788222 100644 --- a/p2pool/web.py +++ b/p2pool/web.py @@ -45,7 +45,7 @@ def _atomic_write(filename, data): os.remove(filename) os.rename(filename + '.new', filename) -def get_web_root(wb, datadir_path, bitcoind_warning_var, stop_event=variable.Event()): +def get_web_root(wb, datadir_path, bitcoind_getinfo_var, stop_event=variable.Event()): node = wb.node start_time = time.time() @@ -167,7 +167,7 @@ def get_web_root(wb, datadir_path, bitcoind_warning_var, stop_event=variable.Eve attempts_to_share=bitcoin_data.target_to_average_attempts(node.tracker.items[node.best_share_var.value].max_target), attempts_to_block=bitcoin_data.target_to_average_attempts(node.bitcoind_work.value['bits'].target), block_value=node.bitcoind_work.value['subsidy']*1e-8, - warnings=p2pool_data.get_warnings(node.tracker, node.best_share_var.value, node.net, bitcoind_warning_var.value, node.bitcoind_work.value), + warnings=p2pool_data.get_warnings(node.tracker, node.best_share_var.value, node.net, bitcoind_getinfo_var.value, node.bitcoind_work.value), donation_proportion=wb.donation_percentage/100, version=p2pool.__version__, protocol_version=p2p.Protocol.VERSION, -- 1.7.1