Что произойдет, если два майнера добывают два блока с двумя разными наборами транзакций?

Если бы два майнера выбрали из мемпула два разных набора транзакций, которые не зависели бы друг от друга.

Тогда могли бы оба майнера майнить оба блока и не создавать форк?

Итак, майнер 1 заканчивает блок, а майнер 2 видит, что блок не имеет ничего общего с его блоком, поэтому он продолжает майнить и добавляет этот блок в блок майнера 1 примерно через секунду?

Я предполагаю, что форки происходят только тогда, когда в обоих добытых блоках есть транзакции, которые существуют в обоих блоках.

Я не являюсь экспертом в этой теме. У меня есть ссылка из книги Андреаса «Освоение биткойнов», которая находится в главе 10 «Майнинг и консенсус» (стр. 240ff). <<Блоки могут поступать на разные узлы в разное время, в результате чего узлы имеют разные точки зрения на блокчейн. Чтобы решить эту проблему, каждый узел всегда выбирает и пытается расширить цепочку блоков, которая представляет собой наибольшую Proof-of-Work, также известную как самая длинная цепочка или наибольшая кумулятивная рабочая цепочка.>> (часть 1 из 2)
<< Суммируя работу, записанную в каждом блоке в цепочке, узел может вычислить общий объем работы, затраченной на создание этой цепочки. Пока все узлы выбирают цепочку с наибольшей кумулятивной работой, глобальная сеть биткойнов в конечном итоге сходится к согласованному состоянию. Форки возникают как временные несоответствия между версиями блокчейна, которые разрешаются путем возможной реконвергенции, когда к одному из форков добавляется больше блоков. >> (часть 2 из 2). После этого введения есть примерно 8-9 страниц, объясняющих форк, надеюсь, это поможет вам начать работу.
@pebwindkraft Думаю, я понимаю, что сейчас произойдет. Спасибо за внимание. Я напишу ответ на основе этого

Ответы (4)

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

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

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

О, ирония... Я ТОЛЬКО ответил на тот же самый вопрос на Stackoverflow. Скопирую ответ сюда:

Вы можете представить себе двух конкурирующих майнеров, создающих блоки. Если у майнера нет блока N, он будет пытаться добыть этот блок. Если он получит блок с номером N после его майнинга, то майнер его просто проигнорирует, и у нас получится временный форк блокчейна с двумя ветвями, а блок N+1 будет иметь две разные версии. Теперь то, что определяет, какая ветвь выживет, — это ветка, которая добывается быстрее. Произвольное правило консенсуса состоит в том, что более длинная цепочка всегда является правильной цепочкой. Когда существует более длинная цепочка, все майнеры согласны с тем, что эта цепочка является правильной.

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

Следующее изображение можно рассматривать как вероятность майнинга блока с течением времени (в биткойнах).

Вероятность майнинга блока за некоторое время

Вот почему неправильно создавать блокчейны за очень короткое время. Потому что, если время очень короткое (например, 10 секунд), будет множество разветвлений, прежде чем блокчейн стабилизируется.

Спасибо за понимание. Я не думаю, что это отвечает на мой вопрос. Я знаю, что происходит во время форка и как сеть разрешает его. Мой вопрос касается того, произойдет ли форк, если майнеры 1 и 2 майнят два независимых блока. И майнер 1 добавляет свой блок, может ли майнер 2 обновить свою цепочку и продолжить добычу того же блока, так как конфликтов нет?
Ветки @Kyle полностью независимы и не имеют никаких отношений. Единственное требование состоит в том, чтобы каждая ветвь была последовательной. Один из них умрет.
Являются ли ветки такими же, как вилки? Я не уверен, что полностью понимаю то, что вы только что сказали.
@Kyle вилка имеет несколько ветвей.
Как форк может иметь несколько ветвей? Если я не ошибаюсь, когда сеть биткойнов разветвляется, она создает форк? Я раньше не слышал о термине «филиал», я новичок, поэтому еще не знаю. Пожалуйста, поправьте меня, где я ошибаюсь
Вы путаетесь в терминологии. Во-первых, имейте в виду, что я не говорю о форках протоколов, таких как Bitcoin Cash. Я говорю о временных разветвлениях блокчейна из-за майнинга (пожалуйста, прочитайте мой ответ еще раз). Вилка — это действие по созданию нескольких ветвей, которые выглядят как вилки на кухне. Говоря топологически (с точки зрения формы), вилка имеет ветви, и каждая ветвь может иметь вилку с большим количеством ветвей.

Прочитав комментарий pebwindkraft, я придумал ответ.

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

Если бы блокчейн был в настоящее время:

Блок1 -> Блок2 -> Блок3

И два майнера выбирают из мемпула транзакции, которые не пересекаются. Тогда это вызовет разветвление блокчейна, если оба транслируются одновременно.

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

Если майнер1 начнет трансляцию первым, то майнеру2 придется снова запустить свой блок, даже если все транзакции в блоке майнера1 не конфликтуют с транзакциями майнера2. Это потому, что как только майнер1 добавляется в блокчейн. Цепочка становится:

Блок1 -> Блок2 -> Блок3-> Блок4

Где Block4 — это блок miner1.

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

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

Не совсем.

two видит, что блок не имеет ничего общего с его блоком, поэтому продолжает майнить и добавляет этот блок в мой

Как только майнер увидит прибытие блока на ту же высоту, на которой он сам занимается майнингом, соревнование за этот блок заканчивается. Нет смысла продолжать добычу.

Однако в случае, если майнеры будут создавать одновременные блоки, произойдут форки.

Я предполагаю, что форки происходят только тогда, когда в обоих добытых блоках есть транзакции, которые существуют в обоих блоках.

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