Процесс проверки биткойн-транзакций

У меня есть общее представление о строительных блоках. Но я надеюсь, что кто-то может заполнить детали / пробелы. Кроме того, вы можете исправить, если что-то не так? Спасибо.

Сценарий:

  1. Биткойн-транзакции транслируются в биткойн-сеть.
  2. Узлы получают транзакции.
  3. Каждый узел помещает транзакции в свой собственный внутренний мемпул — или это сетевой мемпул, из которого все узлы извлекают транзакции?
  4. В какой-то момент некоторые узлы начинают майнинг (хеширование, чтобы найти правильный хэш с ведущими нулями). Когда это начинается? Я предполагаю, что как можно скорее, так как это гонка. Значит, не обязательно использовать данные в полностью построенном блоке, верно?
  5. В какой-то момент узлы майнинга заполняют блок транзакциями из мемпула (они вытягивают те, у которых самые высокие комиссии). Каждый узел проверяет каждую транзакцию, которую он помещает в свой блок, по всей цепочке блоков.
  6. Когда узел находит выигрышный хеш, он объявляет параметры выигрыша в сеть.
  7. Сеть может легко проверить хэш, используя параметры (набор данных, значение одноразового номера и т. д.), которые отправляет победивший узел.

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

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

Спасибо.

Ответы (3)

Все, что написал MCCCS, хорошо, но просто чтобы уточнить ваш последний вопрос:

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

Этот вопрос немного ошибочен: не существует «принятия блока в сеть биткойн», потому что это предполагает наличие некоего общесетевого порога принятия, который должен быть достигнут, или некоего центрального переключателя «да/нет» для принятия блока.

Реальность такова, что сеть состоит из независимо действующих узлов . Каждый узел решает для себя, действителен ли блок, и именно благодаря этим «правилам консенсуса» сеть приходит к соглашению о том, какой блокчейн является самым длинным (наиболее работающим). Как только действующий блок будет передан в эфир, каждый узел будет независимо работать, чтобы убедиться, что он действителен, а затем добавить его в свою локальную копию блокчейна, если он пройдет все тесты. Сеть спроектирована таким образом, что мы ожидаем, что все узлы, которые следуют этим правилам консенсуса, останутся в консенсусе, даже если они действуют независимо.

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

4-5-6: Узлы майнят не майнеры. Майнеры никогда не останавливаются, и каждый [какой-то интервал] они получают новый шаблон блока с узла оператора пула, который[ose merkle hash] включает новые транзакции. Когда они находят блок, он публикуется, и транзакции в этом блоке не могут быть изменены.

В: Когда узлы получают новые блоки, они проверяют его хэш (независимо от того, ниже ли он сложности целевой), хэш предыдущего блока, который он содержит, и транзакции, которые он имеет. (Обратите внимание, что большинство принятых транзакций получаются дважды каждым узлом, что и пытается решить Compact Blocks).

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

Я думаю, что если вы добавите еще два шага в начале, это будет иметь больше смысла.

  1. Создание сделки. (когда пользователь А отправляет монету пользователю Б)
  2. Проверка сделки.

Транзакция передается на соседние узлы, и эти узлы проверяют транзакцию. Если транзакция действительна, эти узлы передают ее дальше своим соседним узлам в сети. Если транзакция недействительна, она не заполняется в сети.