pool/web/yaamp/modules/explorer/graph.php
Tanguy Pruvot 5be767009d explorer: basic page ruler and enhance diff graph
pool blocks are now displayed on the graph
2016-01-11 16:27:20 +01:00

74 lines
2 KiB
PHP

<?php
$series = array();
$n = 0; $maxdiff = 0.0;
$json = controller()->memcache->get("yiimp-explorer-diff-".$coin->symbol);
if (empty($json)) {
// version is used in multi algo coins
$multiAlgos = versionToAlgo($coin, 0) !== false;
$series['diff'] = array();
$tm = 0;
$remote = new Bitcoin($coin->rpcuser, $coin->rpcpasswd, $coin->rpchost, $coin->rpcport);
for($i = $coin->block_height; $i > max(0, $coin->block_height-500); $i--)
{
$hash = $remote->getblockhash($i);
if(!$hash) continue;
$block = $remote->getblock($hash);
if(!$block) continue;
// only graph PoW blocks
if (!arraySafeval($block,'nonce',0) && !arraySafeval($block,'auxpow',0)) continue;
$n++;
$tm = $block['time'];
$dt = date('Y-m-d H:i:s', $tm);
$diff = floatval($block['difficulty']);
$vers = $block['version'];
$algo = versionToAlgo($coin, $vers);
if (!$multiAlgos) {
$maxdiff = max($diff, $maxdiff);
$series['diff'][$n] = array($dt, $diff, $block['height']);
} else if ($coin->algo == $algo) {
$maxdiff = max($diff, $maxdiff);
$series[$algo][$n] = array($dt, $diff, $block['height']);
}
}
// User blocks
if ($tm) {
$sql = "SELECT id, height, IFNULL(difficulty_user, difficulty) AS diff, time FROM blocks".
" WHERE coin_id=:coin AND algo = :algo AND time >= :tm ORDER BY id";
$rows = dbolist($sql, array(':coin'=>$coin->id, ':algo'=>$coin->algo, ':tm'=>intval($tm)));
$n = 0;
foreach ($rows as $row) {
$diff = floatval($row['diff']);
if ($maxdiff && $diff > ($maxdiff*1.5)) $diff = $maxdiff*1.5;
$tm = $row['time'];
$dt = date('Y-m-d H:i:s', $tm);
$series['user'][$n] = array($dt, $diff, $row['diff'], $row['height']);
$n++;
}
}
$json = '';
foreach ($series as $algo => $data) {
if (empty($data)) continue;
$values = array_values($data);
$json .= json_encode($values).',';
}
$json = rtrim($json, ',');
// memcache the data
controller()->memcache->set("yiimp-explorer-diff-".$coin->symbol, $json, 120);
}
echo "[$json]";