import p2pool, p2pool.data as p2pool_data
class WorkerBridge(worker_interface.WorkerBridge):
- def __init__(self, my_pubkey_hash, net, donation_percentage, bitcoind_work, best_block_header, merged_urls, best_share_var, tracker, my_share_hashes, my_doa_share_hashes, worker_fee, p2p_node, submit_block, set_best_share, broadcast_share, block_height_var):
+ def __init__(self, my_pubkey_hash, net, donation_percentage, bitcoind_work, best_block_header, merged_urls, best_share_var, tracker, my_share_hashes, my_doa_share_hashes, worker_fee, p2p_node, submit_block, set_best_share, broadcast_share):
worker_interface.WorkerBridge.__init__(self)
self.recent_shares_ts_work = []
self.submit_block = submit_block
self.set_best_share = set_best_share
self.broadcast_share = broadcast_share
- self.block_height_var = block_height_var
self.pseudoshare_received = variable.Event()
self.share_received = variable.Event()
time=bb['timestamp'] + 600, # better way?
transactions=[],
merkle_link=bitcoin_data.calculate_merkle_link([None], 0),
- subsidy=net.PARENT.SUBSIDY_FUNC(self.block_height_var.value),
+ subsidy=net.PARENT.SUBSIDY_FUNC(self.bitcoind_work.value['height']),
last_update=self.bitcoind_work.value['last_update'],
)
tx_hashes = [bitcoin_data.hash256(bitcoin_data.tx_type.pack(tx)) for tx in self.current_work.value['transactions']]
tx_map = dict(zip(tx_hashes, self.current_work.value['transactions']))
+ share_type = p2pool_data.NewShare
+ if self.best_share_var.value is not None:
+ previous_share = self.tracker.items[self.best_share_var.value]
+ if isinstance(previous_share, p2pool_data.Share):
+ # Share -> NewShare only valid if 85% of hashes in [net.CHAIN_LENGTH*9//10, net.CHAIN_LENGTH] for new version
+ if self.tracker.get_height(previous_share.hash) < self.net.CHAIN_LENGTH:
+ share_type = p2pool_data.Share
+ elif time.time() < 1351383661 and self.net.NAME == 'bitcoin':
+ share_type = p2pool_data.Share
+ else:
+ counts = p2pool_data.get_desired_version_counts(self.tracker,
+ self.tracker.get_nth_parent_hash(previous_share.hash, self.net.CHAIN_LENGTH*9//10), self.net.CHAIN_LENGTH//10)
+ if counts.get(p2pool_data.NewShare.VERSION, 0) < sum(counts.itervalues())*95//100:
+ share_type = p2pool_data.Share
+
if True:
- share_info, gentx, other_transaction_hashes, get_share = p2pool_data.Share.generate_transaction(
+ share_info, gentx, other_transaction_hashes, get_share = share_type.generate_transaction(
tracker=self.tracker,
share_data=dict(
previous_share_hash=self.best_share_var.value,
'doa' if doas > doas_recorded_in_chain else
None
)(*self.get_stale_counts()),
- desired_version=5,
+ desired_version=p2pool_data.NewShare.VERSION,
),
block_target=self.current_work.value['bits'].target,
desired_timestamp=int(time.time() + 0.5),