fixes for v3 blocks
[p2pool.git] / p2pool / work.py
index 2126839..8beb8d2 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,15 @@ 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?
+                    time=t['time'] + 30, # better way?
                     transactions=[],
                     transaction_fees=[],
+                    txn_timestamp=0,
                     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'],
                 )
             
@@ -185,6 +186,11 @@ class WorkerBridge(worker_interface.WorkerBridge):
         
         tx_hashes = [bitcoin_data.hash256(bitcoin_data.tx_type.pack(tx)) for tx in self.current_work.value['transactions']]
         tx_map = dict(zip(tx_hashes, self.current_work.value['transactions']))
+        txn_timestamp = self.current_work.value['txn_timestamp']
+        
+        #print
+        #print txn_timestamp
+        #print
         
         if self.node.best_share_var.value is None:
             share_type = p2pool_data.Share
@@ -207,6 +213,7 @@ class WorkerBridge(worker_interface.WorkerBridge):
         
         if True:
             subsidy = self.node.net.PARENT.SUBSIDY_FUNC(self.current_work.value['bits'].target)
+            desired_timestamp = int(time.time() + 0.5)
 
             share_info, gentx, other_transaction_hashes, get_share = share_type.generate_transaction(
                 tracker=self.node.tracker,
@@ -225,10 +232,10 @@ class WorkerBridge(worker_interface.WorkerBridge):
                         'doa' if doas > doas_recorded_in_chain else
                         None
                     )(*self.get_stale_counts()),
-                    desired_version=11,
+                    desired_version=14,
                 ),
                 block_target=self.current_work.value['bits'].target,
-                desired_timestamp=int(time.time() + 0.5),
+                desired_timestamp=desired_timestamp if txn_timestamp < desired_timestamp else txn_timestamp + 1,
                 desired_target=desired_share_target,
                 ref_merkle_link=dict(branch=[], index=0),
                 desired_other_transaction_hashes_and_fees=zip(tx_hashes, self.current_work.value['transaction_fees']),
@@ -267,7 +274,7 @@ class WorkerBridge(worker_interface.WorkerBridge):
         )
         
         ba = dict(
-            version=min(self.current_work.value['version'], 2),
+            version=min(self.current_work.value['version'], 3),
             previous_block=self.current_work.value['previous_block'],
             merkle_link=merkle_link,
             coinb1=packed_gentx[:-4-4],