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'>";
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++; } }
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); }