From 930887b769e25fc04422db459925d4f9af5ec420 Mon Sep 17 00:00:00 2001 From: Forrest Voight Date: Tue, 6 Mar 2012 14:32:15 -0500 Subject: [PATCH 1/1] fixes for edge cases for share chains with near-0 difficulties --- p2pool/data.py | 10 ++++++---- p2pool/web.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/p2pool/data.py b/p2pool/data.py index 18454c9..f323889 100644 --- a/p2pool/data.py +++ b/p2pool/data.py @@ -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) diff --git a/p2pool/web.py b/p2pool/web.py index fe2aa30..b8348e8 100644 --- a/p2pool/web.py +++ b/p2pool/web.py @@ -239,7 +239,7 @@ def get_web_root(tracker, current_work, current_work2, get_current_txouts, datad request.write('

Share %s

' % (share.hash, p2pool_data.format_hash(share.hash))) request.write('

Previous: %s

' % (share.previous_hash, p2pool_data.format_hash(share.previous_hash))) - request.write('

Next: %s

' % (', '.join('%s' % (next, p2pool_data.format_hash(next)) for next in tracker.reverse_shares.get(share.hash, set())),)) + request.write('

Next: %s

' % (', '.join('%s' % (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('

Verified: %s

' % (share.hash in tracker.verified.shares,)) request.write('

Time first seen: %s

' % (time.ctime(start_time if share.time_seen == 0 else share.time_seen),)) request.write('

Peer first received from: %s

' % ('%s:%i' % share.peer.addr if share.peer is not None else 'self or cache',)) -- 1.7.1