store total share count and work within shares
[p2pool.git] / web-static / share.html
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4     <head>
5         <title>P2Pool Share</title>
6         <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
7         <script type="text/javascript" src="d3.v2.min.js"></script>
8     </head>
9     <body>
10         <p>Loading...</p>
11         <script type="text/javascript">
12             function hex2a(hex) {
13                 var str = '';
14                 for (var i = 0; i < hex.length; i += 2) {
15                     var code = parseInt(hex.substr(i, 2), 16);
16                     str += code >= 32 && code <= 126 ? String.fromCharCode(code) : '?';
17                 }
18                 return str;
19             }
20             
21             function target_to_difficulty(target) { return (0xffff0000 * Math.pow(2, 256-64) + 1)/(target + 1); }
22             
23             var current_hash = null;
24             function reload(currency_info) {
25                 var share_hash = document.location.hash.substr(1);
26                 if(share_hash == current_hash) return;
27                 d3.json('/web/share/' + share_hash, function(share) {
28                     current_hash = share_hash;
29                     var b = d3.select('body');
30                     b.selectAll('*').remove();
31                     var h1 = b.append('h1');
32                         h1.append('a').attr('href', '/static/').text('P2Pool');
33                         h1.append('span').text(' > Share ');
34                         h1.append('a').attr('href', '#' + share_hash).text(share_hash.substr(-8));
35                     if(share == null) {
36                         b.append('p').text('share not found');
37                         return;
38                     }
39                     var parent = b.append('p')
40                         parent.append('span').text('Parent: ');
41                         parent.append('a').attr('href', '#' + share.parent).text(share.parent.substr(-8));
42                     var children = b.append('p');
43                         children.append('span').text('Children: ');
44                         children.data(share.children).append('a').attr('href', function(c){return '#' + c}).text(function(c){return c.substr(-8)});
45                     b.append('p').text('Type: ' + share.type_name);
46                     b.append('h2').text('Local data');
47                     b.append('p').text('Verified: ' + share.local.verified);
48                     b.append('p').text('Time first seen: ' + new Date(1000*share.local.time_first_seen) + ' (' + share.local.time_first_seen + ')');
49                     b.append('p').text('Peer first received from: ' + share.local.peer_first_received_from);
50                     b.append('h2').text('Share data');
51                     b.append('p').text('Timestamp: ' + new Date(1000*share.share_data.timestamp) + ' (' + share.share_data.timestamp + ')');
52                     b.append('p').text('Difficulty: ' + target_to_difficulty(share.share_data.target));
53                     b.append('p').text('Minimum difficulty: ' + target_to_difficulty(share.share_data.max_target));
54                     b.append('p').text('Payout address: ' + share.share_data.payout_address);
55                     b.append('p').text('Donation amount: ' + d3.format('.3p')(share.share_data.donation));
56                     b.append('p').text('Last stale: ' + share.share_data.stale_info);
57                     b.append('p').text('Nonce: ' + share.share_data.nonce);
58                     b.append('p').text('Desired version: ' + share.share_data.desired_version);
59                     b.append('p').text('Absolute height: ' + share.share_data.absheight);
60                     b.append('p').text('Absolute work: ' + share.share_data.abswork);
61                     b.append('h2').text('Block');
62                     var block = b.append('p')
63                         block.append('span').text('Hash: ')
64                         block.append('a').attr('href', currency_info.block_explorer_url_prefix + share.block.hash).text(share.block.hash);
65                     b.append('p').text('Transaction count: ' + share.block.txn_count);
66                     b.append('h2').text('Header');
67                     b.append('p').text('Version: ' + share.block.header.version);
68                     var prevblock = b.append('p')
69                         prevblock.append('span').text('Previous block: ');
70                         prevblock.append('a').attr('href', currency_info.block_explorer_url_prefix + share.block.header.previous_block).text(share.block.header.previous_block);
71                     b.append('p').text('Merkle root: ' + share.block.header.merkle_root);
72                     b.append('p').text('Timestamp: ' + share.block.header.timestamp);
73                     b.append('p').text('Difficulty: ' + target_to_difficulty(share.block.header.target));
74                     b.append('p').text('Nonce: ' + share.block.header.nonce);
75                     b.append('h2').text('Generation transaction');
76                     b.append('p').text('Hash: ' + share.block.gentx.hash);
77                     b.append('p').text('Coinbase: ' + share.block.gentx.coinbase + ' ' + hex2a(share.block.gentx.coinbase));
78                     b.append('p').text('Value: ' + share.block.gentx.value + ' ' + currency_info.symbol);
79                     return true;
80                 });
81             }
82             
83             d3.json('/web/currency_info', function(currency_info) {
84                 reload(currency_info);
85                 setInterval(function(){ reload(currency_info) }, 100);
86             });
87         </script>
88     </body>
89 </html>