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

У меня есть этот сценарий:

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

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

Или каждый узел получает разные транзакции в своих мемпулах? Если да, то как транслируется транзакция? Он попадает случайным образом в мемпул какого-то майнера?

Спасибо за ваше терпение!

Ответы (1)

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

Таким образом, мемпул каждого узла может немного отличаться, не существует консенсуса в отношении того, что хранится в мемпуле каждого узла. На самом деле, оператор узла может вообще не хранить мемпул!

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

Получает ли каждый узел все транзакции в своем мемпуле, что означает, что это похоже на место синхронизации, где все могут видеть одни и те же транзакции?

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

…как остальная часть сети майнеров узнает, что транзакции, которые они выбрали из майнингового пула, еще не добыты другим майнером?

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