Что такое цель 2^187 в официальном документе Ethereum по отношению к PoW в биткойнах?

В документе говорится, что

Точное условие состоит в том, что хэш двойного SHA256 каждого блока, рассматриваемого как 256-битное число, должен быть меньше динамически скорректированного целевого значения, которое на момент написания этой статьи составляет примерно 2^187.

У меня сложилось впечатление, что PoW включает в себя получение некоторого количества ведущих нулей в хеше.

Может кто-нибудь объяснить?

Ответы (2)

Люди часто говорят, что цель майнинга — получить определенное количество «ведущих нулей», потому что это легко представить, но более точное утверждение состоит в том, что цель — найти xтакое, что int(SHA256(SHA256(x))) < Tдля некоторой цели T, где int( )означает, что мы интерпретируем 256-битный хэш как 256-битное целое число без знака.

Это почти эквивалентно формулировке «ведущие нули». Если вы думаете о двух шестнадцатеричных 32-байтовых последовательностях, то та, в которой больше начальных нулей, является меньшим числом при интерпретации как целое число.

Например, недавний блок BTC имеет хэш

0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6d

Что меньше цели

0x000000000000000000365a170000000200000000000000000000000000000000

Блок имеет больше нулей впереди, но решетка

0x000000000000000000265a170000000200000000000000000000000000000000

тоже сработало бы, так как оно меньше целевого, несмотря на столько же нулей.

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

1) Можете ли вы объяснить мне использование 2 ^ 187? Что это означает под the target is 2^187«2) Если у нас есть два блока, один с хэшем, 0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6dа другой с хэшем 0x000000000000000000265a170000000200000000000000000000000000000000, было бы нормально выбрать любой из них, верно? другой будет отброшен?
1. 2^187 — это приблизительно целая форма цели на момент написания статьи. 2. Правильно

В биткойне 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 есть цель, которая похожа на хэш блока Биткойна.