В документе говорится, что
Точное условие состоит в том, что хэш двойного SHA256 каждого блока, рассматриваемого как 256-битное число, должен быть меньше динамически скорректированного целевого значения, которое на момент написания этой статьи составляет примерно 2^187.
У меня сложилось впечатление, что PoW включает в себя получение некоторого количества ведущих нулей в хеше.
Может кто-нибудь объяснить?
Люди часто говорят, что цель майнинга — получить определенное количество «ведущих нулей», потому что это легко представить, но более точное утверждение состоит в том, что цель — найти x
такое, что int(SHA256(SHA256(x))) < T
для некоторой цели T
, где int( )
означает, что мы интерпретируем 256-битный хэш как 256-битное целое число без знака.
Это почти эквивалентно формулировке «ведущие нули». Если вы думаете о двух шестнадцатеричных 32-байтовых последовательностях, то та, в которой больше начальных нулей, является меньшим числом при интерпретации как целое число.
Например, недавний блок BTC имеет хэш
0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6d
Что меньше цели
0x000000000000000000365a170000000200000000000000000000000000000000
Блок имеет больше нулей впереди, но решетка
0x000000000000000000265a170000000200000000000000000000000000000000
тоже сработало бы, так как оно меньше целевого, несмотря на столько же нулей.
Эфириум использует более сложную функцию PoW, но идея та же: найти входные данные, которые минимизируют результат некоторой односторонней функции. Разница в том, что вместо того, чтобы стремиться к небольшому хэшу блока, ", что вместе с одноразовым номером служит доказательством работы. Это приводит к тому, что хэши блоков выглядят случайными, в отличие от биткойнов, у которых много начальных нулей.
В биткойне SHA256 (SHA256 (x)) называется Hash256, который выдает 256-битный вывод.
Это связано с сохранением согласованных 128 бит безопасности во всем протоколе.
Из этого ответа вы можете увидеть, почему существует динамически настраиваемая цель и причина этой строки:
Добыча
Алгоритм майнинга определяется следующим образом:
def mine(full_size, dataset, header, difficulty): target = zpad(encode_int(2**256 // difficulty), 64)[::-1] from random import randint nonce = randint(0, 2**64) while hashimoto_full(full_size, dataset, header, nonce) > target: nonce = (nonce + 1) % 2**64 return nonce
В блоке Ethereum также нет лидирующих нулей . Вместо этого у Ethereum есть цель, которая похожа на хэш блока Биткойна.
n0unc3
the target is 2^187
«2) Если у нас есть два блока, один с хэшем,0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6d
а другой с хэшем0x000000000000000000265a170000000200000000000000000000000000000000
, было бы нормально выбрать любой из них, верно? другой будет отброшен?Тьяден Хесс