accept all targets header from miner
authorforrest <forrest@470744a7-cac9-478e-843e-5ec1b25c69e8>
Fri, 15 Jul 2011 11:14:40 +0000 (11:14 +0000)
committerforrest <forrest@470744a7-cac9-478e-843e-5ec1b25c69e8>
Fri, 15 Jul 2011 11:14:40 +0000 (11:14 +0000)
git-svn-id: svn://forre.st/p2pool@1394 470744a7-cac9-478e-843e-5ec1b25c69e8

p2pool/main.py
p2pool/util/jsonrpc.py
p2pool/worker_interface.py

index 8ec12a0..22d1aa6 100644 (file)
@@ -246,7 +246,7 @@ def main(args):
         
         merkle_root_to_transactions = expiring_dict.ExpiringDict(300)
         
-        def compute(state):
+        def compute(state, all_targets):
             extra_txs = [tx for tx in tx_pool.itervalues() if tx.is_good()]
             # XXX limit to merkle_branch and block max size - 1000000 byte
             # and sigops
@@ -274,7 +274,10 @@ def main(args):
                     timestamp = timestamp2
             ba = bitcoin.getwork.BlockAttempt(state['version'], state['previous_block'], merkle_root, timestamp, state['target'])
             #print 'SENT', 2**256//p2pool.coinbase_type.unpack(generate_tx['tx_ins'][0]['script'])['share_data']['target2']
-            return ba.getwork(p2pool.coinbase_type.unpack(generate_tx['tx_ins'][0]['script'])['share_data']['target2'])
+            target = p2pool.coinbase_type.unpack(generate_tx['tx_ins'][0]['script'])['share_data']['target2']
+            if not all_targets:
+                target = min(2**256//2**32 - 1, target)
+            return ba.getwork(target)
         
         def got_response(data):
             try:
index 74c123c..efb69cf 100644 (file)
@@ -106,6 +106,8 @@ class Server(deferred_resource.DeferredResource):
                 raise Error(-32601, u'Method not found')
             method_meth = getattr(self, method_name)
             
+            if hasattr(method_meth, "takes_headers"):
+                params = [request.received_headers] + list(params)
             
             try:
                 result = yield method_meth(*params)
index 82ba7cc..c77f07b 100644 (file)
@@ -15,7 +15,7 @@ class LongPollingWorkerInterface(deferred_resource.DeferredResource):
     def render_GET(self, request):
         request.setHeader('X-Long-Polling', '/long-polling')
         
-        res = self.compute((yield self.work.changed.get_deferred()))
+        res = self.compute((yield self.work.changed.get_deferred()), 'x-all-targets' in map(str.lower, request.received_headers))
         
         request.write(json.dumps({
             'jsonrpc': '2.0',
@@ -41,8 +41,9 @@ class WorkerInterface(jsonrpc.Server):
             LongPollingWorkerInterface(self.work, self.compute))
         self.putChild('', self)
     
-    def rpc_getwork(self, data=None):
+    def rpc_getwork(self, headers, data=None):
         if data is not None:
             return self.response_callback(data)
         
-        return self.compute(self.work.value)
+        return self.compute(self.work.value, 'x-all-targets' in map(str.lower, headers))
+    rpc_getwork.takes_headers = True