efficiency improvement - don't pass transactions to old peers
authorForrest Voight <forrest@forre.st>
Mon, 15 Oct 2012 01:18:19 +0000 (21:18 -0400)
committerForrest Voight <forrest@forre.st>
Mon, 15 Oct 2012 06:15:29 +0000 (02:15 -0400)
p2pool/p2p.py

index 7d6497a..4cff950 100644 (file)
@@ -157,6 +157,9 @@ class Protocol(p2protocol.Protocol):
         if best_share_hash is not None:
             self.node.handle_share_hashes([best_share_hash], self)
         
+        if self.other_version < 8:
+            return
+        
         def update_remote_view_of_my_known_txs(before, after):
             added = set(after) - set(before)
             removed = set(before) - set(after)
@@ -258,23 +261,27 @@ class Protocol(p2protocol.Protocol):
         if not shares:
             return defer.succeed(None)
         
-        tx_hashes = set()
-        for share in shares:
-            if share.hash in include_txs_with:
-                tx_hashes.update(share.get_other_tx_hashes(tracker))
-        
-        hashes_to_send = [x for x in tx_hashes if x not in self.node.mining_txs_var.value and x in known_txs]
-        
-        new_remote_remembered_txs_size = self.remote_remembered_txs_size + sum(len(bitcoin_data.tx_type.pack(known_txs[x])) for x in hashes_to_send)
-        if new_remote_remembered_txs_size > self.max_remembered_txs_size:
-            raise ValueError('shares have too many txs')
-        self.remote_remembered_txs_size = new_remote_remembered_txs_size
-        
-        fragment(self.send_remember_tx, tx_hashes=[x for x in hashes_to_send if x in self.remote_tx_hashes], txs=[known_txs[x] for x in hashes_to_send if x not in self.remote_tx_hashes])
-        fragment(self.send_shares, shares=[share.as_share() for share in shares])
-        res = self.send_forget_tx(tx_hashes=hashes_to_send)
-        
-        self.remote_remembered_txs_size -= sum(len(bitcoin_data.tx_type.pack(known_txs[x])) for x in hashes_to_send)
+        if self.other_version >= 8:
+            tx_hashes = set()
+            for share in shares:
+                if share.hash in include_txs_with:
+                    tx_hashes.update(share.get_other_tx_hashes(tracker))
+            
+            hashes_to_send = [x for x in tx_hashes if x not in self.node.mining_txs_var.value and x in known_txs]
+            
+            new_remote_remembered_txs_size = self.remote_remembered_txs_size + sum(len(bitcoin_data.tx_type.pack(known_txs[x])) for x in hashes_to_send)
+            if new_remote_remembered_txs_size > self.max_remembered_txs_size:
+                raise ValueError('shares have too many txs')
+            self.remote_remembered_txs_size = new_remote_remembered_txs_size
+            
+            fragment(self.send_remember_tx, tx_hashes=[x for x in hashes_to_send if x in self.remote_tx_hashes], txs=[known_txs[x] for x in hashes_to_send if x not in self.remote_tx_hashes])
+        
+        res = fragment(self.send_shares, shares=[share.as_share() for share in shares])
+        
+        if self.other_version >= 8:
+            res = self.send_forget_tx(tx_hashes=hashes_to_send)
+            
+            self.remote_remembered_txs_size -= sum(len(bitcoin_data.tx_type.pack(known_txs[x])) for x in hashes_to_send)
         
         return res