Включение транзакций в блок - правила и время/технический аспект

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

Теоретически предположим, что есть вновь распространяемый решаемый блок.

И теперь есть: tx0 и tx1 — не включенные в распространяемый блок со временем транзакции ранее, чем решенный блок.

Tx2 - который был распространен через 10 секунд после решения предыдущего блока

Tx3 - который был распространен через 60 секунд после решения предыдущего блока

Майнеры берут только Tx0 и tx1, делают хеш и начинают майнить (их хеш уже есть) или (я полагаю, что это не так) добавляют те tx2 и tx3, которые были распространены в этом «10-минутном» окне?

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

Итак, в основном мой вопрос заключается в том, включает ли следующий блок только те транзакции, которые были распространены ДО решения текущего блока и ПОСЛЕ того, как майнеры начали находить текущий блок (то есть в этом «10-минутном окне» или есть какие-то другие правила? Я пытался найти решение в документах, но безуспешно (если кто-то знает какой-то источник, я был бы признателен)

С наилучшими пожеланиями

Ответы (2)

Настоящих правил как таковых нет, просто различные оптимизации.

ASIC работают быстро . Они могут прожечь все 2 ^ 32 возможных одноразовых номера для данного блока за секунды, что требует от майнеров использовать дополнительное поле одноразового номера в транзакции coinbase для создания нового заголовка блока (поскольку изменение транзакции coinbase изменяет корень merkle) и попытаться снова.

Этот процесс можно выполнять параллельно — майнер может подготовить заголовок блока N+1, изменив дополнительный одноразовый номер в транзакции coinbase, пока они проверяют 2^32 значения одноразового номера заголовка N-го блока.

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

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

На самом деле в майнинге нет никакого «начинания заново», потому что майнинг фактически не требует прогресса, как лотерея и в отличие от гонки. При обновлении списка транзакций ничего не теряется, кроме незначительного объема обработки, необходимого для создания нового списка и полосы пропускания для его передачи.

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