Почему один и тот же майнер не всегда выигрывает?

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

Ответы (2)

Майнинг не выигрывает майнер с «самой сильной способностью решить блок». Майнинг — это случайный процесс без прогресса. Каждый блок-кандидат независимо имеет крошечный шанс быть действительным блоком.

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

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

Для лучшего понимания того, что такое майнинг, вы можете посмотреть « Что такое майнинг? ».

Спасибо Марч. Значит, более сильная мощность хешрейта позволяет вам чаще участвовать в розыгрыше?
Каждый хеш — это лотерейный билет. Хэши в секунду (hashrate) — это лотерейные билеты в секунду. Если вы делаете больше хэшей в секунду, вы будете чаще находить блоки.

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

Хотя каждый из блоков, над которыми работает каждый майнер, будет иметь одинаковую высоту и родительский блок, они будут иметь разные транзакции и могут иметь разные номера версий блоков и временные метки.

Но наиболее очевидной вещью будут транзакции, которые хешируются в корень Меркла. Всего одна отличающаяся транзакция или всего одна транзакция в другой позиции вызовет изменение корня меркла, что приведет к изменению заголовка блока, что, таким образом, сделает хэш другим. И у каждого майнера, по крайней мере, его транзакция coinbase будет отличаться от транзакций всех остальных. Это связано с тем, что транзакция coinbase содержит вывод, который платит майнеру, поэтому очевидно, что каждый майнер будет оплачивать свою транзакцию coinbase сам, а не кто-то другой. Исходя из этого простого факта, транзакции в блоках, над которыми работают майнеры, будут отличаться, по крайней мере, в coinbase.

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

Означает ли это, что всякий раз, когда майнер выполняет требование PoW и, следовательно, его/ее блок добавляется в цепочку блоков, все остальные майнеры должны отказаться от работы над своими текущими добытыми блоками, потому что родительский блок для добавления следующего блока изменился, поэтому хэш следующего блока изменится? Я надеюсь это имеет смысл.
@pkout Да, но на самом деле они не выбрасывают работу. Майнинг — это непрерывный процесс, поэтому вся предыдущая работа не влияет на то, нашел бы майнер блок, если бы этого не сделал кто-то другой.
Так скажем, майнер A и B добывают блоки. Майнер A завершает PoW первым, поэтому его/ее блок добавляется в верхнюю часть блокчейна. Это означает, что следующий добавляемый блок должен будет содержать хэш блока майнера А в качестве родительского блока, верно (потому что это новая вершина блокчейна)? Но блок майнера А не был известен, когда майнер Б начал майнить последний блок, поэтому ему/ей придется перезапустить процесс, чтобы он/она начал с правильного хэша родительского блока в заголовке следующего блока, который нужно майнить. , нет? Я знаю, что что-то упускаю, просто не могу понять, что именно.
@pkout Да, так и будет. Майнер B изменит заголовок, над которым он работает, чтобы иметь новый предыдущий блок и новые транзакции (поскольку исходные транзакции, вероятно, были подтверждены в блоке A). Однако это ничего не стоит B, потому что майнинг не имеет прогресса. Вся работа, которую B проделал ранее, не сделала более или менее вероятным, что следующий заголовок блока, который B пытается сделать, будет действительным. Да, они «перезапускаются», но они перезапускаются после каждой попытки. Обновление до следующего блока ничем не отличается от попытки нового одноразового номера.
А, теперь я понял. Этого мне недоставало: «Да, они «перезапускаются», но они перезапускаются после каждой попытки одноразового номера. Обновление до следующего блока ничем не отличается от попытки нового одноразового номера». Я представил себе, что как только блок добывается, транзакции в нем замораживаются до тех пор, пока не будет найден правильный одноразовый номер. Это не так. Каждый одноразовый номер проверяется на «свежем» блоке транзакций, заголовок которого указывает на вершину текущей самой длинной цепочки блоков. Спасибо, Андрей!