fixes for edge cases for share chains with near-0 difficulties
authorForrest Voight <forrest.voight@gmail.com>
Tue, 6 Mar 2012 19:32:15 +0000 (14:32 -0500)
committerForrest Voight <forrest.voight@gmail.com>
Tue, 6 Mar 2012 19:32:15 +0000 (14:32 -0500)
p2pool/data.py
p2pool/web.py

index 18454c9..f323889 100644 (file)
@@ -84,7 +84,7 @@ share_type = pack.ComposedType([
 ])
 
 
-def get_pool_attempts_per_second(tracker, previous_share_hash, dist, min_work=False):
+def get_pool_attempts_per_second(tracker, previous_share_hash, dist, min_work=False, integer=False):
     assert dist >= 2
     near = tracker.shares[previous_share_hash]
     far = tracker.shares[tracker.get_nth_parent_hash(previous_share_hash, dist - 1)]
@@ -92,7 +92,9 @@ def get_pool_attempts_per_second(tracker, previous_share_hash, dist, min_work=Fa
     time = near.timestamp - far.timestamp
     if time <= 0:
         time = 1
-    return attempts//time
+    if integer:
+        return attempts//time
+    return attempts/time
 
 def get_average_stale_prop(tracker, share_hash, lookbehind):
     stales = sum(1 for share in tracker.get_chain(share_hash, lookbehind) if share.share_data['stale_info'] in [253, 254])
@@ -115,8 +117,8 @@ def generate_transaction(tracker, share_data, block_target, desired_timestamp, d
     if height < net.TARGET_LOOKBEHIND:
         pre_target3 = net.MAX_TARGET
     else:
-        attempts_per_second = get_pool_attempts_per_second(tracker, share_data['previous_share_hash'], net.TARGET_LOOKBEHIND, min_work=True)
-        pre_target = 2**256//(net.SHARE_PERIOD*attempts_per_second) - 1
+        attempts_per_second = get_pool_attempts_per_second(tracker, share_data['previous_share_hash'], net.TARGET_LOOKBEHIND, min_work=True, integer=True)
+        pre_target = 2**256//(net.SHARE_PERIOD*attempts_per_second) - 1 if attempts_per_second else 2**256-1
         pre_target2 = math.clip(pre_target, (previous_share.max_target*9//10, previous_share.max_target*11//10))
         pre_target3 = math.clip(pre_target2, (0, net.MAX_TARGET))
     max_bits = bitcoin_data.FloatingInteger.from_target_upper_bound(pre_target3)
index fe2aa30..b8348e8 100644 (file)
@@ -239,7 +239,7 @@ def get_web_root(tracker, current_work, current_work2, get_current_txouts, datad
             
             request.write('<h1>Share <a href="%x">%s</a></h1>' % (share.hash, p2pool_data.format_hash(share.hash)))
             request.write('<p>Previous: <a href="%x">%s</a></p>' % (share.previous_hash, p2pool_data.format_hash(share.previous_hash)))
-            request.write('<p>Next: %s</p>' % (', '.join('<a href="%x">%s</a>' % (next, p2pool_data.format_hash(next)) for next in tracker.reverse_shares.get(share.hash, set())),))
+            request.write('<p>Next: %s</p>' % (', '.join('<a href="%x">%s</a>' % (next, p2pool_data.format_hash(next)) for next in sorted(tracker.reverse_shares.get(share.hash, set()), key=lambda sh: -len(tracker.reverse_shares.get(sh, set())))),))
             request.write('<p>Verified: %s</p>' % (share.hash in tracker.verified.shares,))
             request.write('<p>Time first seen: %s</p>' % (time.ctime(start_time if share.time_seen == 0 else share.time_seen),))
             request.write('<p>Peer first received from: %s</p>' % ('%s:%i' % share.peer.addr if share.peer is not None else 'self or cache',))