Example #1
0
echo "<th align=right>Miners</th>";
echo "<th align=right>Hashrate</th>";
echo "<th align=right>Bad</th>";
echo "<th></th>";
echo "<th align=right>Blocks</th>";
echo "<th align=right>Diff/Paid</th>";
echo "<th align=right>Balance</th>";
echo "<th align=right>Total Paid</th>";
echo "<th></th>";
echo "</tr>";
echo "</thead><tbody>";
$total_balance = 0;
$total_paid = 0;
$total_unsold = 0;
foreach ($users as $user) {
    $target = yaamp_hashrate_constant();
    $interval = yaamp_hashrate_step();
    $delay = time() - $interval;
    $user_rate = dboscalar("select sum(difficulty) * {$target} / {$interval} / 1000 from shares where valid and time>{$delay} and userid={$user->id}");
    $user_bad = dboscalar("select sum(difficulty) * {$target} / {$interval} / 1000 from shares where not valid and time>{$delay} and userid={$user->id}");
    $percent = $user_rate ? round($user_bad * 100 / $user_rate, 3) : 0;
    $balance = bitcoinvaluetoa($user->balance);
    $paid = dboscalar("select sum(amount) from payouts where account_id={$user->id}");
    $d = datetoa2($user->last_login);
    $miner_count = getdbocount('db_workers', "userid={$user->id}");
    $block_count = getdbocount('db_blocks', "userid={$user->id}");
    $block_diff = $paid ? round(dboscalar("select sum(difficulty) from blocks where userid={$user->id}") / $paid, 3) : '?';
    $paid = bitcoinvaluetoa($paid);
    $user_rate = Itoa2($user_rate);
    $user_bad = Itoa2($user_bad);
    echo "<tr class='ssrow'>";
Example #2
0
function yaamp_pool_rate_pow($algo = null)
{
    if (!$algo) {
        $algo = user()->getState('yaamp-algo');
    }
    $target = yaamp_hashrate_constant($algo);
    $interval = yaamp_hashrate_step();
    $delay = time() - $interval;
    $rate = controller()->memcache->get_database_scalar("yaamp_pool_rate_pow-{$algo}", "select sum(shares.difficulty) * {$target} / {$interval} / 1000 from shares, coins \r\n\t\t\twhere shares.valid and shares.time>{$delay} and shares.algo=:algo and \r\n\t\t\tshares.coinid=coins.id and coins.rpcencoding='POW'", array(':algo' => $algo));
    return $rate;
}
<?php

$percent = 16;
$user = getuserparam(getparam('address'));
if (!$user) {
    return;
}
$algo = getparam('algo');
if (empty($algo)) {
    $algo = user()->getState('yaamp-algo');
}
$target = yaamp_hashrate_constant($algo);
$step = 15 * 60;
$t = time() - 24 * 60 * 60;
$stats = getdbolist('db_hashuser', "time>{$t} and algo=:algo and userid={$user->id} order by time", array(':algo' => $algo));
$averages = array();
echo '[[';
for ($i = $t + $step, $j = 0; $i < time(); $i += $step) {
    if ($i != $t + $step) {
        echo ',';
    }
    $m = 0;
    if ($i + $step >= time()) {
        $m = round(yaamp_user_rate($user->id, $algo) / 1000000, 3);
        //	debuglog("last $m");
    } else {
        if (isset($stats[$j]) && $i > $stats[$j]->time) {
            $m = round($stats[$j]->hashrate / 1000000, 3);
            $j++;
        }
    }
Example #4
0
function BackendStatsUpdate()
{
    //	debuglog(__FUNCTION__);
    //	$t1xx = microtime(true);
    $t = time() - 2 * 60;
    $errors = '';
    $list = getdbolist('db_stratums', "time<{$t}");
    foreach ($list as $stratum) {
        debuglog("stratum {$stratum->algo} terminated");
        $errors .= "{$stratum->algo}, ";
    }
    if (!empty($errors)) {
        send_email_alert('stratums', "stratums restarted {$errors}", "stratums were restarted: {$errors}");
    }
    dborun("delete from stratums where time<{$t}");
    dborun("delete from workers where pid not in (select pid from stratums)");
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    // long term stats
    $t = floor(time() / 60 / 60) * 60 * 60;
    foreach (yaamp_get_algos() as $algo) {
        $pool_rate = yaamp_pool_rate($algo);
        $stats = getdbosql('db_hashstats', "time={$t} and algo=:algo", array(':algo' => $algo));
        if (!$stats) {
            $stats = new db_hashstats();
            $stats->time = $t;
            $stats->hashrate = $pool_rate;
            $stats->algo = $algo;
        } else {
            $percent = 1;
            $stats->hashrate = round(($stats->hashrate * (100 - $percent) + $pool_rate * $percent) / 100);
        }
        $stats->earnings = dboscalar("select sum(amount*price) from blocks where time>{$t} and category!='orphan' and algo=:algo", array(':algo' => $algo));
        $stats->save();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    // short term stats
    $step = 15;
    $t = floor(time() / $step / 60) * $step * 60;
    foreach (yaamp_get_algos() as $algo) {
        $stats = getdbosql('db_hashrate', "time={$t} and algo=:algo", array(':algo' => $algo));
        if (!$stats) {
            $stats = new db_hashrate();
            $stats->time = $t;
            $stats->hashrate = dboscalar("select hashrate from hashrate where algo=:algo order by time desc limit 1", array(':algo' => $algo));
            $stats->hashrate_bad = 0;
            //dboscalar("select hashrate_bad from hashrate where algo=:algo order by time desc limit 1", array(':algo'=>$algo));
            $stats->price = dboscalar("select price from hashrate where algo=:algo order by time desc limit 1", array(':algo' => $algo));
            $stats->rent = dboscalar("select rent from hashrate where algo=:algo order by time desc limit 1", array(':algo' => $algo));
            $stats->algo = $algo;
        }
        $pool_rate = yaamp_pool_rate($algo);
        $stats->hashrate = $pool_rate;
        //round(($stats->hashrate*(100-$percent) + $pool_rate*$percent) / 100);
        $pool_rate_bad = yaamp_pool_rate_bad($algo);
        $stats->hashrate_bad = $pool_rate_bad;
        //round(($stats->hashrate_bad*(100-$percent) + $pool_rate_bad*$percent) / 100);
        if ($stats->hashrate < 1000) {
            $stats->hashrate = 0;
        }
        $t1 = time() - 5 * 60;
        $total_rentable = dboscalar("select sum(difficulty) from shares where valid and extranonce1 and algo=:algo and time>{$t1}", array(':algo' => $algo));
        $total_diff = dboscalar("select sum(difficulty) from shares where valid and algo=:algo and time>{$t1}", array(':algo' => $algo));
        $total_rented = 0;
        if (!$total_diff) {
            $t1 = time() - 15 * 60;
            $total_diff = dboscalar("select sum(difficulty) from shares where valid and algo=:algo and time>{$t1}", array(':algo' => $algo));
        }
        if ($total_diff > 0) {
            $price = 0;
            $rent = 0;
            $list = dbolist("select coinid, sum(difficulty) as d from shares where valid and algo=:algo and time>{$t1} group by coinid", array(':algo' => $algo));
            foreach ($list as $item) {
                if ($item['coinid'] == 0) {
                    if (!$total_rentable) {
                        continue;
                    }
                    $total_rented = $item['d'];
                    $price += $stats->rent * $item['d'] / $total_diff;
                    $rent += $stats->rent * $item['d'] / $total_rentable;
                } else {
                    $coin = getdbo('db_coins', $item['coinid']);
                    if (!$coin) {
                        continue;
                    }
                    $btcghd = yaamp_profitability($coin);
                    $price += $btcghd * $item['d'] / $total_diff;
                    $rent += $btcghd * $item['d'] / $total_diff;
                }
            }
            $percent = 33;
            $rent = max($price, ($stats->rent * (100 - $percent) + $rent * $percent) / 100);
            $target = yaamp_hashrate_constant($algo);
            $interval = yaamp_hashrate_step();
            $aa = $total_rentable * $target / $interval / 1000;
            $bb = dboscalar("select sum(speed) from jobs where active and ready and price>{$rent} and algo=:algo", array(':algo' => $algo));
            if ($total_rented * 1.3 < $total_rentable || $bb > $aa) {
                $rent += $price * YAAMP_FEES_RENTING / 100;
            } else {
                $rent -= $price * YAAMP_FEES_RENTING / 100;
            }
            $stats->price = $price;
            $stats->rent = $rent;
        } else {
            $coin = getdbosql('db_coins', "enable and auto_ready and algo=:algo order by index_avg desc", array(':algo' => $algo));
            if ($coin) {
                $btcghd = yaamp_profitability($coin);
                $stats->price = $btcghd;
                $stats->rent = $stats->price + $stats->price * YAAMP_FEES_RENTING / 100;
            }
        }
        if (YAAMP_LIMIT_ESTIMATE) {
            $t1 = time() - 24 * 60 * 60;
            $avg = dboscalar("select avg(price) from hashrate where time>{$t1} and algo=:algo", array(':algo' => $algo));
            if ($avg) {
                $stats->price = min($stats->price, $avg * 1.5);
            }
        }
        $stats->difficulty = dboscalar("select sum(difficulty) from coins where enable and auto_ready and algo=:algo", array(':algo' => $algo));
        $stats->save();
    }
    //////////////////////////////////////////////////////////////
    $step = 15;
    $t = floor(time() / $step / 60) * $step * 60;
    $btc = getdbosql('db_coins', "symbol='BTC'");
    $topay = dboscalar("select sum(balance) from accounts where coinid={$btc->id}");
    //here: take other currencies too
    $margin = $btc->balance - $topay;
    $balances = dboscalar("select sum(balance) from balances");
    $onsell = dboscalar("select sum(amount*bid) from orders");
    $immature = dboscalar("select sum(amount*price) from earnings where status=0");
    $confirmed = dboscalar("select sum(amount*price) from earnings where status=1");
    $wallets = dboscalar("select sum(balance*price) from coins where enable and symbol!='BTC'");
    $renters = dboscalar("select sum(balance) from renters");
    $mints = dboscalar("select sum(mint*price) from coins where enable");
    $off = $mints - $immature;
    //	debuglog("mint $mints $immature $off");
    $total_profit = $btc->balance + $balances + $onsell + $wallets - $topay - $renters;
    $stats = getdbosql('db_stats', "time={$t}");
    if (!$stats) {
        $stats = new db_stats();
        $stats->time = $t;
    }
    $stats->profit = $total_profit;
    $stats->wallet = $btc->balance;
    $stats->wallets = $wallets;
    $stats->margin = $margin;
    $stats->balances = $balances;
    $stats->onsell = $onsell;
    $stats->immature = $immature;
    $stats->waiting = $confirmed;
    $stats->renters = $renters;
    $stats->save();
    /////////////////////////////////////////////////////////////////////////////
    foreach (yaamp_get_algos() as $algo) {
        $factor = yaamp_get_algo_norm($algo);
        $dbalgo = getdbosql('db_algos', "name='{$algo}'");
        if (!$dbalgo) {
            $dbalgo = new db_algos();
            $dbalgo->name = $algo;
        }
        $dbalgo->profit = dboscalar("select price from hashrate where algo=:algo order by time desc limit 1", array(':algo' => $algo));
        $dbalgo->rent = dboscalar("select rent from hashrate where algo=:algo order by time desc limit 1", array(':algo' => $algo));
        $dbalgo->factor = $factor;
        $dbalgo->save();
    }
    //	$d1 = microtime(true) - $t1xx;
    //	controller()->memcache->add_monitoring_function(__METHOD__, $d1);
}