new_root.putChild('tails', WebInterface(lambda: ['%064x' % x for t in tracker.tails for x in tracker.reverse_shares.get(t, set())]))
new_root.putChild('verified_tails', WebInterface(lambda: ['%064x' % x for t in tracker.verified.tails for x in tracker.verified.reverse_shares.get(t, set())]))
new_root.putChild('best_share_hash', WebInterface(lambda: '%064x' % current_work.value['best_share_hash']))
+ new_root.putChild('currency_info', WebInterface(lambda: dict(symbol=net.PARENT.SYMBOL, block_explorer_url_prefix=net.PARENT.BLOCK_EXPLORER_URL_PREFIX)))
class Explorer(resource.Resource):
def render_GET(self, request):
});
}
- function change_period(period) {
+ function change_period(period, currency_info) {
d3.select("#period_current").text(period);
var lowerperiod = period.toLowerCase();
plot_later(d3.select("#local"), "H/s", "H", [
{"url": "/web/graph_data/local_share_hash_rate/last_" + lowerperiod, "value_getter": identity, "color": "#0000FF", "label": "Total"},
//{"url": getData("/web/graph_data/local_dead_share_hash_rate/last_" + lowerperiod, "value_getter": identity, "color": "#FF0000", "label": "Dead"}
]);
- plot_later(d3.select("#payout"), "BTC", null, [
+ plot_later(d3.select("#payout"), currency_info.symbol, null, [
{"url": "/web/graph_data/current_payout/last_" + lowerperiod, "value_getter": identity, "color": "#0000FF"}
]);
plot_later(d3.select("#pool"), "H/s", "H", [
]);
});
div.append("svg:svg").each(function(u) {
- plot(d3.select(this), "BTC", null, [
+ plot(d3.select(this), currency_info.symbol, null, [
{"data": current_payouts, "value_getter": function(d) { return u in d ? d[u] : null; }, "color": "#0000FF"}
]);
});
});
}
- periods = ["Hour", "Day", "Week", "Month", "Year"];
- d3.select("#period_chooser").selectAll().data(periods).enter().append("span")
- .text(identity)
- .on("click", change_period)
- .attr("style", function(d, i) { return (i == 0 ? "" : "margin-left:.4em;") + "color:blue;text-decoration:underline;cursor:pointer" });
- change_period(periods[1]);
+ d3.json('/web/currency_info', function(currency_info) {
+ periods = ["Hour", "Day", "Week", "Month", "Year"];
+ d3.select("#period_chooser").selectAll().data(periods).enter().append("span")
+ .text(identity)
+ .on("click", function(period){ change_period(period, currency_info) })
+ .attr("style", function(d, i) { return (i == 0 ? "" : "margin-left:.4em;") + "color:blue;text-decoration:underline;cursor:pointer" });
+ change_period(periods[1], currency_info);
+ });
</script>
</body>
</html>
.attr('style', 'color:red;border:1px solid red;padding:5px');
});
- d3.json('/current_payouts', function(pays) {
- d3.json('/payout_addr', function(addr) {
- d3.select('#payout_addr').text(addr);
- d3.select('#payout_amount').text(addr in pays ? pays[addr] : 0);
- });
-
- var arr = []; for(var i in pays) arr.push(i); arr.sort(function(a, b){return pays[b] - pays[a]});
+
+ d3.json('/web/currency_info', function(currency_info) {
+ d3.selectAll('.symbol').text(currency_info.symbol);
- var tr = d3.select('#payouts').selectAll().data(arr).enter().append('tr');
- tr.append('td').append('a').text(function(addr){return addr}).attr('href', function(addr){return 'http://blockexplorer.com/address/' + addr});
- tr.append('td').text(function(addr){return pays[addr]});
+ d3.json('/current_payouts', function(pays) {
+ d3.json('/payout_addr', function(addr) {
+ d3.select('#payout_addr').text(addr);
+ d3.select('#payout_amount').text(addr in pays ? pays[addr] : 0);
+ });
+
+ var arr = []; for(var i in pays) arr.push(i); arr.sort(function(a, b){return pays[b] - pays[a]});
+
+ var tr = d3.select('#payouts').selectAll().data(arr).enter().append('tr');
+ tr.append('td').append('a').text(function(addr){return addr}).attr('href', function(addr){return currency_info.block_explorer_url_prefix + addr});
+ tr.append('td').text(function(addr){return pays[addr]});
+
+ var total_tr = d3.select('#payouts').append('tr');
+ total_tr.append('td').append('strong').text('Total');
+ total_tr.append('td').text(d3.sum(arr, function(addr){return pays[addr]}).toFixed(8));
+ });
- var total_tr = d3.select('#payouts').append('tr');
- total_tr.append('td').append('strong').text('Total');
- total_tr.append('td').text(d3.sum(arr, function(addr){return pays[addr]}).toFixed(8));
- });
-
- 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').append('a').text(function(block){return block.hash}).attr('href', function(block){return 'http://blockexplorer.com/block/' + block.hash});
+ 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').append('a').text(function(block){return block.hash}).attr('href', function(block){return currency_info.block_explorer_url_prefix + block.hash});
+ });
});
d3.json('/web/best_share_hash', function(c) {
<p>Node uptime: <span id="uptime_days"></span> days Peers: <span id="peers_out"></span> out, <span id="peers_in"></span> in</p>
<p>Local rate: <span id="local_rate"></span> (<span id="local_doa"></span> DOA)</p>
<p>Shares: <span id="shares_total"></span> total (<span id="shares_orphan"></span> orphaned, <span id="shares_dead"></span> dead) Efficiency: <span id="efficiency"></span></p>
- <p>Payout if a block were found NOW: <span id="payout_amount"></span> BTC to <span id="payout_addr"></span></p>
- <p>Current block value: <span id="block_value"></span> BTC</p>
+ <p>Payout if a block were found NOW: <span id="payout_amount"></span> <span class="symbol"></span> to <span id="payout_addr"></span></p>
+ <p>Current block value: <span id="block_value"></span> <span class="symbol"></span></p>
<div id="warnings"></div>
<h2>Share explorer</h2>
<h2>Payouts if a block were found NOW:</h2>
<table border="1" id="payouts">
- <tr><th>address</th><th>amount in BTC</th></tr>
+ <tr><th>address</th><th>amount in <span class="symbol"></span></th></tr>
</table>
</body>
</html>
function target_to_difficulty(target) { return (0xffff0000 * Math.pow(2, 256-64) + 1)/(target + 1); }
var current_hash = null;
- function reload() {
+ function reload(currency_info) {
var share_hash = document.location.hash.substr(1);
if(share_hash == current_hash) return;
d3.json('/web/share/' + share_hash, function(share) {
b.append('h2').text('Block');
var block = b.append('p')
block.append('span').text('Hash: ')
- block.append('a').attr('href', 'http://blockexplorer.com/block/' + share.block.hash).text(share.block.hash);
+ block.append('a').attr('href', currency_info.block_explorer_url_prefix + share.block.hash).text(share.block.hash);
b.append('p').text('Transaction count: ' + share.block.txn_count_range);
b.append('h2').text('Header');
b.append('p').text('Version: ' + share.block.header.version);
var prevblock = b.append('p')
prevblock.append('span').text('Previous block: ');
- prevblock.append('a').attr('href', 'http://blockexplorer.com/block/' + share.block.header.previous_block).text(share.block.header.previous_block);
+ prevblock.append('a').attr('href', currency_info.block_explorer_url_prefix + share.block.header.previous_block).text(share.block.header.previous_block);
b.append('p').text('Merkle root: ' + share.block.header.merkle_root);
b.append('p').text('Timestamp: ' + share.block.header.timestamp);
b.append('p').text('Difficulty: ' + target_to_difficulty(share.block.header.target));
b.append('h2').text('Generation transaction');
b.append('p').text('Hash: ' + share.block.gentx.hash);
b.append('p').text('Coinbase: ' + share.block.gentx.coinbase + ' ' + hex2a(share.block.gentx.coinbase));
- b.append('p').text('Value: ' + share.block.gentx.value + ' BTC');
+ b.append('p').text('Value: ' + share.block.gentx.value + ' ' + currency_info.symbol);
return true;
});
}
- reload();
- setInterval(reload, 100);
+
+ d3.json('/web/currency_info', function(currency_info) {
+ reload(currency_info);
+ setInterval(function(){ reload(currency_info) }, 100);
+ });
</script>
</body>
</html>