Bitcoin Forum
November 01, 2024, 11:37:36 AM *
News: Bitcoin Pumpkin Carving Contest
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Вычисление сложности имеющейся шары  (Read 1012 times)
ntking (OP)
Newbie
*
Offline Offline

Activity: 16
Merit: 0


View Profile WWW
March 27, 2014, 02:35:03 PM
Last edit: March 27, 2014, 03:44:41 PM by ntking
 #1

Все уже обыскал - нигде не нашел. Если не заметил очевидное - извините.
Собственно вопрос:
Есть шара, поступившая на пул: 0064670f или 0006e02d
Как вычислить ее сложность? По какой формуле? Ведь майнер, тот же bfgminer, как-то определил ее сложность, значит есть алгоритм. Очевидно, что она сложностью > 256, но какой именно?
Если будет пример на PHP - это будет просто супер!

Пример вычисления сложности хеша в p2pool:
Hash: 0000000000068b7e6f8636683b1e5dca8ef15e13f219bb2d9ac8ea73501a4247
Difficulty: 9170.497780453901

Т.е. пул с легкостью определил сложность хеша = 9.17k. Как?

Что-то нашел на javascript, но мне это не помогло, т.к. нужен пример на PHP:
Code:
function target_to_difficulty(target) { return (0xffff0000 * Math.pow(2, 256-64) + 1)/(target + 1); }
b.append('p').text('Difficulty: ' + target_to_difficulty(share.share_data.target));

P.S. Визуально я понимаю, что чем больше нулей слева направо - тем выше сложность.
Xtc
Legendary
*
Offline Offline

Activity: 1973
Merit: 1028


;u


View Profile WWW
March 27, 2014, 06:45:32 PM
 #2

Это для форка? В форках расчет сложности может отличаться, как в лайткойне например:
Quote
, в лайткоинах сложность отображается криво из-за узаконенного бага. Для получения реального значения нужно умножать на 65536.
про две сложности лайткоина тут https://forum.btcsec.com/index.php?/topic/1106-slozhnost-shary/

Для биткойна вот формулы на php, используй на свой страх:
Code:
$shara = 0x0000000000068b7e6f8636683b1e5dca8ef15e13f219bb2d9ac8ea73501a4247;
echo (pow(2,256))/($shara+1); //diff 43006778181236

Code:
$shara = 0x0064670f;
echo (pow(2,256-224))/($shara+1); //diff 652.73

Code:
$shara = 0xFFFFFFFF;
echo (pow(2,256-224))/($shara+1); //diff 1

Запусти и сравни с результатами которые cgminer показывает.
ntking (OP)
Newbie
*
Offline Offline

Activity: 16
Merit: 0


View Profile WWW
March 27, 2014, 07:55:13 PM
Last edit: March 28, 2014, 08:00:27 AM by ntking
 #3

Спасибо Вам большое, Ваш пост очень помог! Теперь еще бы оптимизировать последнюю строку, а то по сравнению со мной индийцы нервно курят в углу со своим кодом:
Code:
	$hash = 0000000000068b7e6f8636683b1e5dca8ef15e13f219bb2d9ac8ea73501a4247;
$shara = substr($hash, 8, 8);
$diffshara =(pow(2,256-224))/("0x".$shara+1);
if ($diffshara < 1000) {$diffshara = floor($diffshara);} elseif (($diffshara > 999) && ($diffshara < 10000)) {$diffshara = round($diffshara / 1000, 2)."k";}elseif (($diffshara > 9999) && ($diffshara < 100000)) {$diffshara = round($diffshara / 1000, 1)."k";} // и так далее
Есть мысли или тут без моей галиматьи в последней строке никак?

P.S. "Тут я выругался матом"! Накатал целую поэму, а форум написал что-то насчет 360 секунд и похерил сообщение(((( "Назад" не помогло! Изложу вкратце.
Xtc
Legendary
*
Offline Offline

Activity: 1973
Merit: 1028


;u


View Profile WWW
March 27, 2014, 10:30:44 PM
 #4

Это к биткойну то не относится
Code:
if ($diffshara < 1000) {$diffshara = floor($diffshara);}
elseif($diffshara>1000000000000) {$diffshara = round(($diffshara/1000000000000),1).'T';}
elseif($diffshara>1000000000) {$diffshara = round(($diffshara/1000000000),1).'B';}
elseif($diffshara>1000000) {$diffshara = round(($diffshara/1000000),1).'M';}
elseif($diffshara>1000) {$diffshara = round(($diffshara/1000),1).'k';}
ntking (OP)
Newbie
*
Offline Offline

Activity: 16
Merit: 0


View Profile WWW
March 28, 2014, 08:28:23 AM
Last edit: March 28, 2014, 10:54:48 AM by ntking
 #5

Это к биткойну то не относится
Code:
if ($diffshara < 1000) {$diffshara = floor($diffshara);}
elseif($diffshara>1000000000000) {$diffshara = round(($diffshara/1000000000000),1).'T';}
elseif($diffshara>1000000000) {$diffshara = round(($diffshara/1000000000),1).'B';}
elseif($diffshara>1000000) {$diffshara = round(($diffshara/1000000),1).'M';}
elseif($diffshara>1000) {$diffshara = round(($diffshara/1000),1).'k';}
Да Вы правы, не относится. В любом случае Ваш подход "на уменьшение" мне понравится и я его применил. Все работает отлично, Спасибо Большое.
Code:
	if ($diffshara < 1000) {$diffshara = floor($diffshara);
} elseif ($diffshara > 99999999){$diffshara = round($diffshara / 1000000, 0)."M";
} elseif ($diffshara > 9999999) {$diffshara = round($diffshara / 1000000, 1)."M";
} elseif ($diffshara > 999999) {$diffshara = round($diffshara / 1000000, 2)."M";
} elseif ($diffshara > 99999) {$diffshara = round($diffshara / 1000, 0)."k";
} elseif ($diffshara > 9999) {$diffshara = round($diffshara / 1000, 1)."k";
} elseif ($diffshara > 999) {$diffshara = round($diffshara / 1000, 2)."k";}

Может для Вас будет нетрудно еще кое чем помочь?

Дано: отрезок времени, Diff шар, кол-во шар.
Нужно узнать: скорость генерации.

К примеру: 120 сек, 128, 5шт, как узнать скорость генерации. Я в данный момент усиленно гуглю, но скорее всего это очень просто.
Quote
Мб получается: 128 * 5 = 640 (Diff 1)
за 120сек 640 решений Diff 1, т.е. 5.33 решений в  1сек
Есть предположение, что должно получиться 23.06GH/s, но как получить эту цифру (если она правильная) - не знаю. Получил я ее простым практическим (грубым) вычислением необходимой скорости генерации для получения 1-го решения в 1 секунду = 4327.2MH/s
Xtc
Legendary
*
Offline Offline

Activity: 1973
Merit: 1028


;u


View Profile WWW
March 28, 2014, 10:09:43 AM
 #6

Ты почти правильно подобрал, правильное значение 4.295Gh/s Smiley Вот теорию нагуглил
Quote
Сколько хешей необходимо, чтобы найти шару?
В среднем, одна шара может быть найдена каждые 2^32, или 4.295 миллиарда расчётных хешей. При скорости в 1 Mхеш/с можно находить шару практически каждые 72 минуты.
http://ru.bitcoinwiki.org/FAQ:_Майнинг_в_пулах
ntking (OP)
Newbie
*
Offline Offline

Activity: 16
Merit: 0


View Profile WWW
March 28, 2014, 11:01:17 AM
Last edit: March 30, 2014, 02:04:47 PM by ntking
 #7

Ты почти правильно подобрал, правильное значение 4.295Gh/s Smiley Вот теорию нагуглил
Quote
Сколько хешей необходимо, чтобы найти шару?
В среднем, одна шара может быть найдена каждые 2^32, или 4.295 миллиарда расчётных хешей. При скорости в 1 Mхеш/с можно находить шару практически каждые 72 минуты.
http://ru.bitcoinwiki.org/FAQ:_Майнинг_в_пулах
Ну я ж практически подобрал скорость)) А теоретически получилось 2^32=4294967296H/s Спасибо за помощь!


P.S. Занимаюсь вебмордой к пулу, отсюда и такие вопросы.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!