Legen wir alle Transaktionen in den Speicherpool?

Ich frage mich, ob verwaiste Transaktionen auch im Speicherpool gespeichert werden? Wenn ja, wie unterscheidet der Bitcoin-Client zwischen verwaisten und nicht verwaisten Transaktionen?

Antworten (2)

Bitcoin Core unterhält einen separaten Waisenpool mit Transaktionen, deren Eltern fehlen. Sein Hauptzweck ist der Umgang mit Peers, die uns Gruppen unabhängiger Transaktionen in der falschen Reihenfolge senden, sodass dieser Pool nicht groß sein muss.

Seit Bitcoin Core v0.13.0 werden alle an Peers gesendeten Transaktionen in Stapeln und innerhalb dieser Stapel in Abhängigkeitsreihenfolge gesendet. Dadurch wurde die durchschnittliche Größe der verwaisten Pools im Netzwerk massiv reduziert (von Hunderten auf normalerweise nur wenige).

Danke, ich habe das in meinem Beitrag aufgewendete Halbwissen korrigiert.

Verwaiste Transaktion

„Verwaiste Transaktionen“ sind Transaktionen, bei denen ein Elternteil fehlt und daher mindestens ein Eingang dem Knoten unbekannt ist. Dies kann passieren, wenn ein Knoten Transaktionen in der falschen Reihenfolge empfängt oder wenn der übergeordnete Knoten doppelt ausgegeben wurde und sich daher eine der Eingaben dieser neuen Transaktion nie manifestiert. Bis die Voraussetzungen für die Transaktion erfüllt sind, würde eine solche Transaktion im Wesentlichen ungültig erscheinen, da der Knoten erkennen wird, dass die Transaktion Geld ausgibt, von dem der Knoten nichts weiß. Der Mempool speichert keine verwaisten Transaktionen, sammelt sie jedoch in einem separaten verwaisten Pool, falls das übergeordnete Element weiterhin weitergeleitet wird.

Verwaister Block

Ein verwaister Block ist einer, dessen Eltern dem Knoten unbekannt sind. Dies konnte in früheren Versionen von Bitcoin passieren, wenn ein späterer Block an Ihren Knoten weitergeleitet wurde, bevor Sie den Elternteil erhalten haben, z. B. während der Synchronisierung. Ich glaube, dass Knoten verwaiste Blöcke zumindest so lange behalten würden, bis sie sicher sagen könnten, dass sie nicht Teil der längsten Kette sind (dh sie haben bis zur Höhe des verwaisten Blocks synchronisiert).

Veralteter Block

Hin und wieder gibt es eine Chainfork, wenn zwei Miner Blöcke auf gleicher Höhe entdecken. Sobald einer der beiden konkurrierenden Blöcke einen Nachfolger bekommt, wird der andere Block Teil einer „stale chaintip“. Im Allgemeinen betrachten Knoten nur einen Block auf derselben Höhe als gültig und ignorieren daher Bestätigungen in parallelen Blöcken auf derselben Höhe. Transaktionen, die nur in einem der beiden Blöcke auf gleicher Höhe bestätigt wurden, gelten im anderen Block als unbestätigt. Die Knoten betrachten den zweiten Block, den sie auf derselben Höhe erhalten, nicht als Teil der längsten Kette und behalten ihn einfach, um einer möglichen Reorganisation folgen zu können.

Ich fürchte also, ich habe keine Ahnung, welches Problem Ihrer Meinung nach bei der Unterscheidung zwischen verwaisten und nicht verwaisten Blöcken bestehen könnte. ;) Und zum größten Teil, was Sie wahrscheinlich als "verwaiste Transaktionen" betrachten, sind entweder ungültige Transaktionen oder unbestätigte Transaktionen.

Falls ich den Punkt Ihrer Frage verfehle, aktualisieren Sie bitte Ihren Beitrag und teilen Sie es mir in einem Kommentar mit.

Mit verwaister Transaktion meinte ich die Transaktionen, deren Eltern fehlen oder noch nicht eingetroffen sind. In einem solchen Fall muss der Knoten warten, bis der Elternknoten in der Lage ist, die vorliegende Transaktion zu validieren. Das habe ich verstanden.