echo "<th align=right>max</th>"; echo "<th align=right>mbtc</th>"; echo "<th align=right>profit</th>"; echo "<th align=right>TTF</th>"; echo "<th align=right>Hash *</th>"; echo "<th align=right>**</th>"; echo "</tr>"; echo "</thead>"; foreach ($list as $coin) { $name = substr($coin->name, 0, 12); $difficulty = Itoa2($coin->difficulty, 3); $price = bitcoinvaluetoa($coin->price); $height = number_format($coin->block_height, 0, '.', ' '); $pool_ttf = $coin->pool_ttf ? sectoa2($coin->pool_ttf) : ''; $reward = round($coin->reward, 3); $btcmhd = mbitcoinvaluetoa(yaamp_profitability($coin)); $pool_hash = yaamp_coin_rate($coin->id); $pool_hash = $pool_hash ? Itoa2($pool_hash) . 'h/s' : ''; show_orders($allorders, $services, $btcmhd); show_services($services, $btcmhd); if (!$coin->auto_ready) { echo "<tr style='opacity: 0.4;'>"; } else { echo "<tr class='ssrow'>"; } echo "<td width=18><img width=16 src='{$coin->image}'></td>"; echo "<td><b><a href='/site/coin?id={$coin->id}'>{$name}</a></b></td>"; echo "<td align=right style='font-size: .8em;'><b>{$reward} {$coin->symbol}</a></td>"; echo "<td align=right style='font-size: .8em;'>{$difficulty}</td>"; if (!empty($coin->errors)) { echo "<td align=right style='font-size: .8em; color: red;' title='{$coin->errors}'>{$height}</td>";
echo "<td><b><a href='/site/coin?id={$coin->id}'>{$coin->name} ({$coin->symbol})</a></b>\n\t\t<br><span style='font-size: .8em'>{$version} ({$coin->symbol2})</span></td>"; echo "<td>{$coin->rpchost}:{$coin->rpcport}"; if ($coin->connections) { echo " ({$coin->connections})"; } echo "<br><span style='font-size: .8em'>{$coin->rpcencoding} <span style='background-color:{$algo_color};'> ({$coin->algo}) </span></span></td>"; $difficulty = Itoa2($coin->difficulty, 3); if (!empty($coin->errors)) { echo "<td align=right style='color: red; font-size: .9em;' title='{$coin->errors}'><b>{$difficulty}</b><br>{$coin->block_height}</td>"; } else { echo "<td align=right style='font-size: .9em'><b>{$difficulty}</b><br>{$coin->block_height}</td>"; } // $network_ttf = $coin->network_ttf? sectoa($coin->network_ttf): ''; // $actual_ttf = $coin->actual_ttf? sectoa($coin->actual_ttf): ''; // $pool_ttf = $coin->pool_ttf? sectoa($coin->pool_ttf): ''; $btcmhd = yaamp_profitability($coin); $btcmhd = mbitcoinvaluetoa($btcmhd); $h = $coin->block_height - 100; $ss1 = dboscalar("select count(*) from blocks where coin_id={$coin->id} and height>={$h} and category!='orphan'"); $ss2 = dboscalar("select count(*) from blocks where coin_id={$coin->id} and height>={$h} and category='orphan'"); $percent_pool1 = $ss1 ? $ss1 . '%' : ''; $percent_pool2 = $ss2 ? $ss2 . '%' : ''; // echo "<td align=right style='font-size: .9em'>$network_ttf<br>$actual_ttf</td>"; // echo "<td align=right style='font-size: .9em'>$pool_ttf<br></td>"; if ($ss1 > 50) { echo "<td align=right style='font-size: .9em'><b>{$btcmhd}</b><br><span style='color: blue;'>{$percent_pool1}</span>"; } else { echo "<td align=right style='font-size: .9em'><b>{$btcmhd}</b><br>{$percent_pool1}"; } echo "<span style='color: red;'> {$percent_pool2}</span></td>"; $owed = dboscalar("select sum(balance) from accounts where coinid={$coin->id}");
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); }