Wann gibt der Hauptclient sein Wissen über TXs in der INV-Nachricht weiter?

Die invNachricht wird verwendet, um das eigene Wissen über Blöcke und txs an andere Clients im Netzwerk weiterzuleiten. Wenn sich ein neuer Client mit dem Netzwerk verbindet, erhält er invals Antwort auf Nachrichten zunächst Informationen über alle Blöcke in Form einer getblocksNachricht. Da es keine gettxNachricht gibt, gehe ich davon aus, dass die Informationen zu Transaktionen in der letzten invAntwort an weitergeleitet werden getblocks. Funktioniert der Standard-Client tatsächlich so oder leitet er die txNachrichten nur weiter, wenn sie ankommen, und lässt neu verbundene Clients warten, bis sie die Informationen über die txs erhalten?

Antworten (2)

ThreadMessageHandler2() ruft alle 100 Sekunden SendMessages() auf, wodurch invNachrichten an die Peers des Clients gesendet werden.

Ein Peer wird nach dem Zufallsprinzip ausgewählt , um invNachrichten zu erhalten, die sich auf alle ausstehenden Transaktionen beziehen, von denen wir wissen, und dies nicht tut, einschließlich derjenigen, die wir selbst erstellt haben. Der Rest der Peers erhält invNachrichten, die nur auf etwa 25 % der ausstehenden Transaktionen verweisen, von denen wir wissen, und sie nicht, einschließlich der von uns erstellten.

Ein Kommentar im Code erklärt, dass dieses „Tröpfeln“ des Transaktionsinventars dem Schutz der Privatsphäre dient.

Edit: Ich habe gerade diesen Thread entdeckt , der auch den Prozess von Werbetransaktionen beschreibt. Zum Glück stimmt es mit meiner Beschreibung hier überein.

Sleep(100) bedeutet 100 Millisekunden, nicht Sekunden.

Der Prozess des Ankündigens und Sendens von Daten ist für Transaktionen und Blöcke gleich: invgibt den Hash eines Objekts bekannt, getdatawird verwendet, um das Objekt selbst anzufordern, und txoder blockwerden verwendet, um sie zu übermitteln.

getblocksist ein Schritt vor diesem Prozess: Es fordert die Ankündigungen der letzten Blöcke über an inv.