Exemple #1
0
function dopplns($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('pplns') . "\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, 'allow_aged' => 'Y');
        if ($blk > 334106) {
            $flds['diff_times'] = '5';
        }
        $msg = msgEncode('pplns', 'pplns', $flds, $user);
        $rep = sendsockreply('pplns', $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 = round($reward_sat * 0.991);
        $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', '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";
        }
        if (strlen($ans['share_status']) > 0) {
            $pg .= '<br><span class=err>';
            $msg = $ans['share_status'] . " - Can't be paid out yet";
            $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 '.':
                    $nm = substr($name, 1);
                    $fmt = fmtdata($name[0], $ans[$nm]);
                    break;
                default:
                    $fmt = $ans[$name];
                    break;
            }
            $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_user:'******'%';
            $avg_hash = number_format($diffacc_user / $elapsed * pow(2, 32), 0);
            $pay_sat = floor($miner_sat * $diffacc_user / $diffacc_total);
            $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;
}
Exemple #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;
}
Exemple #3
0
function doworker($data, $user)
{
    $title = '';
    $pg = worktable();
    $totshare = 0;
    $totdiff = 0;
    $totshrate = 0;
    $totinvalid = 0;
    $totrate = 0;
    $offset = 0;
    $blockacc = 0;
    $blockreward = 0;
    $instances = 0;
    $pg .= worktitle($data, $user);
    $pg .= workuser($data, $user, $offset, $totshare, $totdiff, $totshrate, $totinvalid, $totrate, $blockacc, $blockreward, false, true, true, $title, $instances);
    $pg .= worktotal($offset, $totshare, $totdiff, $totshrate, $totinvalid, $totrate, $blockacc, $blockreward, $instances);
    if (false && $blockacc > 0 && $blockreward > 0) {
        $btc = btcfmt($totdiff / $blockacc * $blockreward);
        $pg .= '<tr><td colspan=8 class=dc>';
        $pg .= "<br>Payout est if block found at 100%: ~{$btc} BTC";
        $pg .= '</td></tr>';
    }
    $pg .= "</table>\n";
    $pg .= "<script type='text/javascript'>\n";
    $pg .= "sotc('worksrt','srtrate');</script>\n";
    return "<h1>Workers{$title}</h1>" . $pg;
}
Exemple #4
0
function dopayments($data, $user)
{
    $btc = 'https://www.blocktrail.com/BTC/address/';
    $btcn = 'blocktrail';
    $addr1 = '1KzFJddTvK9TQWsmWFKYJ9fRx9QeSATyrT';
    $addr2 = '16dRhawxuR3BmdmkzdzUdgEfGAQszgmtbc';
    $addr3 = '1N6LrEDiHuFwSyJYj2GedZM2FGk7kkLjn';
    $addr4 = '1CVVn6sC46aZdokEnU1LThmi8WsMV4qzgh';
    $addr5 = '13pucx6gHP2vyBLc88QfcGivjkhK63PeVg';
    $pg = '<h1>Payments</h1>';
    $pg .= "The payment transactions on {$btcn} are here:";
    $pg .= " <a href='{$btc}{$addr1}' target=_blank>BTCa</a>,";
    $pg .= " <a href='{$btc}{$addr2}' target=_blank>BTCb</a>,";
    $pg .= " <a href='{$btc}{$addr3}' target=_blank>BTCc</a>,";
    $pg .= " <a href='{$btc}{$addr4}' target=_blank>BTCd</a> and";
    $pg .= " <a href='{$btc}{$addr5}' target=_blank>BTCe</a><br>";
    $pg .= "The payments below don't yet show when they have been sent.<br>";
    $pg .= "Dust payments below 0.00010000 BTC are not sent out yet.<br><br>";
    $ans = getPayments($user);
    $pg .= "<table cellpadding=0 cellspacing=0 border=0>\n";
    $pg .= '<thead><tr class=title>';
    $pg .= '<td class=dl>Block</td>';
    $pg .= '<td class=dl>Address</td>';
    $pg .= '<td class=dl>Status</td>';
    $pg .= '<td class=dr>BTC</td>';
    $pg .= '<td class=dl></td>';
    $pg .= "</tr></thead>\n";
    if ($ans['STATUS'] == 'ok') {
        $pg .= '<tbody>';
        $all = array();
        $count = $ans['rows'];
        for ($i = 0; $i < $count; $i++) {
            $all[] = array('payoutid' => $ans['payoutid:' . $i], 'height' => $ans['height:' . $i], 'payaddress' => $ans['payaddress:' . $i], 'amount' => $ans['amount:' . $i], 'paydate' => $ans['paydate:' . $i]);
        }
        usort($all, 'sortheight');
        $hasdust = false;
        for ($i = 0; $i < $count; $i++) {
            if ($i % 2 == 0) {
                $row = 'even';
            } else {
                $row = 'odd';
            }
            $pg .= "<tr class={$row}>";
            $pg .= '<td class=dl>' . $all[$i]['height'] . '</td>';
            $pg .= '<td class=dl>' . $all[$i]['payaddress'] . '</td>';
            $pg .= '<td class=dl>&nbsp;</td>';
            $amount = $all[$i]['amount'];
            if ($amount < '10000') {
                $dust = '<span class=st1>*</span>';
                $hasdust = true;
            } else {
                $dust = '&nbsp;';
            }
            $pg .= '<td class=dr>' . btcfmt($amount) . '</td>';
            $pg .= "<td class=dl>{$dust}</td>";
            $pg .= "</tr>\n";
        }
        $pg .= '</tbody>';
        if ($hasdust === true) {
            $pg .= '<tfoot><tr><td colspan=5 class=dc>';
            $pg .= '<font size=-1><span class=st1>*</span> ';
            $pg .= 'Dust payments are not automatically sent out';
            $pg .= '</font></td></tr></tfoot>';
        }
    }
    $pg .= "</table>\n";
    return $pg;
}
Exemple #5
0
function dopercent($data, $user)
{
    $pg = '<h1>Address Percents</h1>';
    $pg .= "<table callpadding=0 cellspacing=0 border=0>\n";
    $totshare = 0;
    $totdiff = 0;
    $totinvalid = 0;
    $totrate = 0;
    $offset = 0;
    $blockacc = 0;
    $blockreward = 0;
    $pg .= pertitle($data, $user);
    $pg .= peruser($data, $user, $offset, $totshare, $totdiff, $totinvalid, $totrate, $blockacc, $blockreward, true);
    $pg .= pertotal($offset, $totshare, $totdiff, $totinvalid, $totrate, $blockacc, $blockreward);
    if ($blockacc > 0 && $blockreward > 0) {
        $btc = btcfmt($totdiff / $blockacc * $blockreward);
        $pg .= '<tr><td colspan=9 class=dc>';
        $pg .= "<br>Payout est if block found at 100%: ~{$btc} BTC";
        $pg .= '</td></tr>';
    }
    $pg .= "</table>\n";
    return $pg;
}
Exemple #6
0
function doblocks($data, $user)
{
    $blink = '<a href=https://www.blocktrail.com/BTC/block/';
    $pg = '';
    if ($user === null) {
        $ans = getBlocks('Anon');
    } else {
        $ans = getBlocks($user);
    }
    if (nuem(getparam('csv', true))) {
        $wantcsv = false;
    } else {
        $wantcsv = true;
    }
    if ($wantcsv === false) {
        if ($ans['STATUS'] == 'ok' and isset($ans['s_rows']) and $ans['s_rows'] > 0) {
            $pg .= '<h1>Block Statistics</h1>';
            $pg .= "<table callpadding=0 cellspacing=0 border=0>\n";
            $pg .= "<tr class=title>";
            $pg .= "<td class=dl>Description</td>";
            $pg .= "<td class=dr>Time</td>";
            $pg .= "<td class=dr>MeanTx%</td>";
            $pg .= "<td class=dr>Diff%</td>";
            $pg .= "<td class=dr>Mean%</td>";
            $pg .= "<td class=dr>CDF[Erl]</td>";
            $pg .= "<td class=dr>Luck%</td>";
            $pg .= "</tr>\n";
            $since = $data['info']['lastblock'];
            $count = $ans['s_rows'];
            for ($i = 0; $i < $count; $i++) {
                if ($i % 2 == 0) {
                    $row = 'even';
                } else {
                    $row = 'odd';
                }
                $desc = $ans['s_desc:' . $i];
                $age = daysago($since - $ans['s_prevcreatedate:' . $i]);
                $diff = number_format(100 * $ans['s_diffratio:' . $i], 2);
                $mean = number_format(100 * $ans['s_diffmean:' . $i], 2);
                $cdferl = $ans['s_cdferl:' . $i];
                list($fg, $bg) = erlcolour($cdferl);
                $cdferldsp = "<font color={$fg}>" . number_format($cdferl, 4) . '</font>';
                $bg = " bgcolor={$bg}";
                $luck = number_format(100 * $ans['s_luck:' . $i], 2);
                $txm = number_format(100 * $ans['s_txmean:' . $i], 1);
                $pg .= "<tr class={$row}>";
                $pg .= "<td class=dl>{$desc} Blocks</td>";
                $pg .= "<td class=dr>{$age}</td>";
                $pg .= "<td class=dr>{$txm}%</td>";
                $pg .= "<td class=dr>{$diff}%</td>";
                $pg .= "<td class=dr>{$mean}%</td>";
                $pg .= "<td class=dr{$bg}>{$cdferldsp}</td>";
                $pg .= "<td class=dr>{$luck}%</td>";
                $pg .= "</tr>\n";
            }
            $pg .= "</table>\n";
        }
        if ($ans['STATUS'] == 'ok') {
            $count = $ans['rows'];
            if ($count == 1) {
                $num = '';
                $s = '';
            } else {
                $num = " {$count}";
                $s = 's';
            }
            $pg .= "<h1>Last{$num} Block{$s}</h1>";
        } else {
            $pg .= '<h1>Blocks</h1>';
        }
        list($fg, $bg) = pctcolour(25.0);
        $pg .= "<span style='background:{$bg}; color:{$fg};'>";
        $pg .= "&nbsp;Green&nbsp;</span>&nbsp;";
        $pg .= 'is good luck. Lower Diff% and brighter green is better luck.<br>';
        list($fg, $bg) = pctcolour(100.0);
        $pg .= "<span style='background:{$bg}; color:{$fg};'>";
        $pg .= "&nbsp;100%&nbsp;</span>&nbsp;";
        $pg .= 'is expected average.&nbsp;';
        list($fg, $bg) = pctcolour(400.0);
        $pg .= "<span style='background:{$bg}; color:{$fg};'>";
        $pg .= "&nbsp;Red&nbsp;</span>&nbsp;";
        $pg .= 'is bad luck. Higher Diff% and brighter red is worse luck.<br><br>';
        $pg .= "<table callpadding=0 cellspacing=0 border=0>\n";
        $pg .= "<tr class=title>";
        $pg .= "<td class=dr>#</td>";
        $pg .= "<td class=dl>Height</td>";
        if ($user !== null) {
            $pg .= "<td class=dl>Who</td>";
        }
        $pg .= "<td class=dr>Block Reward</td>";
        $pg .= "<td class=dc>When</td>";
        $pg .= "<td class=dr>Status</td>";
        $pg .= "<td class=dr>Diff</td>";
        $pg .= "<td class=dr>Diff%</td>";
        $pg .= "<td class=dr>CDF</td>";
        $pg .= "<td class=dr>B</td>";
        $pg .= "</tr>\n";
    }
    $blktot = 0;
    $nettot = 0;
    $i = 0;
    $cnt = 0;
    $orph = false;
    $csv = "Sequence,Height,Status,Timestamp,DiffAcc,NetDiff,Hash\n";
    if ($ans['STATUS'] == 'ok') {
        $count = $ans['rows'];
        for ($i = 0; $i < $count; $i++) {
            if ($i % 2 == 0) {
                $row = 'even';
            } else {
                $row = 'odd';
            }
            $hi = $ans['height:' . $i];
            $hifld = "{$blink}{$hi}>{$hi}</a>";
            $ex = '';
            $conf = $ans['confirmed:' . $i];
            $stat = $ans['status:' . $i];
            $inf = $ans['info:' . $i];
            $tt = '';
            if ($conf == 'O' or $conf == 'R') {
                $ex = 's';
                $orph = true;
                $seq = '';
                $nn = $cnt;
                if ($conf == 'R') {
                    addTips();
                    $in = explode(':', $inf, 2);
                    if (trim($in[0]) != '') {
                        $stat = trim($in[0]);
                    }
                    if (count($in) < 2 or trim($in[1]) == '') {
                        $tip = 'Share diff was VERY close<br>';
                        $tip .= 'so we tested it,<br>';
                        $tip .= "but it wasn't worthy<br>";
                    } else {
                        $tip = str_replace('+', '<br>', trim($in[1]));
                    }
                    $tt = "<span class=q onclick='tip(\"btip{$i}\",6000)'>";
                    $tt .= '?</span><span class=tip0>';
                    $tt .= "<span class=notip id=btip{$i}>";
                    $tt .= "{$tip}</span></span>";
                }
            } else {
                $seq = $ans['seq:' . $i];
                $nn = ++$cnt;
            }
            if ($conf == '1') {
                if (isset($data['info']['lastheight'])) {
                    $confn = 1 + $data['info']['lastheight'] - $hi;
                    $stat = '+' . $confn . ' Confirms';
                } else {
                    $stat = 'Conf';
                }
            }
            $stara = '';
            if ($conf == 'O' or $conf == 'R') {
                $stara = '<span class=st1>*</span>';
            }
            if (isset($ans['statsconf:' . $i])) {
                if ($ans['statsconf:' . $i] == 'Y') {
                    $approx = '';
                } else {
                    $approx = '~';
                }
            } else {
                $approx = '';
            }
            $diffacc = $ans['diffacc:' . $i];
            $acc = number_format($diffacc, 0);
            $netdiff = $ans['netdiff:' . $i];
            $diffratio = $ans['diffratio:' . $i];
            $cdf = $ans['cdf:' . $i];
            $luck = $ans['luck:' . $i];
            if ($diffratio > 0) {
                $pct = 100.0 * $diffratio;
                list($fg, $bg) = pctcolour($pct);
                $bpct = "<font color={$fg}>{$approx}" . number_format($pct, 3) . '%</font>';
                $bg = " bgcolor={$bg}";
                $blktot += $diffacc;
                if ($conf != 'O' and $conf != 'R') {
                    $nettot += $netdiff;
                }
                $cdfdsp = number_format($cdf, 3);
            } else {
                $bg = '';
                $bpct = '?';
                $cdfdsp = '?';
            }
            if ($wantcsv === false) {
                $pg .= "<tr class={$row}>";
                $pg .= "<td class=dr{$ex}>{$seq}</td>";
                $pg .= "<td class=dl{$ex}>{$hifld}</td>";
                if ($user !== null) {
                    $pg .= "<td class=dl{$ex}>" . htmlspecialchars($ans['workername:' . $i]) . '</td>';
                }
                $pg .= "<td class=dr{$ex}>" . btcfmt($ans['reward:' . $i]) . '</td>';
                $pg .= "<td class=dl{$ex}>" . utcd($ans['firstcreatedate:' . $i]) . '</td>';
                $pg .= "<td class=dr{$ex}>{$tt}{$stat}</td>";
                $pg .= "<td class=dr>{$stara}{$approx}{$acc}</td>";
                $pg .= "<td class=dr{$bg}>{$bpct}</td>";
                $pg .= "<td class=dr>{$cdfdsp}</td>";
                $pg .= "<td class=dr>{$nn}</td>";
                $pg .= "</tr>\n";
            } else {
                $csv .= "{$seq},";
                $csv .= "{$hi},";
                $csv .= "\"{$stat}\",";
                $csv .= $ans['firstcreatedate:' . $i] . ',';
                $csv .= "{$diffacc},";
                $csv .= "{$netdiff},";
                $csv .= $ans['blockhash:' . $i] . "\n";
            }
        }
    }
    if ($wantcsv === true) {
        echo $csv;
        exit(0);
    }
    if ($orph === true) {
        $pg .= '<tr><td colspan=';
        if ($user === null) {
            $pg .= '7';
        } else {
            $pg .= '8';
        }
        $pg .= ' class=dc><font size=-1><span class=st1>*</span>';
        $pg .= 'Orphans/Rejects count as shares but not as a block in calculations';
        $pg .= '</font></td></tr>';
    }
    $pg .= "</table>\n";
    return $pg;
}