add target workaround
authoralexhz <balthazar@yandex.ru>
Wed, 13 Mar 2013 17:37:39 +0000 (17:37 +0000)
committeralexhz <balthazar@yandex.ru>
Wed, 13 Mar 2013 17:37:39 +0000 (17:37 +0000)
p2pool/node.py
p2pool/work.py

index 9b21768..85b501b 100644 (file)
@@ -181,17 +181,31 @@ class Node(object):
                     self.bitcoind_work.set((yield helper.getwork(self.bitcoind, self.bitcoind_work.value['use_getblocktemplate'])))
                 except:
                     log.err()
-                yield defer.DeferredList([flag, deferral.sleep(15)], fireOnOneCallback=True)
+                yield defer.DeferredList([flag, deferral.sleep(5)], fireOnOneCallback=True)
         work_poller()
         
         # PEER WORK
         
         self.best_block_header = variable.Variable(None)
+
+        self.pow_bits = variable.Variable(None)
+        self.pow_subsidy = 0
+        self.last_block_time = 0
+
         def handle_header(new_header):
+            self.pow_bits = self.bitcoind_work.value['bits']
+            self.pow_subsidy = self.bitcoind_work.value['subsidy']
+            self.last_block_time = self.bitcoind_work.value['time']
+
             # check that header matches current target
+            #
+            # TODO: PoS (stake-modifier & modifier-checksum) checkings implementation
+            #
             if not (self.net.PARENT.POW_FUNC(bitcoin_data.block_header_type.pack(new_header)) <= self.bitcoind_work.value['bits'].target):
                 return
+
             bitcoind_best_block = self.bitcoind_work.value['previous_block']
+
             if (self.best_block_header.value is None
                 or (
                     new_header['previous_block'] == bitcoind_best_block and
index 2126839..d61045f 100644 (file)
@@ -86,7 +86,7 @@ class WorkerBridge(worker_interface.WorkerBridge):
             t = self.node.bitcoind_work.value
             bb = self.node.best_block_header.value
 
-            subsidy = self.node.net.PARENT.SUBSIDY_FUNC(bb['bits'].target)
+#            subsidy = self.node.net.PARENT.SUBSIDY_FUNC(self.node.pow_bits.target)
 
             if bb is not None and bb['previous_block'] == t['previous_block'] and self.node.net.PARENT.POW_FUNC(bitcoin_data.block_header_type.pack(bb)) <= t['bits'].target:
                 print 'Skipping from block %x to block %x!' % (bb['previous_block'],
@@ -94,14 +94,14 @@ class WorkerBridge(worker_interface.WorkerBridge):
                 t = dict(
                     version=bb['version'],
                     previous_block=self.node.net.PARENT.BLOCKHASH_FUNC(bitcoin_data.block_header_type.pack(bb)),
-                    bits=bb['bits'], # not always true
+                    bits=self.node.pow_bits, # not always true
                     coinbaseflags='',
                     height=t['height'] + 1,
                     time=bb['timestamp'] + 600, # better way?
                     transactions=[],
                     transaction_fees=[],
                     merkle_link=bitcoin_data.calculate_merkle_link([None], 0),
-                    subsidy=subsidy,
+                    subsidy=self.node.pow_subsidy,
                     last_update=self.node.bitcoind_work.value['last_update'],
                 )