From 5f07675ff2d234b6658d2600ba234d8b1d053423 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Mon, 28 Apr 2014 10:38:01 +0200 Subject: [PATCH] This might be more correct calculation. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- contrib/chash/chash.php | 90 ++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 51 deletions(-) diff --git a/contrib/chash/chash.php b/contrib/chash/chash.php index d41a45ba..6dc0eff3 100644 --- a/contrib/chash/chash.php +++ b/contrib/chash/chash.php @@ -3,7 +3,7 @@ error_reporting(E_ALL | E_STRICT); define('HASH_ALGO', MHASH_RIPEMD320); define('BLOCK_SIZE', 1000); -define('NONCE_INCREMENT', 1.0); +define('NONCE_INCREMENT', 0.00001); define('START_TIME', microtime(TRUE)); /** @@ -181,17 +181,6 @@ function calculateNonce ($nonce) { return $newNonce; } -/** - * Calculates current block - * - * @return $blockSize Block size - * @todo This needs improvement - */ -function getBlockSize () { - // For now only a constant block size - return BLOCK_SIZE; -} - /* * Calculate "genesis" hashes, please note that these "genesis strings" are now * known to the public as you can read them here in source code and therefore I @@ -263,10 +252,7 @@ while (TRUE) { // Time waited for a good block again (no iteration) $timeBadHashes = 0; - while ($hashesPerBlock <= getBlockSize()) { - // Init counter - $iter = 0; - + while ($hashesPerBlock <= BLOCK_SIZE) { // Create hash from modulaHash ("genesis hash") and nonce $nonceHash = doubleHashString($modulaHash . $nonce); @@ -274,19 +260,37 @@ while (TRUE) { $sumNonce = calculateSumFromHash($nonceHash); $sumModula = calculateSumFromHash($modulaHash); + // Init counter + $iter = 0; + // Now start the "mining" ... $timeHash = microtime(TRUE); - while ($sumNonce <= $sumModula) { - // Calculate sums - $sumNonce = calculateSumFromHash($nonceHash); - $sumModula = calculateSumFromHash($modulaHash); - + while ($sumNonce >= $sumModula) { // Calculate new nonce $nonce = calculateNonce($nonce); // And hash again $nonceHash = doubleHashString($modulaHash . $nonce); + // Calculate sums + $sumNonce = calculateSumFromHash($nonceHash); + //print('hashesPerBlock=' . $hashesPerBlock . PHP_EOL); + + // Time spend in loop + $testTime = abs(microtime(TRUE) - $timeDisplay); + + // Calculate hashrate/sec + $hashrate = 1 / $testTime * $iter * 2 + 2; + + // Only every second + if ($testTime >= 1) { + // Display hash rate + print ('hashesPerBlock=' . $hashesPerBlock . ',hashrate=' . $hashrate . ' hashes/sec.' . PHP_EOL); + + // Reset timer + $timeDisplay = microtime(TRUE); + } // END - if + // Next round $iter++; //print ('nonce=' . $nonce . ',iter=' . $iter . PHP_EOL); @@ -295,37 +299,27 @@ while (TRUE) { //print ('sumModula=' . $sumModula . PHP_EOL); } // END - while + // Add amount of hashes to block (double-hash) + $hashesPerBlock += $iter * 2 + 2; + // If the iteration is zero, then no hash is found if ($iter == 0) { // Bad block found $timeBadHashes += abs(microtime(TRUE) - $timeHash); + // And next round + //print('bad:nonce=' . $nonce . PHP_EOL); + // Nothing found, so calculate new nonce $nonce = calculateNonce($nonce); - - // And next round continue; } // END - if - // Add amount of hashes to block (double-hash) - $hashesPerBlock += $iter * 2 + 2; - - // Time spend in loop - $testTime = abs(microtime(TRUE) - $timeDisplay); - - // Only every second - if ($testTime >= 1) { - // Calculate hashrate/sec - $timeHash = abs(microtime(TRUE) - $timeHash); - $hashrate = 1 / $timeHash * $iter * 2 + 2; - print ('hashesPerBlock=' . $hashesPerBlock . ',hashrate=' . $hashrate . ' hashes/sec.' . PHP_EOL); - - // Reset timer - $timeDisplay = microtime(TRUE); - } // END - if - // Found hash: //print ('nonceHash=' . $nonceHash .',iter=' . $iter . PHP_EOL); + + // Use nonceHash as next modula hash + $modulaHash = $nonceHash; } // END - while // Time taken for one block @@ -333,29 +327,23 @@ while (TRUE) { //print ('calculateSumFromHash(modulaHash)=' . calculateSumFromHash($modulaHash) . PHP_EOL); //print ('calculateSumFromHash(nonceHash)=' . calculateSumFromHash($nonceHash) . PHP_EOL); - // Is the hash rate unset? - if ($hashrate == 0) { - // Then calculate it again - $hashrate = 1 / $timeBlock * $iter * 2 + 2; - } // END - if - // Calculate reward - $reward = abs($timeBlock - $timeBadHashes) / $hashrate * $hashesPerBlock / getBlockSize() * 1000; - print ('timeBlock=' . $timeBlock . ',timeBadHashes=' . $timeBadHashes . ',hashesPerBlock=' . $hashesPerBlock .',reward=' . $reward . PHP_EOL); + $reward = abs($timeBlock - $timeBadHashes) / $hashrate * $hashesPerBlock / BLOCK_SIZE * 1000; + //print ('timeBlock=' . $timeBlock . ',timeBadHashes=' . $timeBadHashes . ',hashesPerBlock=' . $hashesPerBlock .',reward=' . $reward . PHP_EOL); // Block completed $totalHashes += $hashesPerBlock; $totalBlocks++; $hashesPerBlock = 0; - // Use nonceHash as next modula hash - $modulaHash = $nonceHash; + // Calculate new nonce + $nonce = calculateNonce($nonce); // Add reward to total $totalReward += $reward; // Calculate average block value - $blockValue = $totalReward / $totalBlocks * $totalHashes / (getBlockSize() * $totalBlocks); + $blockValue = $totalReward / $totalBlocks * $totalHashes / (BLOCK_SIZE * $totalBlocks); // Calculate reward per hour (= 3600 seconds) $rewardPerHour = $totalReward / abs(microtime(TRUE) - START_TIME) * 3600; -- 2.30.2