Example #1
0
function doshifts($data, $user)
{
    $ans = getShifts($user);
    $pg = "Click <a href='#payoutmark'>here</a> to jump to the start of the last payout<br><br>";
    $pg .= "<table callpadding=0 cellspacing=0 border=0>\n";
    $pg .= "<tr class=title>";
    $pg .= "<td class=dl>Shift</td>";
    $pg .= "<td class=dl>Start UTC</td>";
    $pg .= "<td class=dr>Length</td>";
    $pg .= "<td class=dr>Your Diff</td>";
    $pg .= "<td class=dr>Inv Diff</td>";
    $pg .= "<td class=dr>Avg Hs</td>";
    $pg .= "<td class=dr>Shares</td>";
    $pg .= "<td class=dr>Avg Share</td>";
    $pg .= "<td class=dr>Rewards</td>";
    $pg .= "<td class=dr>Rewarded<span class=st1>*</span></td>";
    $pg .= "<td class=dr>PPS%</td>";
    $pg .= "</tr>\n";
    if ($ans['STATUS'] != 'ok' || !isset($ans['prefix_all'])) {
        $pg = '<h1>Shifts</h1>' . $pg;
    } else {
        $pre = $ans['prefix_all'];
        $count = $ans['rows'];
        $pg = '<h1>Last ' . ($count + 1) . ' Shifts</h1>' . $pg;
        for ($i = 0; $i < $count; $i++) {
            $u = '';
            $mark = '';
            if (isset($ans['lastpayoutstart:' . $i]) && $ans['lastpayoutstart:' . $i] != '') {
                $u = 'u';
                $mark = '<a name=payoutmark></a>';
            }
            if ($i % 2 == 0) {
                $row = "even{$u}";
            } else {
                $row = "odd{$u}";
            }
            $pg .= "<tr class={$row}>";
            $shifname = $ans['shift:' . $i];
            $shif = preg_replace(array('/^.* to /', '/^.*fin: /'), '', $shifname);
            $ablock = false;
            if (preg_match('/to.*Block.* fin/', $shifname) == 1) {
                $ablock = true;
            } else {
                $shifex = $ans['endmarkextra:' . $i];
                if (preg_match('/Block .* fin/', $shifex) == 1) {
                    $ablock = true;
                }
            }
            if ($ablock === true) {
                $btc = ' <img src=/BTCSym.png border=0>';
            } else {
                $btc = '';
            }
            $pg .= "<td class=dl>{$shif}{$btc}{$mark}</td>";
            $start = $ans['start:' . $i];
            $pg .= '<td class=dl>' . utcd($start, true) . '</td>';
            $nd = $ans['end:' . $i];
            $elapsed = $nd - $start;
            $pg .= '<td class=dr>' . howmanyhrs($elapsed) . '</td>';
            $diffacc = $ans[$pre . 'diffacc:' . $i];
            $pg .= '<td class=dr>' . difffmt($diffacc) . '</td>';
            $diffinv = $ans[$pre . 'diffinv:' . $i];
            $pg .= '<td class=dr>' . difffmt($diffinv) . '</td>';
            $hr = $diffacc * pow(2, 32) / $elapsed;
            $pg .= '<td class=dr>' . dsprate($hr) . '</td>';
            $shareacc = $ans[$pre . 'shareacc:' . $i];
            $pg .= '<td class=dr>' . difffmt($shareacc) . '</td>';
            if ($shareacc > 0) {
                $avgsh = $diffacc / $shareacc;
            } else {
                $avgsh = 0;
            }
            $pg .= '<td class=dr>' . number_format($avgsh, 2) . '</td>';
            $pg .= '<td class=dr>' . $ans['rewards:' . $i] . '</td>';
            $ppsr = (double) $ans['ppsrewarded:' . $i];
            if ($ppsr > 0) {
                $ppsd = sprintf('%.5f', $ppsr);
            } else {
                $ppsd = '0';
            }
            $pg .= "<td class=dr>{$ppsd}</td>";
            $ppsv = (double) $ans['ppsvalue:' . $i];
            if ($ppsv > 0) {
                $pgot = number_format(100.0 * $ppsr / $ppsv, 2) . '%';
            } else {
                $pgot = '?';
            }
            $pg .= "<td class=dr>{$pgot}</td>";
            $pg .= "</tr>\n";
        }
    }
    $pg .= "</table>\n";
    $pg .= "<span class=st1>*</span> The Rewarded value unit is satoshis per 1diff share<br>";
    return $pg;
}
Example #2
0
function dompayouts($data, $user)
{
    $pg = '<h1>Mining Rewards</h1>';
    $ans = getMPayouts($user);
    $pg .= "The rewards you've earned for each block the pool has found.<br>";
    $pg .= 'See the ';
    $pg .= makeLink('payments');
    $pg .= "Payments</a> page for the payments you've been sent.<br><br>";
    $pg .= "<table callpadding=0 cellspacing=0 border=0>\n";
    $pg .= "<tr class=title>";
    $pg .= "<td class=dr>Block</td>";
    $pg .= "<td class=dr>Block UTC</td>";
    $pg .= "<td class=dr>Miner Reward</td>";
    $pg .= "<td class=dr>N Diff</td>";
    $pg .= "<td class=dr>N Range</td>";
    $pg .= "<td class=dr>Pool N Avg</td>";
    $pg .= "<td class=dr>Your %</td>";
    $pg .= "<td class=dr>Your N Diff</td>";
    $pg .= "<td class=dr>Your N Avg</td>";
    $pg .= "<td class=dr>Your BTC</td>";
    $pg .= "</tr>\n";
    if ($ans['STATUS'] == 'ok') {
        $totamt = 0;
        $count = $ans['rows'];
        for ($i = 0; $i < $count; $i++) {
            if ($i % 2 == 0) {
                $row = 'even';
            } else {
                $row = 'odd';
            }
            $pg .= "<tr class={$row}>";
            $pg .= '<td class=dr>' . $ans['height:' . $i] . '</td>';
            $pg .= '<td class=dr>' . gmdate('j/M H:i', $ans['blockcreatedate:' . $i]) . '</td>';
            $pg .= '<td class=dr>' . btcfmt($ans['minerreward:' . $i]) . '</td>';
            $diffused = $ans['diffused:' . $i];
            $pg .= '<td class=dr>' . difffmt($diffused) . '</td>';
            $elapsed = $ans['elapsed:' . $i];
            $pg .= '<td class=dr>' . howmanyhrs($elapsed) . '</td>';
            $phr = $diffused * pow(2, 32) / $elapsed;
            $pg .= '<td class=dr>' . siprefmt($phr) . 'Hs</td>';
            $diffacc = $ans['diffacc:' . $i];
            $ypct = $diffacc * 100 / $diffused;
            $pg .= '<td class=dr>' . number_format($ypct, 2) . '%</td>';
            $pg .= '<td class=dr>' . difffmt($diffacc) . '</td>';
            $hr = $diffacc * pow(2, 32) / $elapsed;
            $pg .= '<td class=dr>' . dsprate($hr) . '</td>';
            $amount = $ans['amount:' . $i];
            $totamt += $amount;
            $pg .= '<td class=dr>' . btcfmt($amount) . '</td>';
            $pg .= "</tr>\n";
        }
        if ($count > 1) {
            if ($i % 2 == 0) {
                $row = 'even';
            } else {
                $row = 'odd';
            }
            $pg .= "<tr class={$row}>";
            $pg .= '<td class=dr>Total:</td>';
            $pg .= '<td class=dl colspan=8></td>';
            $pg .= '<td class=dr>' . btcfmt($totamt) . '</td>';
            $pg .= "</tr>\n";
        }
    }
    $pg .= "</table>\n";
    return $pg;
}
Example #3
0
function pertotal($offset, $totshare, $totdiff, $totinvalid, $totrate, $blockacc, $blockreward)
{
    $pg = '';
    $totrate = dsprate($totrate);
    if ($offset % 2 == 0) {
        $row = 'even';
    } else {
        $row = 'odd';
    }
    $pg .= "<tfoot><tr class={$row}><td class=dl>Total:</td>";
    $pg .= "<td class=dl>&nbsp;</td>";
    $shareacc = number_format($totshare, 0);
    $pg .= "<td class=dr>{$shareacc}</td>";
    $diffacc = number_format($totdiff, 0);
    $pg .= "<td class=dr>{$diffacc}</td>";
    $dtot = $totdiff + $totinvalid;
    if ($dtot > 0) {
        $rej = number_format(100.0 * $totinvalid / $dtot, 3);
    } else {
        $rej = '0';
    }
    $pg .= "<td class=dr>{$rej}%</td>";
    if ($blockacc <= 0) {
        $blkpct = '&nbsp;';
    } else {
        $blkpct = number_format(100.0 * $totdiff / $blockacc, 3) . '%';
    }
    $pg .= "<td class=dr>{$blkpct}</td>";
    $pg .= "<td class=dr>{$totrate}</td>";
    $pg .= "</td><td colspan=2 class=dl></td></tr></tfoot>\n";
    return $pg;
}
Example #4
0
function pgtop($info, $dotop, $user, $douser)
{
    global $site_title, $loginfailed;
    $phr = '?THs';
    $plb = '?';
    $nlb = '?';
    $pac = '0';
    $per = '0';
    $perset = false;
    $uhr = '?GHs';
    $u1hr = '';
    if ($info !== false) {
        $now = time();
        if (isset($info['p_hashrate5m'])) {
            $phr = $info['p_hashrate5m'];
        }
        //	if (isset($info['p_elapsed'])
        //	and isset($info['p_hashrate1hr'])
        //	and $info['p_elapsed'] > 3600)
        //		$phr = $info['p_hashrate1hr'];
        if ($phr == '?') {
            $phr = '?THs';
        } else {
            $phr = dsprate($phr);
        }
        if (isset($info['lastblock'])) {
            $plb = $info['lastblock'];
            if ($plb != '?') {
                $sec = $now - $plb;
                if ($sec < 60) {
                    $plb = $sec . 's';
                } else {
                    if ($sec < 3600) {
                        $min = round($sec / 60);
                        $plb = $min . 'm';
                    } else {
                        $min = round($sec / 60);
                        $hr = round($min / 60);
                        $min -= $hr * 60;
                        $plb = $hr . 'h';
                        if ($min > 0) {
                            $plb .= '&nbsp;' . $min . 'm';
                        }
                    }
                }
            }
        }
        if (isset($info['lastblockheight'])) {
            $plb .= ' (' . $info['lastblockheight'] . ')';
        }
        if (isset($info['lastbc'])) {
            $nlb = $info['lastbc'];
            if ($nlb != '?') {
                $sec = $now - $nlb;
                $min = round($sec / 60);
                $nlb = $min . 'm';
                $s = $sec - $min * 60;
                if ($s > 0) {
                    $nlb .= "&nbsp;{$s}s";
                }
            }
        }
        if (isset($info['lastheight'])) {
            $nlb .= ' (' . $info['lastheight'] . ')';
        }
        if (isset($info['blockacc'])) {
            $acc = $info['blockacc'];
            $pac = number_format($acc, 0);
            if (isset($info['currndiff'])) {
                $cur = $info['currndiff'];
                if ($cur != '?' && $cur > 0.0) {
                    $pac .= ' (' . number_format(100.0 * $acc / $cur, 2) . '%)';
                }
            }
        }
        if (isset($info['blockshareinv'])) {
            $shinv = $info['blockshareinv'];
            $per = siprefmt($shinv, 1);
            $perset = true;
            if (isset($info['blockshareacc'])) {
                $shacc = $info['blockshareacc'];
                if ($shacc + $shinv > 0) {
                    $amt = 100.0 * $shinv / ($shacc + $shinv);
                    if (round($amt, 2) > 9.99) {
                        $per .= ' (' . number_format($amt, 1) . '%)';
                    } else {
                        $per .= ' (' . number_format($amt, 2) . '%)';
                    }
                }
            }
        }
        if (isset($info['blockerr'])) {
            if ($perset == false) {
                $per = '';
            } else {
                $per .= ' &#183; ';
            }
            $inv = $info['blockerr'];
            $per .= siprefmt($inv, 1);
            if (isset($info['blockacc'])) {
                $acc = $info['blockacc'];
                if ($acc + $inv > 0) {
                    $amt = 100.0 * $inv / ($acc + $inv);
                    if (round($amt, 2) > 9.99) {
                        $per .= ' (' . number_format($amt, 1) . '%)';
                    } else {
                        $per .= ' (' . number_format($amt, 2) . '%)';
                    }
                }
            }
        }
        if (isset($info['u_hashrate5m'])) {
            $uhr = $info['u_hashrate5m'];
            if ($uhr == '?') {
                $uhr = '?GHs';
            } else {
                $uhr = dsprate($uhr);
            }
        }
        if (isset($info['u_hashrate1hr']) and isset($info['u_elapsed']) and $info['u_elapsed'] > 3600) {
            $u1hr = $info['u_hashrate1hr'];
            if ($u1hr == '?') {
                $u1hr = '';
            } else {
                $u1hr = '/' . dsprate($u1hr);
                // Remove the first XHs if they are the same
                if (substr($u1hr, -3) == substr($uhr, -3)) {
                    $uhr = substr($uhr, 0, -3);
                }
            }
        }
    }
    $top = "<noscript><div class=jst id=jst>&nbsp;Javascript isn't enabled.";
    $top .= " You need to enable javascript to use";
    $top .= " the {$site_title} web site.</div></noscript>";
    if ($loginfailed === true) {
        $top .= '<div class=accwarn>Login Failed</div>';
    }
    if (isset($info['u_nopayaddr'])) {
        $top .= '<div class=accwarn>Please set a payout address on your account!</div>';
    }
    if (isset($info['u_noemail'])) {
        $top .= '<div class=accwarn>Please set an email address on your account!</div>';
    }
    $top .= '<div class=topd>';
    if ($dotop === true) {
        $lh = '';
        $ls = '';
        $lw = '';
        if (isset($info['now']) && isset($info['lastsh']) && isset($info['lasthb']) && isset($info['lastwi'])) {
            $lsn = $info['now'] - $info['lastsh'];
            $lhn = $info['now'] - $info['lasthb'];
            $lwn = $info['now'] - $info['lastwi'];
            if ($lsn < 8) {
                $lsc = 'green.png';
            } else {
                if ($lsn < 10) {
                    $lsc = 'orange.png';
                } else {
                    $lsc = 'red.png';
                }
            }
            if ($lhn < 5) {
                $lhc = 'green.png';
            } else {
                if ($lhn < 10) {
                    $lhc = 'orange.png';
                } else {
                    $lhc = 'red.png';
                }
            }
            if ($lwn < 36) {
                $lwc = 'green.png';
            } else {
                if ($lwn < 46) {
                    $lwc = 'orange.png';
                } else {
                    $lwc = 'red.png';
                }
            }
            $img1 = '<img border=0 src=/';
            $img2 = '>';
            $ls = $img1 . $lsc . $img2;
            $lh = $img1 . $lhc . $img2;
            $lw = $img1 . $lwc . $img2;
        }
        if (!isset($info['users'])) {
            $info['users'] = '?';
        }
        if (!isset($info['workers'])) {
            $info['workers'] = '?';
        }
        $top .= '<table cellpadding=0 cellspacing=0 border=0 width=100%><tr><td>';
        $top .= '<table cellpadding=1 cellspacing=0 border=0>';
        $top .= "<tr><td class=topdes>{$lh}</td></tr>";
        $top .= "<tr><td class=topdes>{$ls}</td></tr>";
        $top .= "<tr id=mini0><td class=topdes>{$lw}</td></tr></table>";
        $top .= '</td><td>';
        $top .= '<table cellpadding=1 cellspacing=0 border=0 width=100%>';
        $top .= '<tr><td class=topdes>CKPool:&nbsp;</td>';
        $top .= "<td class=topdat>&nbsp;{$phr}</td></tr>";
        $top .= '<tr><td class=topdes>Shares:&nbsp;</td>';
        $top .= "<td class=topdat>&nbsp;{$pac}</td></tr>";
        $top .= '<tr id=mini1><td class=topdes>Invalids:&nbsp;</td>';
        $top .= "<td class=topdat>&nbsp;{$per}</td></tr></table>";
        $top .= '</td><td>';
        $top .= '<table cellpadding=1 cellspacing=0 border=0 width=100%>';
        $top .= '<tr><td class=topdes>Last&nbsp;</td>';
        $top .= '<td class=topdesl>Block</td></tr>';
        $top .= '<tr><td class=topdes>Pool:&nbsp;</td>';
        $top .= "<td class=topdat>&nbsp;{$plb}</td></tr>";
        $top .= '<tr id=mini2><td class=topdes>Network:&nbsp;</td>';
        $top .= "<td class=topdat>&nbsp;{$nlb}</td></tr></table>";
        $top .= '</td><td id=mini3>';
        $top .= '<table cellpadding=1 cellspacing=0 border=0 width=100%>';
        $top .= '<tr><td class=topdes>Users:&nbsp;</td>';
        $top .= '<td class=topdat>&nbsp;' . $info['users'] . '</td></tr>';
        $top .= '<tr><td class=topdes>Workers:&nbsp;</td>';
        $top .= '<td class=topdat>&nbsp;' . $info['workers'] . '</td></tr></table>';
        $top .= '</td><td>';
        if ($douser === true) {
            $top .= '<span class=login>';
            list($who, $whoid) = validate();
            if ($who == false) {
                $top .= '<table cellpadding=0 cellspacing=0 border=0><tr><td>';
                $top .= '<a href="https://' . $_SERVER['SERVER_NAME'];
                $top .= '/index.php?Register=1">Login<br>Register</a>';
                $top .= '</td></tr></table>';
            } else {
                $extra = '';
                if (strlen($who) > 12) {
                    $who = substr($who, 0, 12);
                    $extra = '&#133;';
                }
                $top .= "<span class=topwho>" . htmlspecialchars($who) . "{$extra}&nbsp;</span>";
                $top .= makeForm('');
                $top .= "<input type=submit name=Logout value=Logout></form>";
                $top .= "<br><span class=topdes>Hash&nbsp;Rate:</span>";
                $top .= "<span class=topdat>{$uhr}{$u1hr}</span><br>";
            }
            $top .= '</span>';
        }
        $top .= '</td></tr></table>';
    } else {
        $top .= '&nbsp;';
    }
    $top .= '</div>';
    return $top;
}
Example #5
0
function worktotal($offset, $totshare, $totdiff, $totshrate, $totinvalid, $totrate, $blockacc, $blockreward, $instances)
{
    $pg = '';
    $totshrate = dsprate($totshrate);
    $totrate = dsprate($totrate);
    # if ($instances >= 0)
    #	$dspinst = " ($instances miners)";
    # else
    $dspinst = '';
    if ($offset % 2 == 0) {
        $row = 'even';
    } else {
        $row = 'odd';
    }
    $pg .= "<tr class={$row}><td class=dl colspan=3>Total: {$offset}{$dspinst}</td>";
    $shareacc = number_format($totshare, 0);
    $pg .= "<td class=dr>{$shareacc}</td>";
    $diffacc = number_format($totdiff, 0);
    $pg .= "<td class=dr>{$diffacc}</td>";
    $pg .= "<td class=dr>{$totshrate}</td><td>&nbsp;</td>";
    $dtot = $totdiff + $totinvalid;
    if ($dtot > 0) {
        $rej = number_format(100.0 * $totinvalid / $dtot, 3);
    } else {
        $rej = '0';
    }
    $pg .= "<td class=dr>{$rej}%</td>";
    if ($blockacc <= 0) {
        $blkpct = '&nbsp;';
    } else {
        $blkpct = number_format(100.0 * $totdiff / $blockacc, 3) . '%';
    }
    $pg .= "<td class=hid colspan=4 data-hid=dr>&nbsp;</td>";
    $pg .= "<td class=dr>{$blkpct}</td>";
    $pg .= "<td class=dr>{$totrate}</td></tr>\n";
    return $pg;
}
Example #6
0
function dostats($data, $user)
{
    $pg = '<h1>Pool Stats</h1>';
    if (isset($data['info']) && $data['info'] !== false) {
        $info = $data['info'];
        $pe = false;
        if (isset($info['p_elapsed'])) {
            $dspel = howlongago($info['p_elapsed']);
            $pg .= "Pool&nbsp;Uptime:&nbsp;{$dspel}";
            $pe = true;
        }
        if (isset($info['ckdb_elapsed'])) {
            if ($pe) {
                $pg .= '&emsp;';
            }
            $dspel = howlongago($info['ckdb_elapsed']);
            $pg .= "CKDB&nbsp;Uptime:&nbsp;{$dspel}";
        }
        $dsp = '?THs';
        $dsp5m = '?THs';
        $dsp1hr = '?THs';
        $dsp24hr = '?THs';
        if (isset($info['p_hashrate'])) {
            $hr = $info['p_hashrate'];
            if ($hr != '?') {
                $dsp = dsprate($hr);
            }
        }
        if (isset($info['p_hashrate5m'])) {
            $hr = $info['p_hashrate5m'];
            if ($hr != '?') {
                $dsp5m = dsprate($hr);
            }
        }
        if (isset($info['p_hashrate1hr'])) {
            $hr = $info['p_hashrate1hr'];
            if ($hr != '?') {
                $dsp1hr = dsprate($hr);
            }
        }
        if (isset($info['p_hashrate24hr'])) {
            $hr = $info['p_hashrate24hr'];
            if ($hr != '?') {
                $dsp24hr = dsprate($hr);
            }
        }
        $pg .= '<table cellpadding=8 cellspacing=0 border=0><tr>';
        $pg .= "<td>Pool Hashrate: {$dsp}</td>";
        $pg .= "<td>5m: {$dsp5m}</td>";
        $pg .= "<td>1hr: {$dsp1hr}</td>";
        $pg .= "<td>24hr: {$dsp24hr}</td>";
        $pg .= '</tr></table><br>';
    }
    $ans = getAllUsers($user);
    $pg .= "<table cellpadding=0 cellspacing=0 border=0>\n";
    $pg .= '<thead><tr class=title>';
    $pg .= '<td class=dl>Username</td>';
    $pg .= '<td class=dr>Hash Rate 5m</td>';
    $pg .= "</tr></thead>\n";
    if ($ans['STATUS'] == 'ok') {
        $pg .= '<tbody>';
        $all = array();
        $count = $ans['rows'];
        for ($i = 0; $i < $count; $i++) {
            $all[] = array('username' => $ans['username:'******'userid' => $ans['userid:' . $i], 'u_hashrate5m' => $ans['u_hashrate5m:' . $i]);
        }
        usort($all, 'allusersort');
        for ($i = 0; $i < $count; $i++) {
            if ($i % 2 == 0) {
                $row = 'even';
            } else {
                $row = 'odd';
            }
            $pg .= "<tr class={$row}>";
            $pg .= '<td class=dl>' . htmlspecialchars($all[$i]['username']) . '</td>';
            $uhr = $all[$i]['u_hashrate5m'];
            if ($uhr == '?') {
                $dsp = '?GHs';
            } else {
                $dsp = dsprate($uhr);
            }
            $pg .= "<td class=dr>{$dsp}</td>";
            $pg .= "</tr>\n";
        }
        $pg .= '</tbody>';
    }
    $pg .= "</table>\n";
    return $pg;
}
Example #7
0
function dopplns2($data, $user)
{
    global $send_sep;
    $pg = '<h1>CKPool</h1>';
    $blk = getparam('blk', true);
    if (nuem($blk)) {
        $tx = '';
        # so can make a link
        $blkuse = getparam('blkuse', true);
        if (nuem($blkuse)) {
            $blkuse = '';
        } else {
            $tx = 'y';
        }
        $pg = '<br>' . makeForm('pplns2') . "\nBlock: <input type=text name=blk size=10 value='{$blkuse}'>\n&nbsp; Tx: <input type=text name=tx size=1 value='{$tx}'>\n&nbsp; Dust (Satoshi): <input type=text name=dust size=5 value='10000'>\n&nbsp; Fee (BTC): <input type=text name=fee size=5 value='0.0'>\n&nbsp;<input type=submit name=Calc value=Calc>\n</form>";
    } else {
        $tx = getparam('tx', true);
        if (nuem($tx) || substr($tx, 0, 1) != 'y') {
            $dotx = false;
        } else {
            $dotx = true;
        }
        $flds = array('height' => $blk);
        $msg = msgEncode('pplns2', 'pplns2', $flds, $user);
        $rep = sendsockreply('pplns2', $msg, 4);
        if ($rep == false) {
            $ans = array();
        } else {
            $ans = repDecode($rep);
        }
        if ($ans['ERROR'] != null) {
            return '<font color=red size=+1><br>' . $ans['STATUS'] . ': ' . $ans['ERROR'] . '</font>';
        }
        if (!isset($ans['pplns_last'])) {
            return '<font color=red size=+1><br>Partial data returned</font>';
        }
        $reward_sat = $ans['block_reward'];
        $miner_sat = $ans['miner_reward'];
        $ans['miner_sat'] = $miner_sat;
        $data = array('Block' => 'block', 'Block Status' => 'block_status', 'Block Hash' => 'block_hash', 'Block Reward (Satoshis)' => 'block_reward', 'Miner Reward (Satoshis)' => 'miner_sat', 'PPLNS Wanted' => '.diff_want', 'PPLNS Used' => '.diffacc_total', 'Elapsed Seconds' => ',pplns_elapsed', 'Elapsed Time' => '@pplns_elapsed', 'Users' => 'rows', 'Oldest Workinfoid' => 'begin_workinfoid', 'Oldest Time' => 'begin_stamp', 'Oldest Epoch' => 'begin_epoch', 'Block Workinfoid' => 'block_workinfoid', 'Block Time' => 'block_stamp', 'Block Epoch' => 'block_epoch', 'Newest Workinfoid' => 'end_workinfoid', 'Newest Share Time' => 'end_stamp', 'Newest Share Epoch' => 'end_epoch', 'Network Difficulty' => 'block_ndiff', 'PPLNS Factor' => 'diff_times', 'PPLNS Added' => 'diff_add', 'Accepted Share Count' => ',acc_share_count', 'Total Share Count' => ',total_share_count', 'ShareSummary Count' => ',ss_count', 'WorkMarkers Count' => ',wm_count', 'MarkerSummary Count' => ',ms_count');
        $pg = '<br><a href=https://blockchain.info/block-height/';
        $pg .= $ans['block'] . '>Blockchain ' . $ans['block'] . "</a><br>\n";
        if (strlen($ans['marks_status']) > 0) {
            $pg .= '<br><span class=err>';
            $msg = $ans['marks_status'];
            $pg .= str_replace(' ', '&nbsp;', $msg) . "</span><br>\n";
        }
        if (strlen($ans['block_extra']) > 0) {
            $pg .= '<br><span class=err>';
            $msg = $ans['block_status'] . ' - ' . $ans['block_extra'];
            $pg .= str_replace(' ', '&nbsp;', $msg) . "</span><br>\n";
        }
        $pg .= "<br><table cellpadding=0 cellspacing=0 border=0>\n";
        $pg .= '<tr class=title>';
        $pg .= '<td class=dl>Name</td>';
        $pg .= '<td class=dr>Value</td>';
        $pg .= "</tr>\n";
        $i = 0;
        foreach ($data as $dsp => $name) {
            if ($i++ % 2 == 0) {
                $row = 'even';
            } else {
                $row = 'odd';
            }
            $pg .= "<tr class={$row}>";
            $pg .= "<td class=dl>{$dsp}</td>";
            switch ($name[0]) {
                case ',':
                case '.':
                case '@':
                    $nm = substr($name, 1);
                    $fmt = fmtdata($name[0], $ans[$nm]);
                    break;
                default:
                    $fmt = $ans[$name];
                    break;
            }
            if ($dsp == 'Elapsed Seconds') {
                $pl = $ans['diffacc_total'] * pow(2, 32) / $ans['pplns_elapsed'];
                $fmt .= ' ' . dsprate($pl);
            }
            $pg .= "<td class=dr>{$fmt}</td>";
            $pg .= "</tr>\n";
        }
        $pg .= "</table><br><table cellpadding=0 cellspacing=0 border=0>\n";
        $pg .= '<tr class=title>';
        $pg .= '<td class=dl>User</td>';
        $pg .= '<td class=dr>Diff Accepted</td>';
        $pg .= '<td class=dr>%</td>';
        $pg .= '<td class=dr>Avg Hashrate</td>';
        $pg .= '<td class=dr>BTC -0.9%</td>';
        $pg .= '<td class=dr>Address</td>';
        $pg .= "</tr>\n";
        $diffacc_total = $ans['diffacc_total'];
        if ($diffacc_total == 0) {
            $diffacc_total = pow(10, 15);
        }
        $elapsed = $ans['pplns_elapsed'];
        $count = $ans['rows'];
        $tot_pay = 0;
        for ($i = 0; $i < $count; $i++) {
            $diffacc_user = $ans['diffacc:' . $i];
            $diffacc_percent = number_format(100.0 * $diffacc_user / $diffacc_total, 3) . '%';
            $avg_hash = number_format($diffacc_user / $elapsed * pow(2, 32), 0);
            $pay_sat = $ans['amount:' . $i];
            $payaddress = $ans['payaddress:' . $i];
            if ($i % 2 == 0) {
                $row = 'even';
            } else {
                $row = 'odd';
            }
            $pg .= "<tr class={$row}>";
            $pg .= '<td class=dl>' . $ans['user:'******'</td>';
            $pg .= "<td class=dr>{$diffacc_user}</td>";
            $pg .= "<td class=dr>{$diffacc_percent}</td>";
            $pg .= "<td class=dr>{$avg_hash}</td>";
            $pg .= '<td class=dr>' . btcfmt($pay_sat) . '</td>';
            $pg .= "<td class=dr>{$payaddress}</td>";
            $pg .= "</tr>\n";
            $tot_pay += $pay_sat;
        }
        if ($i % 2 == 0) {
            $row = 'even';
        } else {
            $row = 'odd';
        }
        $pg .= "<tr class={$row}>";
        $pg .= '<td class=dl colspan=3></td>';
        $pg .= '<td class=dr></td>';
        $pg .= '<td class=dr>' . btcfmt($tot_pay) . '</td>';
        $pg .= '<td class=dr></td>';
        $pg .= "</tr>\n";
        $pg .= "</table>\n";
        if ($dotx === true) {
            $pg .= calctx($ans, $count, $miner_sat, $diffacc_total);
        }
    }
    return $pg;
}