X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=p2pool%2Fmain.py;h=efc4248d3fd009a597e3bb5334d080bd97072488;hb=b68358960962d67623aa95e63c107695a856fab1;hp=0e2c743bd1b75745d7f25588181e1a16e16e29cb;hpb=77e7e2a1b36ab71566d82e39568088d77109e4ce;p=p2pool.git diff --git a/p2pool/main.py b/p2pool/main.py index 0e2c743..efc4248 100644 --- a/p2pool/main.py +++ b/p2pool/main.py @@ -14,7 +14,7 @@ import urlparse if '--iocp' in sys.argv: from twisted.internet import iocpreactor iocpreactor.install() -from twisted.internet import defer, reactor, protocol, task, tcp +from twisted.internet import defer, reactor, protocol, task from twisted.web import server from twisted.python import log from nattraverso import portmapper, ipdiscover @@ -69,32 +69,33 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): factory = yield connect_p2p() print 'Determining payout address...' - if args.pubkey_hash is None: - address_path = os.path.join(datadir_path, 'cached_payout_address') - - if os.path.exists(address_path): - with open(address_path, 'rb') as f: - address = f.read().strip('\r\n') - print ' Loaded cached address: %s...' % (address,) - else: - address = None - - if address is not None: - res = yield deferral.retry('Error validating cached address:', 5)(lambda: bitcoind.rpc_validateaddress(address))() + pubkey_path = os.path.join(datadir_path, 'cached_payout_pubkey') + + if os.path.exists(pubkey_path): + with open(pubkey_path, 'rb') as f: + pubkey = f.read().strip('\r\n') + print ' Loaded cached pubkey, payout address: %s...' % (bitcoin_data.pubkey_to_address(pubkey.decode('hex'), net.PARENT),) + else: + pubkey = None + + if pubkey is not None: + res = yield deferral.retry('Error validating cached pubkey:', 5)(lambda: bitcoind.rpc_validatepubkey(pubkey))() if not res['isvalid'] or not res['ismine']: - print ' Cached address is either invalid or not controlled by local bitcoind!' + print ' Cached pubkey is either invalid or not controlled by local bitcoind!' address = None + + if pubkey is None: + print ' Getting payout pubkey from bitcoind...' + pubkey = yield deferral.retry('Error getting payout pubkey from bitcoind:', 5)(lambda: bitcoind.rpc_getnewpubkey('p2pool'))() - if address is None: - print ' Getting payout address from bitcoind...' - address = yield deferral.retry('Error getting payout address from bitcoind:', 5)(lambda: bitcoind.rpc_getaccountaddress('p2pool'))() - - with open(address_path, 'wb') as f: - f.write(address) - - my_pubkey_hash = bitcoin_data.address_to_pubkey_hash(address, net.PARENT) - else: - my_pubkey_hash = args.pubkey_hash + with open(pubkey_path, 'wb') as f: + f.write(pubkey) + + my_pubkey = pubkey.decode('hex') + + address = bitcoin_data.pubkey_to_address(my_pubkey, net.PARENT) + + my_pubkey_hash = bitcoin_data.address_to_pubkey_hash(address, net.PARENT) print ' ...success! Payout address:', bitcoin_data.pubkey_hash_to_address(my_pubkey_hash, net.PARENT) print @@ -212,7 +213,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) + wb = work.WorkerBridge(node, my_pubkey, args.donation_percentage, merged_urls, args.worker_fee) web_root = web.get_web_root(wb, datadir_path, bitcoind_warning_var) caching_wb = worker_interface.CachingWorkerBridge(wb) worker_interface.WorkerInterface(caching_wb).attach_to(web_root, get_handler=lambda request: request.redirect('/static/')) @@ -327,7 +328,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): shares, stale_orphan_shares, stale_doa_shares, math.format_binomial_conf(stale_orphan_shares + stale_doa_shares, shares, 0.95), math.format_binomial_conf(stale_orphan_shares + stale_doa_shares, shares, 0.95, lambda x: (1 - x)/(1 - stale_prop)), - node.get_current_txouts().get(bitcoin_data.pubkey_hash_to_script2(my_pubkey_hash), 0)*1e-8, net.PARENT.SYMBOL, + node.get_current_txouts().get(bitcoin_data.pubkey_to_script2(my_pubkey), 0) * 1e-6, net.PARENT.SYMBOL, ) this_str += '\n Pool: %sH/s Stale rate: %.1f%% Expected time to block: %s' % ( math.format(int(real_att_s)), @@ -355,11 +356,6 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): log.err(None, 'Fatal error:') def run(): - if not hasattr(tcp.Client, 'abortConnection'): - print "Twisted doesn't have abortConnection! Upgrade to a newer version of Twisted to avoid memory leaks!" - print 'Pausing for 3 seconds...' - time.sleep(3) - realnets = dict((name, net) for name, net in networks.nets.iteritems() if '_testnet' not in name) parser = fixargparse.FixedArgumentParser(description='p2pool (version %s)' % (p2pool.__version__,), fromfile_prefix_chars='@') @@ -512,15 +508,7 @@ def run(): else: addr, port = args.worker_endpoint.rsplit(':', 1) worker_endpoint = addr, int(port) - - if args.address is not None: - try: - args.pubkey_hash = bitcoin_data.address_to_pubkey_hash(args.address, net.PARENT) - except Exception, e: - parser.error('error parsing address: ' + repr(e)) - else: - args.pubkey_hash = None - + def separate_url(url): s = urlparse.urlsplit(url) if '@' not in s.netloc: