keep track of min_work for shares by adding max_target attribute and min_work attribu...
authorForrest Voight <forrest@forre.st>
Fri, 17 Feb 2012 18:56:59 +0000 (13:56 -0500)
committerForrest Voight <forrest@forre.st>
Sun, 19 Feb 2012 06:41:01 +0000 (01:41 -0500)
p2pool/data.py
p2pool/main.py

index b5be8a0..dce21ec 100644 (file)
@@ -50,7 +50,7 @@ share_type = pack.ComposedType([
 ])
 
 class Share(object):
-    __slots__ = 'header share_info merkle_branch other_txs timestamp share_data previous_hash target pow_hash header_hash hash time_seen peer net new_script'.split(' ')
+    __slots__ = 'header share_info merkle_branch other_txs timestamp share_data previous_hash target pow_hash header_hash hash time_seen peer net new_script max_target'.split(' ')
     
     @classmethod
     def from_share(cls, share, net):
@@ -82,7 +82,7 @@ class Share(object):
         self.merkle_branch = merkle_branch
         
         self.share_data = self.share_info['share_data']
-        self.target = self.share_info['bits'].target
+        self.target = self.max_target = self.share_info['bits'].target
         self.timestamp = self.share_info['timestamp']
         
         if len(self.share_data['new_script']) > 100:
@@ -153,11 +153,11 @@ class Share(object):
         
         return dict(header=self.header, txs=[gentx] + self.other_txs)
 
-def get_pool_attempts_per_second(tracker, previous_share_hash, dist):
+def get_pool_attempts_per_second(tracker, previous_share_hash, dist, min_work=False):
     assert dist >= 2
     near = tracker.shares[previous_share_hash]
     far = tracker.shares[tracker.get_nth_parent_hash(previous_share_hash, dist - 1)]
-    attempts = tracker.get_work(near.hash) - tracker.get_work(far.hash)
+    attempts = tracker.get_work(near.hash) - tracker.get_work(far.hash) if not min_work else tracker.get_delta(near.hash).min_work - tracker.get_delta(far.hash).min_work
     time = near.timestamp - far.timestamp
     if time <= 0:
         time = 1
@@ -238,6 +238,7 @@ class OkayTracker(forest.Tracker):
     def __init__(self, net, my_share_hashes, my_doa_share_hashes):
         forest.Tracker.__init__(self, delta_type=forest.get_attributedelta_type(dict(forest.AttributeDelta.attrs,
             work=lambda share: bitcoin_data.target_to_average_attempts(share.target),
+            min_work=lambda share: bitcoin_data.target_to_average_attempts(share.max_target),
         )))
         self.net = net
         self.verified = forest.Tracker(delta_type=forest.get_attributedelta_type(dict(forest.AttributeDelta.attrs,
index a5c52f2..6c1eb66 100644 (file)
@@ -844,7 +844,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint):
                     incoming=sum(1 for peer in p2p_node.peers.itervalues() if peer.incoming),
                     outgoing=sum(1 for peer in p2p_node.peers.itervalues() if not peer.incoming),
                 ),
-                attempts_to_share=bitcoin_data.target_to_average_attempts(tracker.shares[current_work.value['best_share_hash']].target),
+                attempts_to_share=bitcoin_data.target_to_average_attempts(tracker.shares[current_work.value['best_share_hash']].max_target),
                 attempts_to_block=bitcoin_data.target_to_average_attempts(current_work.value['bits'].target),
                 block_value=current_work2.value['subsidy']*1e-8,
             ))
@@ -958,7 +958,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint):
                         math.format(int(my_att_s)),
                         math.format_dt(dt),
                         math.format_binomial_conf(sum(1 for datum in datums if datum['dead']), len(datums), 0.95),
-                        math.format_dt(2**256 / tracker.shares[current_work.value['best_share_hash']].target / my_att_s) if my_att_s and current_work.value['best_share_hash'] else '???',
+                        math.format_dt(2**256 / tracker.shares[current_work.value['best_share_hash']].max_target / my_att_s) if my_att_s and current_work.value['best_share_hash'] else '???',
                     )
                     
                     if height > 2: