Комиссия за транзакцию, когда цепочка блоков отбрасывается

Я немного новичок в системе биткойнов, поэтому прошу прощения, если это «нубский» вопрос.

Пользователь пытается собрать все известные ему непроверенные транзакции и объединить их в цепочку блоков. То же самое относится ко всем пользователям по всему миру — все они пытаются объединить все непроверенные транзакции в цепочку блоков с 1 успехом каждые 10 минут по глобальной шкале.

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

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

Если это так, что происходит с комиссией за транзакцию и наградой в 25 биткойнов, присужденной парню, создавшему «плохой» блок?

Я имею в виду, хорошо — награда в размере 25 биткойнов теоретически может остаться у парня, который создал блок, поскольку он сделал работу, но комиссия за транзакцию? Его нужно будет заплатить следующему парню, который проверит транзакцию, не так ли?

Или в этом случае пользователю нужно будет заплатить 2 комиссии за транзакцию?

Ответы (2)

Блоки в проигранной цепочке по существу забываются. (Лучше называть их проигрышными блоками, чем «плохими» блоками, потому что они были законными и предлагались добросовестно. Они просто проиграли сетевую гонку.)

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

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

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

Но разве сборы и вознаграждения не генерируют новую транзакцию, которая затем передается в систему для новой проверки? Как система узнает, что их нужно отбросить, если блок в «теряющей» цепочке отброшен?
Никакие сборы и вознаграждения не генерируют новые транзакции сами по себе. Награды можно потратить только после того, как блок будет закопан на 100 (я думаю) блоков в глубину. Таким образом, пока не может быть никаких транзакций, касающихся вознаграждения. Любые другие транзакции могут проходить в следующем блоке, если нет конфликта (двойной траты).
Другой способ думать об этом таков: блоки являются атомарными и включают в себя вознаграждение за блок и комиссию за транзакцию для майнера. Единственное, что происходит позже, — это решение строить на этом или нет. Если он (и его преемники) строится, он выигрывает. В случае выигрыша все эти транзакции/комиссии/вознаграждения могут быть потрачены их новыми владельцами без каких-либо дополнительных действий. Они просто возвращаются к этому блоку, чтобы использовать средства. И если он проиграет, ничего лишнего не будет. Простое исключение его из выигрышной цепочки уже означает, что он и все его содержимое не имеют значения.

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

Пример:

Блок А был последним.

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

  • B1 проверяет транзакции T1 и T2.
  • B2 проверяет транзакции T2 и T3.

Теперь каждая половина сети пытается найти следующий блок, строящийся соответственно из B1 или B2.

  • Опираясь на B1: Попытка найти C1, ссылающегося на B1 как на предыдущий блок. В своей родовой цепочке Т3 не верифицируется и майнеры включат его в С1.
  • Основываясь на B2: Попытка найти C2, ссылающегося на B2 как на предыдущий блок. В своей родовой цепочке Т1 не верифицируется и майнеры включат ее в С2.

Ради аргументов, C1 находится первым. B2 больше не является частью самой длинной цепочки, и поэтому любой майнер, получивший уведомление о C1, перестанет пытаться найти C2, а вместо этого попытается найти D1 на основе C1. Вознаграждение B2 недействительно в самой длинной цепочке, любые транзакции, которые были подтверждены только в B2, по-прежнему будут неподтвержденным пулом в цепочке C1.

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