Что происходит с транзакцией после ее создания?

Я пытаюсь понять, как технически работает биткойн. Я разбираюсь в блокчейне, цифровых подписях и т. д. Меня больше интересует, что происходит с транзакцией после ее «создания».

Предположим, Биткойн содержит только одну транзакцию на блок (для упрощения). В основном:

  1. кто-то создает транзакцию, используя свой кошелек
  2. эта транзакция должна быть подтверждена (проверить ввод, цифровую подпись и т. д.).
  3. доказательство работы должно быть вычислено по хэшу блока
  4. блок добавляется в блокчейн

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

  • как один узел транслирует транзакцию майнерам? Это часть протокола P2P?
  • проверяет ли майнер транзакцию (цифровая подпись, доступные входы и т. д.)?
  • майнер напрямую отправляет блоки в блокчейн?

Эта часть все еще сбивает меня с толку, любые справочные указатели на статью были бы замечательными :)

Обновлять:

В сети P2P узлы не связаны со всеми остальными узлами. Допустим, сеть выглядит так:

node1 <-> node2 <-> node3(1 и 2 соединены напрямую и 2 и 3 соединены напрямую. 1 и 3 соединены через 2)

Когда node1нужно передать транзакцию для проверки, она будет транслировать ее только в node2. Затем node2он может в конечном итоге передать его, node3чтобы дать ему возможность подтвердить node1транзакцию.

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

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

Как Биткойн справляется с этой ситуацией?

Ответы (2)

Что касается вашего обновления:

Это правда, что когда узел получает транзакцию, ничто не заставляет его ретранслировать ее. Они могут просто сидеть на нем, если хотят.

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

По этой причине Node1 будет отправлять транзакцию не только Node2, но и многим другим узлам. Например, Bitcoin Core по умолчанию попытается подключиться как минимум к 8 различным узлам. Если хотя бы несколько из этих узлов честны, они передают транзакцию многим другим узлам и так далее. Это также означает, что у Node2 меньше стимулов к жадности; жадность помогает только в том случае, если другие майнеры не знают о транзакции (или очень немногие), а Node2 знает, что это маловероятно. С другой стороны, если Node2 является майнером, то у нее есть небольшой стимул не быть жадным: инвестировав в оборудование для майнинга биткойнов, Node2 заинтересован в том, чтобы биткойн сохранял высокую стоимость, что произойдет только в том случае, если люди продолжат использовать это, и быстрое подтверждение их транзакций будет способствовать этому. Итак, в какой-то момент,

(Имейте также в виду, что не все узлы являются майнерами. Многие узлы в сети Биткойн управляются людьми, которые не занимаются майнингом, а просто запускают полный узел для развлечения, или для альтруистической поддержки сети, или потому, что они установили Bitcoin Core с настройками по умолчанию и на самом деле не знают и не заботятся о том, что он на самом деле делает.)

Что касается вашего второго сценария, если Node1 сам является майнером, он, безусловно, может хранить свои собственные транзакции для включения в свои собственные блоки, а не передавать их по сети. Это также означает, что ему не придется платить комиссию за эту транзакцию (или, что то же самое, что он возвращает комиссию себе). Есть два компромисса: (1) как упоминалось выше, транзакция будет подтверждена дольше; (2) если в сети имеется большой объем транзакций, достаточный для заполнения всех блоков, то, включив свою собственную транзакцию в свой блок, Node2 отказывается от возможности включать чужую транзакцию, которая будет платить ему комиссию. Так что Node1 должен решить, что для него лучше. Но это ни на кого не влияет, так что в любом случае это не проблема для сети.

Большое спасибо за ваше объяснение, которое здорово и проясняет для меня вещи :)
Что касается вашего последнего предложения, не сможет ли майнер заполнить блокчейн своими бессмысленными транзакциями? Конечно, они пропускают комиссию, но им не нужно делиться своими выдуманными транзакциями и рисковать тратить вычислительное время впустую.
@jiggunjer: майнер может поместить любые действительные транзакции, которые он хочет, в свои собственные блоки, и, конечно же, они могут заполнить свои блоки своими собственными транзакциями. Я не вижу, как это принесет им пользу. Я не понимаю, что вы имеете в виду, говоря о пустой трате вычислительного времени; можешь объяснить, что ты имеешь в виду?
То, как я вижу завершение блока, не означает, что он попадает в цепочку блоков, если другой блок включает транзакцию, которую он использовал. Просто занимаясь майнингом самостоятельно, вы можете: 1) избежать длительного ожидания транзакции с низкой комиссией. 2) Ваши блоки никогда не будут отклонены блокчейном.
О, я понимаю, что вы говорите. Но это не настоящая забота. Блоки строго упорядочены в блокчейне, поскольку каждый содержит хэш предыдущего блока. Таким образом, когда вы переходите к майнингу блока, вы точно знаете, какие блоки и, следовательно, какие транзакции находятся в цепочке до этого момента, и вы можете с уверенностью избежать включения любых транзакций, которые уже есть. Если другой блок, расположенный позже в цепочке, попытается включить транзакцию, уже находящуюся в вашем блоке, он будет отклонен, а не вы.
Возможно, два блока, добытые одновременно (оба с тем же блоком, что и предыдущий), содержат одну и ту же транзакцию. Но в таком случае только один блок может стать частью цепочки просто из-за строгого требования к порядку, и это было бы верно, даже если бы они не содержали ни одной из одинаковых транзакций. Таким образом, избегание транзакций других людей не дает здесь никакой выгоды.

как один узел транслирует транзакцию майнерам? Это часть протокола P2P?

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

проверяет ли майнер транзакцию (цифровая подпись, доступные входы и т. д.)?

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

майнер напрямую отправляет блоки в блокчейн?

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

Спасибо за ваш ответ :) Я обновил свой вопрос, добавив более подробную информацию.