make p2p connection to bitcoin first when on testnet so connections aren't required
authorForrest Voight <forrest.voight@gmail.com>
Fri, 21 Sep 2012 15:22:19 +0000 (11:22 -0400)
committerForrest Voight <forrest@forre.st>
Wed, 3 Oct 2012 20:28:44 +0000 (16:28 -0400)
p2pool/main.py

index be8f921..784c9d5 100644 (file)
@@ -67,6 +67,20 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint):
         
         traffic_happened = variable.Event()
         
+        @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)
+            yield factory.getProtocol() # waits until handshake is successful
+            print '    ...success!'
+            print
+            defer.returnValue(factory)
+        
+        if args.testnet: # establish p2p connection first if testnet so bitcoind can work without connections
+            factory = yield connect_p2p()
+        
         # connect to bitcoind over JSON-RPC and do initial getmemorypool
         url = '%s://%s:%i/' % ('https' if args.bitcoind_rpc_ssl else 'http', args.bitcoind_address, args.bitcoind_rpc_port)
         print '''Testing bitcoind RPC connection to '%s' with username '%s'...''' % (url, args.bitcoind_rpc_username)
@@ -83,6 +97,9 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint):
         yield check()
         temp_work = yield getwork(bitcoind)
         
+        if not args.testnet:
+            factory = yield connect_p2p()
+        
         block_height_var = variable.Variable(None)
         @defer.inlineCallbacks
         def poll_height():
@@ -103,14 +120,6 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint):
         print '    Current block height: %i' % (block_height_var.value,)
         print
         
-        # 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)
-        yield factory.getProtocol() # waits until handshake is successful
-        print '    ...success!'
-        print
-        
         print 'Determining payout address...'
         if args.pubkey_hash is None:
             address_path = os.path.join(datadir_path, 'cached_payout_address')