Когда основной клиент передает свои знания о TX в сообщении INV?

Это invсообщение используется для передачи информации о блоках и блоках txдругим клиентам в сети. Когда новый Клиент подключается к Сети, он сначала получает информацию обо всех блоках в виде invсообщения, как ответ на getblocksсообщения. Поскольку сообщения нет gettx, я предполагаю, что информация о транзакциях передается в последнем invответе на getblocks. Действительно ли так работает стандартный клиент, или он просто ретранслирует txсообщения только тогда, когда они приходят, заставляя вновь подключенных клиентов ждать, чтобы получить информацию о txs?

Ответы (2)

ThreadMessageHandler2() вызывает SendMessages() каждые 100 секунд, что приводит invк отправке сообщений одноранговым узлам клиента.

Один пир выбирается случайным образом для получения invсообщений, которые ссылаются на все ожидающие транзакции, о которых мы знаем и о которых нет, включая те, которые мы создали сами. Остальные одноранговые узлы получают invсообщения, которые ссылаются только на около 25% ожидающих транзакций, о которых мы знаем, а они — нет, не считая созданных нами.

Комментарий в коде объясняет, что это «просачивание» инвентаризации транзакций предназначено для защиты конфиденциальности.

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

Sleep(100) означает 100 миллисекунд, а не секунд.

Процесс анонсирования и отправки данных одинаков как для транзакций, так и для блоков: invобъявляется хэш объекта, getdataиспользуется для запроса самого объекта txили blockиспользуются для их отправки.

getblocks— это шаг перед этим процессом: он запрашивает объявления о последних блоках через файлы inv.