После отправки/флуда транзакций, как мы узнаем, что конкретная транзакция находится на всех узлах?

В книге «Mastering the Blockchain» Имрана Башира говорится, что жизненный цикл транзакции выглядит следующим образом:

  1. Пользователь/отправитель отправляет транзакцию, используя программное обеспечение кошелька или какой-либо другой интерфейс.
  2. Программное обеспечение кошелька подписывает транзакцию, используя закрытый ключ отправителя.
  3. Транзакция транслируется в сеть Биткойн с использованием алгоритма лавинной рассылки.
  4. Узлы майнинга включают эту транзакцию в следующий блок для майнинга.
  5. Майнинг начинается, когда майнер, решивший задачу Proof of Work, передает в сеть только что добытый блок. Доказательство работы подробно объясняется далее в этой главе.
  6. Узлы проверяют блок и распространяют блок дальше, после чего начинает генерироваться подтверждение.
  7. Наконец, подтверждения начинают появляться в кошельке получателя, и примерно после шести подтверждений транзакция считается завершенной и подтвержденной. Однако шесть — это всего лишь рекомендуемое число; транзакцию можно считать окончательной даже после первого подтверждения. Ключевая идея ожидания шести подтверждений заключается в том, что вероятность двойных расходов практически исключается после шести подтверждений.

Мой вопрос:

Теперь у всех узлов есть конкурирующие майнеры для создания блока, получая все транзакции от всех узлов/пользователей, которые отправляют транзакции, и упаковывая их, что не происходит из одного места. Если мы позвоним победителю, майнеру, который первым решит проблему PoW, то как мы узнаем, что он получил все транзакции, которые должен был получить, прежде чем объявить, что он создал действительный блок? Мое программное обеспечение для майнинга могло игнорировать несколько транзакций и приступать к майнингу раньше, чем другие, и, следовательно, превзойти всех остальных (при условии, что у всех нас одинаковая вычислительная мощность).

Мой вопрос также можно прочитать по-другому: как обеспечить, чтобы все майнеры решали одну и ту же проблему PoW, в то время как в сети Биткойн могут возникать большие задержки (поскольку мы занимаемся майнингом со всего мира)?

Ответы (5)

Вы не можете знать, что это на ВСЕХ узлах, потому что, возможно, это не так. О транзакциях сплетничают изо всех сил, и обычно это срабатывает.

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

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

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

Предыдущие ответы ускользали от него, но такие простаки, как я, смотрят на «Итак, что это на самом деле означает». Это означает, что когда вам платят в биткойнах, вы не «ОПЛАЧИВАЕТЕСЬ» до тех пор, пока эта транзакция не появится как минимум в 6 блоках этой цепочки, поскольку эта цепочка может быть признана недействительной в любое время до того, как будет достигнут этот 6-й блок (ее все еще можно назвать недействительной). после этого, но маловероятно).

Это означает, что мгновенные транзакции с использованием BitCoin являются «РИСКОМ». Если я принимаю биткойны в своем ресторане, возможно, цепочка, в которой мне заплатили, может быть признана недействительной, поэтому я никогда не получал фактический платеж. Я думаю, что в настоящее время время составляет 10 минут, чтобы «подтвердить», что транзакция находится в действительной цепочке «6 блоков в глубину».

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

Как убедиться, что все майнеры решают одну и ту же проблему PoW

Это невозможно. И это не нужно.

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

И это тоже не нужно. Вы можете начать добычу блока без получения транзакций из сети.

Спасибо за ответ. Но тогда я могу продолжать создавать блоки и получать деньги бесплатно, верно?
(а) монеты не являются деньгами (б) PoW означает, что вы «работаете», работаете = тратите энергию, энергия не бесплатна.
Каковы стимулы для майнинга блоков, в которых действительно есть транзакции? Кстати, не зацикливайтесь на разнице между монетами и деньгами, потому что их можно обменять на биржах.
так яблоки и апельсины тоже "деньги", потому что их можно обменять на рынках? хорошо. понятно. относительно вашего вопроса: есть как минимум две причины: (а) майнер получает дополнительную комиссию от включенных txs (b) существует миф, что включение txs помогает сети и повышает курс обмена монеты на фиатные деньги
@SamMarkus Люди помещают транзакции в блоки, которые они добывают, по двум причинам: 1) Майнер получает комиссию за транзакцию, которую платят транзакции, которые они добывают. 2) Майнеры должны инвестировать в ASIC для майнинга биткойнов, и их майнеры быстро превратились бы в очень дорогие обогреватели, если бы сеть нельзя было использовать для транзакций.

Что касается вашего вопроса внизу:

Как обеспечить, чтобы все майнеры решали одну и ту же проблему PoW, в то время как в сети Биткойн могут возникать большие задержки (поскольку мы занимаемся майнингом со всего мира)?

Внутри заголовка блока есть поле Timestamp (примерное время создания этого блока — секунды от Unix Epoch). Таким образом, все решения должны быть действительны для этого конкретного блока. Часть решения, которое найдут майнеры, заключается в том, чтобы найти транзакции и Nonce, которые решают проблему. Не все транзакции, перечисленные до создания блока, будут обработаны. Таким образом, если возможное решение опубликовано, но не подходит для текущего блока, оно не будет принято. Таким образом, все майнеры работают в PoW.

Если мы позвоним победителю, майнеру, который первым решит проблему PoW, то как мы узнаем, что он получил все транзакции, которые должен был получить, прежде чем объявить, что он создал действительный блок?

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

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

Это не имеет смысла по двум причинам:

  1. Игнорирование транзакций не сэкономит вам ни времени, ни чего-либо еще. Вы всегда майнинг. Зачем вам ждать транзакций, которые могут прийти, а могут и не прийти, и если да, то когда вы перестанете ждать? На практике вы всегда пытаетесь включить самые прибыльные сделки, которые вы знаете, и никогда ничего не ждете, потому что так вы зарабатываете больше всего денег.

  2. Даже если у двух майнеров одинаковая вычислительная мощность, они пытаются решать разные задачи. Таким образом, решение, которое найдет первым, будет эффективно случайным. Если они не координируются, то майнер A пытается найти решение, которое платит майнеру A, в то время как майнер B пытается найти решение, которое платит майнеру B, поэтому разные проблемы. Если они согласованы, то повторять работу точно не будут — в этом и смысл согласования.

Мой вопрос также можно прочитать по-другому: как обеспечить, чтобы все майнеры решали одну и ту же проблему PoW, в то время как в сети Биткойн могут возникать большие задержки (поскольку мы занимаемся майнингом со всего мира)?

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