X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=p2pool%2Fdata.py;h=0ce4f7a24407991967331669473fd83203fad0c1;hb=012a8830c61226f48d979db9800edf1862d83df4;hp=57f2e9011484b670d79849c0002ce808178ca48d;hpb=d874cb70269d762d11e44d233eaf9968365acef8;p=p2pool.git diff --git a/p2pool/data.py b/p2pool/data.py index 57f2e90..0ce4f7a 100644 --- a/p2pool/data.py +++ b/p2pool/data.py @@ -117,7 +117,7 @@ class Share(object): 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, integer=True) - pre_target = 2**256//(net.NEW_SHARE_PERIOD*attempts_per_second) - 1 if attempts_per_second else 2**256-1 + 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, (net.MIN_TARGET, net.MAX_TARGET)) max_bits = bitcoin_data.FloatingInteger.from_target_upper_bound(pre_target3) @@ -158,8 +158,8 @@ class Share(object): share_data = dict(share_data, subsidy=base_subsidy + definite_fees) weights, total_weight, donation_weight = tracker.get_cumulative_weights(previous_share.share_data['previous_share_hash'] if previous_share is not None else None, - min(height, net.REAL_CHAIN_LENGTH-1), - 65535*net.NEW_SPREAD*bitcoin_data.target_to_average_attempts(block_target), + max(0, min(height, net.REAL_CHAIN_LENGTH) - 1), + 65535*net.SPREAD*bitcoin_data.target_to_average_attempts(block_target), ) assert total_weight == sum(weights.itervalues()) + donation_weight, (total_weight, sum(weights.itervalues()) + donation_weight) @@ -179,8 +179,8 @@ class Share(object): max_bits=max_bits, bits=bits, timestamp=math.clip(desired_timestamp, ( - (previous_share.timestamp + net.NEW_SHARE_PERIOD) - (net.NEW_SHARE_PERIOD - 1), # = previous_share.timestamp + 1 - (previous_share.timestamp + net.NEW_SHARE_PERIOD) + (net.NEW_SHARE_PERIOD - 1), + (previous_share.timestamp + net.SHARE_PERIOD) - (net.SHARE_PERIOD - 1), # = previous_share.timestamp + 1 + (previous_share.timestamp + net.SHARE_PERIOD) + (net.SHARE_PERIOD - 1), )) if previous_share is not None else desired_timestamp, new_transaction_hashes=new_transaction_hashes, transaction_hash_refs=transaction_hash_refs, @@ -208,7 +208,7 @@ class Share(object): min_header=min_header, share_info=share_info, ref_merkle_link=dict(branch=[], index=0), - last_txout_nonce=(last_txout_nonce%2**32*2**32)|(last_txout_nonce>>32), # XXX + last_txout_nonce=last_txout_nonce, hash_link=prefix_to_hash_link(bitcoin_data.tx_type.pack(gentx)[:-32-8-4], cls.gentx_before_refhash), merkle_link=bitcoin_data.calculate_merkle_link([None] + other_transaction_hashes, 0), )) @@ -438,6 +438,7 @@ class OkayTracker(forest.Tracker): def think(self, block_rel_height_func, previous_block, bits, known_txs): desired = set() + bad_peer_addresses = set() # O(len(self.heads)) # make 'unverified heads' set? @@ -464,6 +465,9 @@ class OkayTracker(forest.Tracker): for bad in bads: assert bad not in self.verified.items assert bad in self.heads + bad_share = self.items[bad] + if bad_share.peer_addr is not None: + bad_peer_addresses.add(bad_share.peer_addr) if p2pool.DEBUG: print "BAD", bad self.remove(bad) @@ -527,7 +531,7 @@ class OkayTracker(forest.Tracker): for peer_addr, hash, ts, targ in desired: print ' ', None if peer_addr is None else '%s:%i' % peer_addr, format_hash(hash), math.format_dt(time.time() - ts), bitcoin_data.target_to_difficulty(targ), ts >= timestamp_cutoff, targ <= target_cutoff - return best, [(peer_addr, hash) for peer_addr, hash, ts, targ in desired if ts >= timestamp_cutoff], decorated_heads + return best, [(peer_addr, hash) for peer_addr, hash, ts, targ in desired if ts >= timestamp_cutoff], decorated_heads, bad_peer_addresses def score(self, share_hash, block_rel_height_func): # returns approximate lower bound on chain's hashrate in the last self.net.CHAIN_LENGTH*15//16*self.net.SHARE_PERIOD time @@ -594,7 +598,7 @@ def get_desired_version_counts(tracker, best_share_hash, dist): res[share.desired_version] = res.get(share.desired_version, 0) + bitcoin_data.target_to_average_attempts(share.target) return res -def get_warnings(tracker, best_share, net, bitcoind_warning, bitcoind_work_value): +def get_warnings(tracker, best_share, net, bitcoind_getinfo, bitcoind_work_value): res = [] desired_version_counts = get_desired_version_counts(tracker, best_share, @@ -605,9 +609,13 @@ def get_warnings(tracker, best_share, net, bitcoind_warning, bitcoind_work_value 'An upgrade is likely necessary. Check http://p2pool.forre.st/ for more information.' % ( majority_desired_version, 100*desired_version_counts[majority_desired_version]/sum(desired_version_counts.itervalues()))) - if bitcoind_warning is not None: - if 'This is a pre-release test build' not in bitcoind_warning: - res.append('(from bitcoind) %s' % (bitcoind_warning,)) + if bitcoind_getinfo['errors'] != '': + if 'This is a pre-release test build' not in bitcoind_getinfo['errors']: + res.append('(from bitcoind) %s' % (bitcoind_getinfo['errors'],)) + + version_warning = getattr(net, 'VERSION_WARNING', lambda v: None)(bitcoind_getinfo['version']) + if version_warning is not None: + res.append(version_warning) if time.time() > bitcoind_work_value['last_update'] + 60: res.append('''LOST CONTACT WITH BITCOIND for %s! Check that it isn't frozen or dead!''' % (math.format_dt(time.time() - bitcoind_work_value['last_update']),))