Если узел имеет 100 подключений к другим узлам и получает новую транзакцию с использованием запроса getData, он отправляет сообщение inv своим 100 подключающимся узлам, верно?
Отправляет ли он также сообщение inv узлу, от которого он только что получил транзакцию, поскольку он все еще является одним из подключающихся узлов?
«Сообщения, как правило, сбрасываются периодически примерно каждые 100 мс. Однако ретрансляция транзакций происходит путем «просачивания» сообщений. Биткойн случайным образом выбирает с вероятностью 1/4 транзакции для inv-сообщения и приостанавливает остальные транзакции. Каждый сосед получает свой набор случайно выбранных транзакций, каждая из которых составляет около 1/4 доступного в данный момент набора. Только случайно выбранный «узел стекания» (ср. ретрансляция адресных сообщений) получает все транзакции немедленно. Другие соседи либо получают его позже, либо уже получили от другого соседа. Trickling снижает накладные расходы и в то же время усложняет анализ трафика, подобно тому, как миксы делают это в смешанных сетях».
Мне немного трудно понять, как работает просачивание с точки зрения транзакций. Я полагал, что когда происходит транзакция, узел, ответственный за транзакцию, отправляет сообщения INV своим партнерам и отправляет tx, если узлы отвечают getData.
Если узел имеет 100 подключений к другим узлам и получает новую транзакцию с использованием запроса getData, он отправляет сообщение inv своим 100 подключающимся узлам, верно?
Нет. Это зависит от того, какие узлы отправили inv
сообщение о том, что у них есть эта транзакция. Когда сообщение inv
получено, узел запомнит, что inv
ему было отправлено этим узлом, чтобы он не пытался отправить ему то, что у него уже есть. Максимум будет inv
отправлено 99 сообщений. Поскольку мы уже знаем, что пир, отправивший нам транзакцию, уже имеет ее, мы не отправляем ему файл inv
. Как минимум, сообщения не будут inv
отправлены, потому что все узлы уже могли отправить нам сообщение inv
для одной и той же транзакции.
Отправляет ли он также сообщение inv узлу, от которого он только что получил транзакцию, поскольку он все еще является одним из подключающихся узлов?
Как указано выше, это не так. Хотя нет правила, которое явно запрещает это, разумно не отправлять кому- inv
то, кто уже отправил inv
вам то же самое. Это экономит затраты на пропускную способность.
Мне немного трудно понять, как работает просачивание с точки зрения транзакций.
Для каждого пира узел хранит список транзакций, которые он собирается inv
ему совершить. Он inv
периодически отправляет сообщения о транзакциях со случайной задержкой между ними inv
. Транзакции выбираются для включения в inv
сообщение несколько случайным образом и в соответствии с некоторыми показателями, включающими ставку комиссии. Он выбирает ограниченное количество транзакций для inv
.
Я полагал, что когда происходит транзакция, узел, ответственный за транзакцию, отправляет сообщения INV своим партнерам и отправляет tx, если узлы отвечают getData.
Узел, создающий транзакцию, обрабатывает эту транзакцию так же, как и любую другую, полученную по сети. Для каждого узла, к которому подключен этот узел, он добавляет эту транзакцию в список транзакций, которые он в конечном итоге отправит на этот узел. Дальше все как обычно. В следующий раз, когда он должен отправить inv
сообщение для определенного узла, он выбирает транзакции для inv
, и созданная им транзакция может быть или не быть одной из них. После inv
отправки другой узел ответит сообщением getdata
о том, что он хочет, что может включать или не включать созданную им транзакцию. Затем ваш узел отвечает на getdata
сами транзакции.
он отправляет сообщение inv своим 100 подключающимся узлам, верно?
до 99
Отправляет ли он также сообщение inv партнеру о том, что он только что получил транзакцию от
это разрешено, но нет причин для этого
узел, ответственный за транзакцию, будет отправлять сообщения INV
никто ни за что не отвечает
Хирофайр
Эндрю Чоу
inv
должен содержать несколько txids. Однако возможно (и, возможно, вероятно), что к тому времени, когда он отправитinv
, будет только один или два txid для отправки.Питер Уилле
Винсент Алекс
Эндрю Чоу