Зачем менять одноразовый номер, а не просто перефразировать?

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

Если ответ заключается в том, что быстрее увеличить одноразовый номер, чем просто генерировать случайный хэш для получения действительного результата, не могли бы вы показать это математическим/статистическим способом?

Ответы (1)

Хеш-функция, используемая в биткойнах, является детерминированной, то есть хеширование одних и тех же входных данных, то есть заголовка блока, всегда приводит к одному и тому же результату. Это необходимо, чтобы другие также могли проверить действительность Proof-of-Work.

Это означает, что для вычисления нового хэша необходимо изменить входные данные хеш-функции. Самый простой способ изменить ввод — изменить одноразовый номер, поскольку это поле произвольной формы, которое может принимать любое значение. Другими способами изменить ввод являются, например, обмен транзакциями или изменение транзакции coinbase, что потребует пересчета корня merkle в заголовке. Отметка времени также является популярным выбором, однако ее значения ограничены допустимым диапазоном времени.

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

Спасибо @cdecker. Это имеет смысл. Не могли бы вы объяснить, что вы имеете в виду под «при изменении ввода этого не происходит, поскольку с учетом ввода верификатор может выполнить одну операцию хеширования и проверить результат»? Разве для проверки не всегда достаточно одной хэш-операции?
Именно в этом разница между изменением ввода (верификатор просто берет PoW, хеширует и проверяет вывод) и итеративным случаем (верификатор должен будет взять заголовок блока и хешировать его точно такое же количество раз, как это сделал эмитент).
Спасибо cdecker. Просто пытаюсь обдумать предполагаемую проверку. В итеративном случае... RE: ваш предыдущий комментарий - если верификатор берет заголовок блока и окончательный хэш эмитента, не будет ли достаточно одной хеш-операции? В этом случае у верификатора будут все необходимые входные данные (блок-заголовок + окончательный хеш эмитента), и одна единственная хеш-операция позволит верификатору проверить результирующий вывод и убедиться, что он действителен, не так ли?
Он не мог связать заголовок с передаваемым прообразом, это позволило бы промежуточному узлу произвольно изменять заголовок, не аннулируя доказательство работы. Допустим, SHA256(...n-1 раз...(заголовок)...) является прообразом SHA256(...n раз...(заголовок)...), который является PoW, тогда верификатор сможет проверить, что SHA256 (предварительный образ) является PoW, но не может подтвердить, что этот предварительный образ представляет собой n-1 вложенных вызовов SHA256 в заголовке, фактически не выполняя эти вызовы.
Спасибо cdecker. Я думал, что проверка PoW состоит из выполнения только одной хеш-операции, чтобы проверить, привело ли «решение» эмитента к действительному результату (в этом случае оба сценария — изменение ввода и итеративный случай — потребуют одинакового объема работы для проверять). Из вашего ответа я понял, что вся работа (или, по крайней мере, логика « решения») также нуждается в проверке.
@Glenn Вы можете проверить PoW с помощью всего лишь одного хэша. Но это не подтвердит, что PoW действительно защищает заявленный блок, что вам и нужно проверить.
@DavidSchwartz Спасибо, что оценили Дэвида. Не могли бы вы уточнить, что вы имеете в виду? Я не читал о PoW, обеспечивающем защиту заявленного блока, это то, что нужно проверить (по крайней мере, не в этих словах).
Цель PoW — защитить цепочку блоков. Просто доказать, что вы работали, бесполезно, эта работа должна быть привязана к конкретному блоку, который вы защищаете.
Большое спасибо @DavidSchwartz. С этим вопросом я чувствую, что, возможно, я слишком рано углубился в специфику блокчейна в своем контексте понимания, чтобы уже задавать вопросы «а что, если». Но это способствовало моему пониманию. Большое спасибо как cdecker, так и вам.