Куда отправляются транзакции?

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

Скажем, я загружаю облегченный биткойн-клиент и настраиваю кошелек на машине А. С другой машины Б я отправляю монету на этот новый кошелек.

  1. Как моя транзакция попадает к майнеру? Предположительно, клиент на машине B отправляет сообщение в Интернет... но разве ему не нужно указывать, какой IP-адрес отправлять такое сообщение? На какие IP-адреса он отправляет?
  2. Точно так же, как машина А узнает о транзакции? Клиент постоянно пингует сеть, чтобы запросить новые транзакции на свой адрес? Как он узнает, какие IP-адреса пинговать при первом запуске?
Это обсуждение, кажется, отвечает на основную часть вопроса. Сводный обзор все еще может быть полезен: bitcoin.stackexchange.com/questions/53260/…

Ответы (1)

Как моя транзакция попадает к майнеру?

Во-первых, когда вы запустите свой кошелек, он подключится к нескольким другим узлам в сети с помощью описанного здесь механизма . Эти соединения являются соединениями TCP, поэтому они представляют собой потоки данных с одного компьютера непосредственно на другой; IP-адреса известны, а передача данных осуществляется на уровне TCP.

По этому TCP-соединению два узла начнут обмениваться данными. Сначала он состоит из некоторых начальных элементов рукопожатия, таких как сообщения о версии, различные фильтры для другого узла, которые должны применяться перед отправкой данных другому узлу, и т. д. Затем он состоит из данных блока и транзакции. Обычно они сначала объявляются в invсообщении (в основном просто говорится: «У меня есть этот фрагмент данных»), запрашиваются с помощью getdataсообщения (говорится «пожалуйста, дайте мне этот фрагмент данных») и отправляются с соответствующим типом сообщения ( block, txи т. д. .).

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

Точно так же, как машина А узнает о транзакции?

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

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