Когда блок «обнаружен», как определяется одноразовый номер?

Я знаю, что блок основан на случайном числе, называемом одноразовым номером, но если это число является случайным и неизвестным майнеру, как это число на самом деле проверяется как правильный одноразовый номер, а не какое-то произвольное число?

После обнаружения блока одноразовый номер становится общедоступным. Номер доступен майнеру и верификатору.

Ответы (1)

По сути, не существует такого понятия, как «правильный» одноразовый номер, есть только набор возможных «правильных» блоков, которые могут использовать любой одноразовый номер для получения приемлемого хэша. Таким образом, одноразовый номер - это просто "какое-то произвольное число". Но чтобы понять, как работают одноразовые номера, сначала нужно понять процесс хеширования, с помощью которого создаются блоки.

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

В сети Биткойн принимаются и включаются в официальный список только блоки с определенными хэшами. Критерий, по которому блоки «учитываются», заключается в том, что их хэш должен быть ниже определенного числа, называемого целевым. Сеть корректирует это число вверх и вниз в зависимости от того, как часто блоки проходят тест — таким образом она может поддерживать скорость производства блоков в среднем на уровне 10 минут на блок. Итак, если цель

00000692856290566183958127638592383846392938562929689273923968

затем блок с хешем

00000739485762992939239823472938472569106923385616929838472389

приниматься не будут, а блоки с хэшами

00000683060299472046094517810601040976920106812102601296720934

00000000000000000000000000000000000000000000000000000000453737

или же

00000692856290566183958127638592383846392938562929689273923967

все пройдет с честью. Это не настоящие хэши — это просто примеры.

Майнер берет список проверенных и действительных транзакций, объединяет их в правильном формате, а затем вычисляет их криптографический хэш. Но предположим, что полученный ими хэш не соответствует критериям (как и большинство из них). Что они должны делать? Единственный способ получить другой хэш — использовать хотя бы немного другие данные. Таким образом, вместо того, чтобы испортить список допустимых транзакций или что-то в этом роде, в блоках есть что-то, называемое одноразовым номером. Nonce — это просто бессмысленное число, которое можно менять сколько угодно раз, чтобы можно было проверить кучу разных хэшей и посмотреть, проходят ли они проверку сложности сети.Таким образом, когда майнер проверяет миллиарды хэшей в секунду (как и многие из них), он просто меняет одноразовый номер на что-то другое, проверяя хэш всего блока; изменение одноразового номера на что-то другое, проверка хэша (теперь немного другого) блока; изменение одноразового номера еще раз и т. д.

В этом смысле «правильный» одноразовый номер — это просто тот, который позволяет блоку хэшироваться до приемлемого числа. Точно так же, как существует множество допустимых хэшей, существует множество различных одноразовых номеров, которые будут работать для одного и того же блока. Но шахтеру нужно найти только одну из них. Тот, кого они найдут первым, просто прекрасен.

Вас также может заинтересовать, как рассчитывается цель.

На самом деле, поскольку одноразовый номер имеет длину всего 32 бита, для большинства блоков нет действительного одноразового номера, который мог бы справиться с трудностями. В этом случае майнер должен изменить набор транзакций. Как правило, транзакция coinbase изменяется. (Бессмысленное поле в транзакции coinbase используется как «дополнительный» одноразовый номер.)
Я не уверен, как далеко назад вы имеете в виду, но, по крайней мере, с 0.3.23 это изменило бы транзакцию coinbase, если одноразовый номер был исчерпан. И, конечно же, так делают все современные майнеры и майнинговые пулы.
Использовался @eMansipater, начиная с самого первого блока со сложностью в один дополнительный одноразовый номер. При сложности 1 вероятность того, что любой конкретный хэш достигнет цели, составляет 1/(2^32). Имея всего 2 ^ 32 значения одноразового номера, вероятность того, что любой заданный заголовок НЕТ одноразового значения создаст действительный хэш, составляет 36%. То есть сложность равна 1. По мере роста сложности вероятность того, что ни один одноразовый номер в диапазоне одноразовых номеров не сделает действительный хеш, только увеличивается.
Очень хороший ответ! Итак, вы также можете сказать, что сложность представляет собой количество нулей, которые должны быть в начале хеша?
Вау, отличный ответ. Одна из вещей, которые я часто слышал, когда начинал учиться, это «решать действительно сложную проблему», но не понимать, в чем проблема или почему это сложно. Это проясняет, что делает его «сложным» и что за пределами этого приложения это практически бесполезная проблема.
Спасибо за этот ответ. Быстрый вопрос: что произойдет, если правильный блок будет найден одновременно двумя разными майнерами? Поскольку для того, чтобы блок был «правильным», хэш должен быть ниже цели, я предполагаю, что это возможно. Как с этим справляется сеть?
Ничего особенного не происходит. Всегда бывает так, что последние несколько блоков в цепочке неопределенны, потому что некоторые майнеры могут строить другие цепочки такой же длины. Чем дальше вы идете по цепочке, тем ниже вероятность того, что цепочка, не включающая этот блок, когда-либо превысит длину основной цепочки. Отсюда необходимость множественных подтверждений.