Difficulty

Материал из P2POOL WIKI
Перейти к: навигация, поиск

Сложность блока.

Хэш блока является 256-битным целым числом и может принимать значение от 0 до 2256-1. Значение хэша должно быть меньше 256-битного числа, называемого цель (target), чтобы блок мог быть принят сетью.

Однако, оперировать 256-битным целым достаточно неудобно, поэтому было введено понятие единичной цели, это 256-битное число, в котором первые 32 разряда нули, а остальные единицы. Данная цель принята как сложность, равная 1.

Нетрудно подсчитать, что вероятность того, что случайное 256-битное будет меньше единичной цели составит 1/232 или примерно одна четырехмиллиардная. Соответственно, в среднем надо перебрать 232 хэшей, чтобы найти блок, сложности 1.

Для того же, чтобы найти текущую сложность, надо разделить единичную цель на текущую цель:

Difficulty = target_1 / target

Сложность обычно записывается как число с десятичной точкой. Это безразмерная величина.

Математический смысл сложности состоит в том, насколько меньше вероятность найти корректный блок при одной операции хэширования, чем при сложности равной 1. Например, сложность нахождения блока в сети Bitcoin в момент написания этой статьи составляла 3007383866429,732. Таким образом, вероятность найти блок за одно хэширование составит:

p = 1/(232•D) = 1/(232•3007383866429,732) ≈ 7,74•10-23

Соответственно, математическое ожидание времени нахождения блока пулом:

T = D•232/H = 3007383866429,732•232/6,30•1015 ≈ 2050256 сек (или 23 дня 17 часов 30 минут и 56 секунд)

где T - математическое ожидание времени до блока, D - сложность, H - хэшрейт пула.

Именно так рассчитывается то ожидаемое время до блока, которое показывается в интерфейсе P2Pool. Значение сложности блока как правило отображается на центральной странице P2Pool:

Отображение сложности блока в интерфейче P2Pool


Сложность псевдошар.

Сложность псевдошар имеет аналогичный смысл. Если хэш меньше цели, то псевдошара считается корректной (конечно, если все другие проверки пройдены) и принимается пулом. Очевидно, что их сложность значительно меньше, чем сложность блоков.

Псевдошары служат доказательством проделанной работы майнером по нахождению блока. Работа майнера оценивается следующим образом: сложность псевдошары умножается на 232 и полученное число считается вероятным количеством операций хэширования, проведенным майнером.

Данные числа суммируются для всех псевдошар этого майнера, находящихся в шаречейне, а потом высчитывается его доля от общей работы пула. Соответственно этой доле он получает свою долю вознаграждения при нахождении блока.

Минимальная сложность пула

Как упоминалось в статье про псевдошару, ожидаемое время между нахождением двух псевдошар должно составлять заранее определенную величину, прописанную в коде P2Pool. В случае, если псевдошары находятся слишком часто, это может означать, что мощность пула возросла, пул увеличивает минимальную сложность псевдошары, и наоборот, если псевдошары идут редко, пул уменьшает этот параметр.

Из названия очевидно, что сложность псевдошары в конкретный момент не может быть меньше минимальной сложности пула. Но может быть больше.

Сложность псевдошары для конкретного майнера

Можно было бы назначать всем майнерам сложность псевдошары равную минимальной для пула. Но в этом кроется одна проблема.

Майнеры с большим хэшрейтом совершенно справедливо имеют большее математическое ожидание выручки, так как они вносят больший вклад в нахождение блока. Но, в случае одинаковой для всех сложности, они имеют и более предсказуемые результаты, что не совсем справедливо.

Дело в том, что относительное средне-квадратичное отклонение (чем оно меньше, тем меньше разброс от среднего и тем более предсказуемый результат) прямо пропорционально корню квадратному из сложности и обратно пропорционально корню квадратному из хэшрейта.

Решение, очевидно, в том, чтобы повысить сложность псевдошар для мощных майнеров. Они будут находить псевдошары реже, но каждая из них будет подтверждением большей работы (вспоминаем, что мера работы определяется сложностью). С другой стороны, из-за того, что количество посылаемых в шаречейн псевдошар уменьшится, снизится минимальная сложность пула и результат выплат для мелких майнеров станет более предсказуем.

Сложность стратума

P2Pool работает по протоколу Stratum, в котором предусмотрено выставление сложности для присылаемых шар. Смысл сложности остается тот же самый, что и для блоков и псевдошар, но как правило, сложность стратума значительно меньше, чем сложность для псевдошар. Если майнер находит хэш, который меньше цели (target), вычисленной из сложности стратума, он присылает это решение ноде, к которой подключен. Как правило, сложность выставляется такой, чтобы было найдено несколько шар в минуту.

Например, для ASIC майнера AntMiner S9 в сети BitCoin сложность стратума обычно выставляется около 15000, что эквивалентно примерно 64 триллионов операций хэширования.

Сложность стратума можно посмотреть в интерфейсе ASIC майнера, где она указана в колонке LSDiff, количество принятых результатов в колонке Accepted, количество отвергнутых в колонке Rejected. Для программ майнинга на GPU эти показатели тоже нетрудно найти.

Почему же сложность стратума выставляется меньше, чем сложность псевдошары? Как мы уже выяснили ранее, предсказуемость значений, при заданном хэшрете и времени, тем выше, чем меньше сложность. Для того, чтобы за относительно короткое время собрать статистику по общей производительности майнера надо принимать задания с относительно низкой сложностью.

Статистика по производительности майнера с конкретным адресом высчитывается следующим образом: при поступлении решения, его сложность стратума умножается на 232, таким образом находится среднее количество операций хэширования, произведенное майнером. Все полученные таким образом числа суммируются за последние 10 минут, а потом делятся на 600 (количество секунд в 10 минутах) и таким образом получается производительность в (мега,гига,тера)хэшах в секунду. Для всех просроченных решений (они в колонке Rejected) таким же образом вычисляется проделанная работа, которая делится затем на общую проделанную работу в хэшах. Так вычисляется DoA. Эти показатели отображаются, как правило, на главной странице интерфейса P2Pool. Если майнер не прислал ни одного решения, соответствующего сложности стратума, в течение 10 минут, он пропадает из списка.

На графиках классической статистики ноды P2Pool график хэшрейта майнера вычисляются именно из решений присылаемых по сложности стратума. На изображении указан средний хэшрейт (Mean) общий и Dead, а также проделанная работа (Area) за период графика, в хэшах.

Хэшрейт майнера в классической статистике


Решения присылаемые по сложности стратума, в отличие от обычных пулов, никакой функции, кроме статистической не несут и на выплаты не влияют (кроме, разумеется, случая, когда хэш решения меньше цели для псевдошары и, тем более, блока).

Может возникнуть соблазн уменьшить сложность задания стратума ещё больше и получить более точную статистику и гладкие графики. Однако здесь таится одна опасность.

Дело в том, что слишком частая отправка решений нагружает плату управления ASIC майнера, которая, как правило, не очень производительная, что может снизить производительность майнинга и уменьшить выплаты. Таким образом, выбор сложности стратума представляет собой компромисс между точностью статистических данных и обеспечению приемлемой нагрузки на плату управления.