X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=p2pool%2Fmain.py;h=94c89c9e2f6be00b2f7755e0db839a25b76e6023;hb=f732111a6e08d7d0649c330d1c703535a8ea80b5;hp=7e923d9c3712d9d2b5e2026b23c20a0f2bdedb80;hpb=c4796e17d1a5d7efcd861ac90550e7f20cb97eb7;p=p2pool.git diff --git a/p2pool/main.py b/p2pool/main.py index 7e923d9..94c89c9 100644 --- a/p2pool/main.py +++ b/p2pool/main.py @@ -30,14 +30,18 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): try: print 'p2pool (version %s)' % (p2pool.__version__,) print - + @defer.inlineCallbacks def connect_p2p(): # connect to bitcoind over bitcoin-p2p print '''Testing bitcoind P2P connection to '%s:%s'...''' % (args.bitcoind_address, args.bitcoind_p2p_port) factory = bitcoin_p2p.ClientFactory(net.PARENT) reactor.connectTCP(args.bitcoind_address, args.bitcoind_p2p_port, factory) + def long(): + print ''' ...taking a while. Common reasons for this include all of bitcoind's connection slots being used...''' + long_dc = reactor.callLater(5, long) yield factory.getProtocol() # waits until handshake is successful + if not long_dc.called: long_dc.cancel() print ' ...success!' print defer.returnValue(factory) @@ -52,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) @@ -174,6 +177,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): addr_store=addrs, connect_addrs=connect_addrs, desired_outgoing_conns=args.p2pool_outgoing_conns, + advertise_ip=args.advertise_ip, ) node.p2p_node.start() @@ -207,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) @@ -285,7 +289,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): print 'IRC connection lost:', reason.getErrorMessage() class IRCClientFactory(protocol.ReconnectingClientFactory): protocol = IRCClient - reactor.connectTCP("irc.freenode.net", 6667, IRCClientFactory()) + reactor.connectTCP("irc.freenode.net", 6667, IRCClientFactory(), bindAddress=(worker_endpoint[0], 0)) @defer.inlineCallbacks def status_thread(): @@ -322,7 +326,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_hash_to_script2(my_pubkey_hash), 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)), @@ -330,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 @@ -360,8 +364,8 @@ def run(): parser = fixargparse.FixedArgumentParser(description='p2pool (version %s)' % (p2pool.__version__,), fromfile_prefix_chars='@') parser.add_argument('--version', action='version', version=p2pool.__version__) parser.add_argument('--net', - help='use specified network (default: bitcoin)', - action='store', choices=sorted(realnets), default='bitcoin', dest='net_name') + help='use specified network (default: novacoin)', + action='store', choices=sorted(realnets), default='novacoin', dest='net_name') parser.add_argument('--testnet', help='''use the network's testnet''', action='store_const', const=True, default=False, dest='testnet') @@ -409,6 +413,9 @@ def run(): p2pool_group.add_argument('--outgoing-conns', metavar='CONNS', help='outgoing connections (default: 6)', type=int, action='store', default=6, dest='p2pool_outgoing_conns') + parser.add_argument('--disable-advertise', + help='''don't advertise local IP address as being available for incoming connections. useful for running a dark node, along with multiple -n ADDR's and --outgoing-conns 0''', + action='store_false', default=True, dest='advertise_ip') worker_group = parser.add_argument_group('worker interface') worker_group.add_argument('-w', '--worker-port', metavar='PORT or ADDR:PORT',