Wie bestimmen Block-Explorer die Ausbreitung über Knoten/das P2P-Protokoll?

Bei mehreren Bitcoin-Blockchain-Explorern habe ich unbestätigte Transaktionen mit einem dedizierten „Propagation“-Wert gesehen, der einem Benutzer mitteilt, wie viel vom Bitcoin-Netzwerk auf diese Transaktion aufmerksam geworden ist.

Beispielsweise stellt BlockCypher einen „Vertrauenswert“ für unbestätigte Transaktionen bereit:

Geben Sie hier die Bildbeschreibung ein

Das hat mich immer dazu gebracht, mich zu fragen, wie genau sie das berechnen können? Haben sie persönlich ein großes verteiltes Netzwerk von Knoten, die ständig im Auge behalten werden? Dies wäre sicherlich kostenineffizient und weniger dezentralisiert.

Ihre Dokumentation besagt:

Indem wir die Transaktionsausbreitung, die Anzahl der Knoten, die sie erhalten haben, und wie schnell sie sie erhalten haben, überwachen, können wir die Wahrscheinlichkeit berechnen, dass sie zu einem bestimmten Zeitpunkt die „gewinnende“ Transaktion ist, wenn eine doppelte Ausgabe versucht wurde.

Ich hatte ziemliche Schwierigkeiten, Dokumentation darüber zu finden, was genau Knoten direkt voneinander anfordern können. Kann ein Knoten einfach seine Peers mit einer getData -Anfrage fragen, ob die Transaktion in ihrem Mempool existiert ?

Antworten (2)

Blockchain-Explorer führen Knoten aus, die Verbindungen zu anderen Knoten haben. Sie können Hunderte von Verbindungen haben. Sie betreiben wahrscheinlich auch mehrere Knoten für Redundanz (falls ein Knoten ausfällt, sind sie immer noch online) und um sicherzustellen, dass sie Transaktionen von so vielen Quellen wie möglich erhalten. Sie werden also mit Hunderten, vielleicht Tausenden von Knoten verbunden sein.

Mit diesen Verbindungen können sie hören, was all diese Knoten senden. Im aktuellen P2P-Relay-Protokoll kündigt ein Knoten seinen Peers an, dass er eine Transaktion (die invNachricht) hat. Es wartet dann auf eine Anfrage ( getdata), bevor es die Transaktion sendet ( tx). Jemand, der viele Knoten abhört, könnte also wissen, welche Knoten eine Transaktion haben, basierend darauf, ob sie die Transaktion angekündigt haben. Auf diese Weise berechnet Blockcypher wahrscheinlich die "Anzahl der Speicherpools mit tx".

Allerdings sollte man bei solchen Messungen vorsichtig sein. Sie sind nicht sehr genau, da sie nicht mit allen Knoten im Netzwerk verbunden sind. Zudem ist das damit verbundene Vertrauen weitgehend bedeutungslos. Die Wahrscheinlichkeit, dass eine Transaktion in einen Block eintritt, hängt von vielen anderen Dingen ab, und die Anzahl der Knoten, die sie gesehen haben, wirkt sich nicht sehr auf diese Zahl aus.

Das tun sie im Wesentlichen nicht, die für diese Art von Dingen angegebenen Zahlen sind im Allgemeinen bedeutungslos.

Viele dieser Dienste versuchen, sich mit einem großen Teil des lauschenden Netzwerks zu verbinden und Einblick in die Wahrscheinlichkeit einer Transaktionsbestätigung zu erhalten, dies ist jedoch kein Sicherheitsmaß für Transaktionen. Eine Transaktion, die von vielen Nodes angekündigt wurde, bedeutet nicht, dass sie nicht von einem Miner doppelt ausgegeben wird, wie es in der Vergangenheit viele Male passiert ist . Insbesondere für BlockCypher verwendet die Konfidenzzahl keinen Bitcoin Core-Knoten zur Validierung und zeigt daher ein sehr hohes Vertrauen für Transaktionen, die ungültig sind, aber eine scheinbar hohe Gebühr haben.

In dem Fall, der mit betcoin dice und ghash.io verbunden ist, hätten sie absolutes Vertrauen in die Bestätigung gezeigt, aber der Mining-Pool enthielt einfach alternative Transaktionen, die nicht jedes Mal, wenn ihre Wette negativ war, an den Dienst ausgegeben wurden. Für eine Wettseite mit einem Hausvorteil von 1 % müssen sie dies nur mehr als 1 % der Zeit tun können, damit der Angriff für sie finanziell rentabel ist. Dies geschah über einen Zeitraum von Monaten, ohne dass es jemand bemerkte, keine Benutzer die Nutzung des Pools einstellten oder andere Strafmaßnahmen ergriffen wurden. „Transaktionsvertrauen“ oder andere Tools funktionieren nur in einer nicht-kontradiktorischen Umgebung, was Bitcoin nicht ist.

Kann ein Knoten einfach seine Peers mit einer getData-Anfrage fragen, ob die Transaktion in ihrem Mempool existiert?

Sie können bis zu einem gewissen Grad einen Knoten, mit dem Sie verbunden sind, fragen, ob er eine Transaktion in seinem Mempool hat. Nodes implementieren eine Logik namens Transaktionstrickling, die absichtlich die Weiterleitung von Transaktionen stapelt und verzögert, um ein solches nachteiliges Verhalten der Privatsphäre zu verhindern. Beachten Sie, dass die meisten Knoten im Netzwerk keine Listening-Sockets geöffnet haben, sodass Sie keine ausgehenden Verbindungen zu ihnen herstellen können. Insbesondere Händler und Miner haben keine eingehenden Verbindungen, um triviale Denial-of-Service-Angriffe gegen sie zu verhindern.