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

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

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

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

Я знаю, что неправильно понимаю очень простой пункт в протоколе, но я не могу понять, что именно.

Ответы (2)

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

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

Хорошо... Итак, например, транзакции a, b, c и d были отправлены майнеру M1; транзакции c, d, e, f и g были отправлены майнеру M2. Оба M1 и M2 находятся на головке BC1. M1 находит легитимный хэш и объявляет о новом блокчейне BC2. А как же М2? Текущий BC2 не содержит e, f и g. M2 может начать новый блок-кандидат B3, но это приведет к дублированию транзакций c и d. Бывший блок M2 B2' также нельзя полностью отбросить, иначе e, f и g исчезнут.
@corsel: M2 генерирует новый заголовок блока B4, который содержит e,f,gтолько транзакции, и начинает искать для него соответствующий одноразовый номер.
Ах, так блок-цепочка всегда синхронизирована и должна быть проверена большей частью сети, в то время как кандидаты в блоки являются локальными и полностью зависят от воли майнеров... Если появится вредоносный блок-цепочка, она будет протестирована и отклонена другими майнерами, или попытка манипулировать историей путем хеширования на глубоких уровнях терпит неудачу, так как через меньшее время будет объявлена ​​новая цепочка.

Часть вашего заблуждения заключается в следующем: «когда будет достигнуто определенное количество транзакций». Майнинг не требует определенного количества транзакций; законно иметь блок вообще без транзакций (за исключением транзакции вознаграждения за блок «coinbase»). «Гонка хэшей» продолжается всегда; не запускается и не останавливается. Когда майнер получает новую транзакцию, он просто включает ее в уже имеющиеся у него транзакции, генерирует новый заголовок блока и продолжает хеширование нового заголовка. Нет требования, чтобы все майнеры работали с одним и тем же набором транзакций.