From: Forrest Voight Date: Thu, 18 Oct 2012 00:43:26 +0000 (-0400) Subject: Merge branch 'tx_preforwarding' X-Git-Tag: 8.0^0 X-Git-Url: https://git.novaco.in/?a=commitdiff_plain;h=94daecfc590dd691a482469a313932809d338738;hp=b198ed69b91d8dd24c16e41baa7186e2d7f10f59;p=p2pool.git Merge branch 'tx_preforwarding' --- diff --git a/p2pool/main.py b/p2pool/main.py index 8ff9e0f..f1de657 100644 --- a/p2pool/main.py +++ b/p2pool/main.py @@ -512,7 +512,7 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): get_current_txouts = lambda: p2pool_data.get_expected_payouts(tracker, best_share_var.value, bitcoind_work.value['bits'].target, bitcoind_work.value['subsidy'], net) wb = work.WorkerBridge(my_pubkey_hash, net, args.donation_percentage, bitcoind_work, best_block_header, merged_urls, best_share_var, tracker, my_share_hashes, my_doa_share_hashes, args.worker_fee, p2p_node, submit_block, set_best_share, broadcast_share, block_height_var) - web_root = web.get_web_root(tracker, bitcoind_work, get_current_txouts, datadir_path, net, wb.get_stale_counts, my_pubkey_hash, wb.local_rate_monitor, args.worker_fee, p2p_node, wb.my_share_hashes, wb.pseudoshare_received, wb.share_received, best_share_var, bitcoind_warning_var, traffic_happened) + web_root = web.get_web_root(tracker, bitcoind_work, get_current_txouts, datadir_path, net, wb.get_stale_counts, my_pubkey_hash, wb.local_rate_monitor, args.worker_fee, p2p_node, wb.my_share_hashes, wb.pseudoshare_received, wb.share_received, best_share_var, bitcoind_warning_var, traffic_happened, args.donation_percentage) worker_interface.WorkerInterface(wb).attach_to(web_root, get_handler=lambda request: request.redirect('/static/')) deferral.retry('Error binding to worker port:', traceback=False)(reactor.listenTCP)(worker_endpoint[1], server.Site(web_root), interface=worker_endpoint[0]) @@ -554,11 +554,14 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): print repr(line) irc.IRCClient.lineReceived(self, line) def signedOn(self): + self.in_channel = False irc.IRCClient.signedOn(self) self.factory.resetDelay() self.join(self.channel) @defer.inlineCallbacks def new_share(share): + if not self.in_channel: + return if share.pow_hash <= share.header['bits'].target and abs(share.timestamp - time.time()) < 10*60: yield deferral.sleep(random.expovariate(1/60)) message = '\x02%s BLOCK FOUND by %s! %s%064x' % (net.NAME.upper(), bitcoin_data.script2_to_address(share.new_script, net.PARENT), net.PARENT.BLOCK_EXPLORER_URL_PREFIX, share.header_hash) @@ -567,6 +570,10 @@ def main(args, net, datadir_path, merged_urls, worker_endpoint): self._remember_message(message) self.watch_id = tracker.verified.added.watch(new_share) self.recent_messages = [] + def joined(self, channel): + self.in_channel = True + def left(self, channel): + self.in_channel = False def _remember_message(self, message): self.recent_messages.append(message) while len(self.recent_messages) > 100: diff --git a/p2pool/util/deferral.py b/p2pool/util/deferral.py index 71fe633..0601d39 100644 --- a/p2pool/util/deferral.py +++ b/p2pool/util/deferral.py @@ -103,7 +103,10 @@ class GenericDeferrer(object): def cancel(df): df, timer = self.map.pop(id) timer.cancel() - df = defer.Deferred(cancel) + try: + df = defer.Deferred(cancel) + except TypeError: + df = defer.Deferred() # handle older versions of Twisted def timeout(): self.map.pop(id) df.errback(failure.Failure(defer.TimeoutError('in GenericDeferrer'))) diff --git a/p2pool/web.py b/p2pool/web.py index a0060c8..3eafa1b 100644 --- a/p2pool/web.py +++ b/p2pool/web.py @@ -13,7 +13,7 @@ from twisted.web import resource, static import p2pool from bitcoin import data as bitcoin_data from . import data as p2pool_data -from util import deferred_resource, graph, math +from util import deferred_resource, graph, math, pack def _atomic_read(filename): try: @@ -44,7 +44,7 @@ def _atomic_write(filename, data): os.remove(filename) os.rename(filename + '.new', filename) -def get_web_root(tracker, bitcoind_work, get_current_txouts, datadir_path, net, get_stale_counts, my_pubkey_hash, local_rate_monitor, worker_fee, p2p_node, my_share_hashes, pseudoshare_received, share_received, best_share_var, bitcoin_warning_var, traffic_happened): +def get_web_root(tracker, bitcoind_work, get_current_txouts, datadir_path, net, get_stale_counts, my_pubkey_hash, local_rate_monitor, worker_fee, p2p_node, my_share_hashes, pseudoshare_received, share_received, best_share_var, bitcoin_warning_var, traffic_happened, donation_percentage): start_time = time.time() web_root = resource.Resource() @@ -176,6 +176,7 @@ def get_web_root(tracker, bitcoind_work, get_current_txouts, datadir_path, net, attempts_to_block=bitcoin_data.target_to_average_attempts(bitcoind_work.value['bits'].target), block_value=bitcoind_work.value['subsidy']*1e-8, warnings=p2pool_data.get_warnings(tracker, best_share_var.value, net, bitcoin_warning_var.value, bitcoind_work.value), + donation_proportion=donation_percentage/100, ) class WebInterface(deferred_resource.DeferredResource): @@ -217,7 +218,12 @@ def get_web_root(tracker, bitcoind_work, get_current_txouts, datadir_path, net, )))) web_root.putChild('peer_versions', WebInterface(lambda: dict(('%s:%i' % peer.addr, peer.other_sub_version) for peer in p2p_node.peers.itervalues()))) web_root.putChild('payout_addr', WebInterface(lambda: bitcoin_data.pubkey_hash_to_address(my_pubkey_hash, net.PARENT))) - web_root.putChild('recent_blocks', WebInterface(lambda: [dict(ts=s.timestamp, hash='%064x' % s.header_hash) for s in tracker.get_chain(best_share_var.value, min(tracker.get_height(best_share_var.value), 24*60*60//net.SHARE_PERIOD)) if s.pow_hash <= s.header['bits'].target])) + web_root.putChild('recent_blocks', WebInterface(lambda: [dict( + ts=s.timestamp, + hash='%064x' % s.header_hash, + number=pack.IntType(24).unpack(s.share_data['coinbase'][1:4]), + share='%064x' % s.hash, + ) for s in tracker.get_chain(best_share_var.value, min(tracker.get_height(best_share_var.value), 24*60*60//net.SHARE_PERIOD)) if s.pow_hash <= s.header['bits'].target])) web_root.putChild('uptime', WebInterface(lambda: time.time() - start_time)) web_root.putChild('stale_rates', WebInterface(lambda: p2pool_data.get_stale_counts(tracker, best_share_var.value, 720, rates=True))) diff --git a/web-static/index.html b/web-static/index.html index bf5c02f..2422056 100644 --- a/web-static/index.html +++ b/web-static/index.html @@ -2,6 +2,7 @@ + P2Pool @@ -42,7 +43,7 @@ var time_to_block = local_stats.attempts_to_block/global_stats.pool_hash_rate; d3.select('#time_to_block').text(d3.format('.3r')(time_to_block/3600) + " hours"); - d3.select('#expected_payout_amount').text(d3.format('.3r')(local/global_stats.pool_hash_rate*local_stats.block_value)); + d3.select('#expected_payout_amount').text(d3.format('.3r')(local/global_stats.pool_hash_rate*local_stats.block_value*(1-local_stats.donation_proportion))); }); }); @@ -72,8 +73,10 @@ d3.json('/recent_blocks', function(blocks) { var tr = d3.select('#blocks').selectAll().data(blocks).enter().append('tr'); - tr.append('td').text(function(block){return new Date(1000*block.ts).toString()}) + tr.append('td').text(function(block){return new Date(1000*block.ts).toString()}); + tr.append('td').text(function(block){return block.number}); tr.append('td').append('a').text(function(block){return block.hash}).attr('href', function(block){return currency_info.block_explorer_url_prefix + block.hash}); + tr.append('td').append('a').text('→').attr('href', function(block){return 'share.html#' + block.share}); }); }); @@ -101,7 +104,7 @@

Node uptime: days Peers: out, in

Local rate: ( DOA) Expected time to share:

Shares: total ( orphaned, dead) Efficiency:

-

Payout if a block were found NOW: to . Expected:

+

Payout if a block were found NOW: to . Expected after mining for 24 hours:

Current block value: Expected time to block:

@@ -115,7 +118,7 @@

Blocks found in last day:

Note that blocks may have been orphaned from the P2Pool chain and so not be here.

- +
timehash
timenumberhash/explorer linkshare

Payouts if a block were found NOW: