Если бы два майнера выбрали из мемпула два разных набора транзакций, которые не зависели бы друг от друга.
Тогда могли бы оба майнера майнить оба блока и не создавать форк?
Итак, майнер 1 заканчивает блок, а майнер 2 видит, что блок не имеет ничего общего с его блоком, поэтому он продолжает майнить и добавляет этот блок в блок майнера 1 примерно через секунду?
Я предполагаю, что форки происходят только тогда, когда в обоих добытых блоках есть транзакции, которые существуют в обоих блоках.
Нет, каждый блок должен ссылаться на предшествующий ему блок в заголовке, а блокчейн имеет только один блок на каждой высоте. Следовательно, второй майнер должен изменить шаблон блока, с которым он работает, чтобы построить его поверх только что обнаруженного блока. Им необходимо обновить хеш предыдущего блока и высоту блокчейна в транзакции Coinbase. В противном случае блок, который они найдут, будет конкурировать с только что опубликованным за включение вместо того, чтобы писать блокчейн.
Остальная часть шаблона блока может остаться прежней, если ни одна из транзакций уже не будет включена в блокчейн.
Однако ваш вопрос звучит для меня так, как будто вы думаете, что поиск блока продвинулся. Майнинг — это процесс без прогресса, каждая попытка может быть или не быть независимой. Таким образом, для каждого майнера было бы более выгодной стратегией попытаться включить самые выгодные транзакции (по самой высокой ставке комиссии) и переключаться на новый шаблон блока всякий раз, когда блок публикуется с новыми самыми выгодными транзакциями.
О, ирония... Я ТОЛЬКО ответил на тот же самый вопрос на Stackoverflow. Скопирую ответ сюда:
Вы можете представить себе двух конкурирующих майнеров, создающих блоки. Если у майнера нет блока N, он будет пытаться добыть этот блок. Если он получит блок с номером N после его майнинга, то майнер его просто проигнорирует, и у нас получится временный форк блокчейна с двумя ветвями, а блок N+1 будет иметь две разные версии. Теперь то, что определяет, какая ветвь выживет, — это ветка, которая добывается быстрее. Произвольное правило консенсуса состоит в том, что более длинная цепочка всегда является правильной цепочкой. Когда существует более длинная цепочка, все майнеры согласны с тем, что эта цепочка является правильной.
Причина, по которой это работает, заключается в том, что вероятность майнинга блока достаточно широка в течение 10 минут в биткойнах (или времени блока в целом).
Следующее изображение можно рассматривать как вероятность майнинга блока с течением времени (в биткойнах).
Вот почему неправильно создавать блокчейны за очень короткое время. Потому что, если время очень короткое (например, 10 секунд), будет множество разветвлений, прежде чем блокчейн стабилизируется.
Прочитав комментарий pebwindkraft, я придумал ответ.
Конкретный отрывок «Чтобы решить эту проблему, каждый узел всегда выбирает и пытается расширить цепочку блоков, которая представляет собой наибольшую Proof-of-Work, также известную как самая длинная цепочка или наибольшая кумулятивная рабочая цепочка».
Если бы блокчейн был в настоящее время:
Блок1 -> Блок2 -> Блок3
И два майнера выбирают из мемпула транзакции, которые не пересекаются. Тогда это вызовет разветвление блокчейна, если оба транслируются одновременно.
Это связано с тем, что даже если транзакции не перекрываются, хэш блока будет разным для каждого майнера, и если хеш блока отличается, то это две разные версии блокчейна. Даже если сделки не пересекаются.
Если майнер1 начнет трансляцию первым, то майнеру2 придется снова запустить свой блок, даже если все транзакции в блоке майнера1 не конфликтуют с транзакциями майнера2. Это потому, что как только майнер1 добавляется в блокчейн. Цепочка становится:
Блок1 -> Блок2 -> Блок3-> Блок4
Где Block4 — это блок miner1.
Miner2 должен начать заново, потому что в своем блоке он использовал предыдущий хэш блока 3, теперь он должен изменить его на хэш блока 4.
Если я допустил ошибку, оставьте комментарий вместо того, чтобы голосовать против, поскольку я хотел бы знать, где я ошибся.
Не совсем.
two видит, что блок не имеет ничего общего с его блоком, поэтому продолжает майнить и добавляет этот блок в мой
Как только майнер увидит прибытие блока на ту же высоту, на которой он сам занимается майнингом, соревнование за этот блок заканчивается. Нет смысла продолжать добычу.
Однако в случае, если майнеры будут создавать одновременные блоки, произойдут форки.
Я предполагаю, что форки происходят только тогда, когда в обоих добытых блоках есть транзакции, которые существуют в обоих блоках.
Майнер должен удалить транзакции из пула памяти, которые уже присутствуют во вновь прибывшем блоке, и начать добычу нового блока.
пебвиндкрафт
пебвиндкрафт
Кайл Грэм