Wann werden „ausstehende“ Transaktionen aus der Blockchain gelöscht?

Wann werden Transaktionen aus der Blockchain gelöscht?

Angenommen, ich sende eine Transaktion an die Blockchain, dann ist es eine ausstehende Transaktion, die darauf wartet, abgebaut zu werden.

Aber wann werden ausstehende Transaktionen aus der Blockchain gelöscht, zB wenn der Gaspreis zu niedrig ist? Kann sich jemand andere Gründe vorstellen, warum Miner nicht bereit sind, die Transaktion einzubeziehen?

Wenn Transaktionen nicht irgendwann verworfen werden, kann dies zu einer enormen Menge an ausstehenden Transaktionen führen.

Antworten (2)

Es ist wichtig zu beachten, dass Transaktionen im Zusammenhang mit dieser Frage niemals aus der Blockchain gelöscht werden. Die Blockchain stellt Transaktionen dar, die von Nodes (lokal) validiert und als Blöcke in der Blockchain (remote) registriert wurden. Jeder vollständige Knoten im Ethereum-Netzwerk besitzt seine eigene Kopie der Blockchain im lokalen Speicher, was bedeutet, dass, wenn eine Transaktion zur Validierung zu einem dieser Knoten gelangt, dieser Prozess offline durchgeführt wird. Eine Transaktion kann aus einer Reihe von Gründen, die in vier Kategorien eingeteilt werden können, in einem Node ausstehend bleiben oder es nie in die Blockchain schaffen.

Der erste, vielleicht am offensichtlichsten, ist ein Maschinenausfall; der Knoten könnte einfach in irgendeiner Form beschädigt sein. Es gibt jedoch genügend Knoten, die Transaktionen validieren, sodass der Ausfall einiger weniger nicht ausreicht, um die Kette zu stoppen, aber ein weit verbreiteter Maschinenausfall könnte die Registrierung ausstehender Transaktionen verhindern.

Der zweite Grund ist, dass die Transaktion selbst ungültig ist und nicht oder noch nicht validiert werden kann. Wenn eine Transaktion ungültig ist, weil sie von Natur aus ungültig ist, wird sie es niemals in die Kette schaffen. Aber eine Transaktion, die gültig sein "sollte", kann sich beispielsweise aufgrund einer Nonce-Lücke im Mempool eines Full Nodes wiederfinden. Vielleicht wurden mehrere Transaktionen schnell hintereinander durchgeführt und das Netzwerk hat sie nicht sauber serialisiert oder der Client, der die Transaktion generiert, ist schlecht codiert und hat eine ungültige Nonce zugewiesen, was zu einer Transaktion führte, die es zu einem Knoten mit einer höheren Nonce geschafft hat (oder noch niedriger) als der Knoten erwartet hatte. In diesem Fall bleibt diese Transaktion im Mempool, bis eine andere Transaktion von derselben Adresse mit der fehlenden Nonce in die Kette gelangt, und dann wird der Knoten versuchen, diese "Außer-der-Reihe"-Transaktion zu validieren. Wenn es die Transaktion mit der fehlenden Nonce jedoch nie in die Kette schafft, bleibt diese "Out-of-Order" -Transaktion auf unbestimmte Zeit im Mempool, bis sie vom Knoten aus keinem anderen Grund als dem Mangel an lokalem Speicher (Festplattenspeicher) gelöscht wird. . Wenn der Knoten unendlich viel Speicher hätte, würde er wahrscheinlich für immer an dieser Transaktion festhalten, aber das ist sicherlich nicht der Fall.

Der dritte Grund ist der Wettbewerb. Wenn das Netzwerk heiß genug ist, wo es mehr Transaktionen gibt, die bereit sind, mehr Gas zu zahlen als Sie, genug, um Ihre Transaktion lange genug in einem Mempool zu halten, um sie zu löschen (wiederum aus keinem anderen Grund als dem Mangel an Speicherplatz auf dem Knoten selbst). ), dann wird Ihre Transaktion möglicherweise niemals zu einem Block in der Kette.

Und der vierte Grund ist die Ausnahme von der Regel. Ein Kerngedanke von Ethereum ist es, „Zeug zu brechen“, und es ist sicherlich möglich, dass zukünftige Änderungen des Protokolls ausstehende Transaktionen gefährden könnten. Ethereum-Entwickler werden an der Tür gewarnt, auf alles vorbereitet zu sein, und Ereignisse in der Vergangenheit, nämlich der berüchtigte Hard Fork, verstärken die Weisheit dieses Ratschlags.

Die praktische Antwort auf die Frage lautet jedoch immer dann, wenn dem Knoten der zugewiesene Speicherplatz seines Mempools ausgeht. Die operative Frage lautet dann: Warum ruht die Transaktion in einem Mempool?

Alle Transaktionen werden im Mempool gehalten, ein von Bitcoin entlehnter Begriff. Alle aktuell ausstehenden Transaktionen können Sie hier einsehen: Ausstehende Transaktionen

Die Größe des Mempools ist begrenzt, und sobald er seine Grenze erreicht hat, werden Transaktionen entfernt. Dieser Artikel Wenn es zu viele ausstehende Transaktionen gibt, erklärt es ziemlich gut.

In Geth 1.6.5 befindet sich die grundlegende Konfiguration für den Mempool in einer Go-Struktur namens TxPoolConfig. Eines der interessanten Felder in dieser Struktur ist GlobalSlots ("Maximale Anzahl ausführbarer Transaktionsslots für alle Konten"). In der Standardkonfiguration (DefaultTxPoolConfig) ist GlobalSlots auf 4.096 eingestellt. Sobald dieses Limit erreicht ist, beginnt Geth, Speicherplatz freizugeben, indem es einige der Transaktionen in seinem Mempool gemäß einem ziemlich komplexen Regelwerk löscht.

Wenn eine Transaktion in einem Knoten aus dem Mempool entfernt wird, bedeutet dies nicht, dass sie aus dem Netzwerk verschwindet. Ein anderer Knoten kann es behalten und erneut senden, wenn es sich wieder verbindet.
Werden ausstehende Transaktionen nach dem FIFO-Prinzip (first-in-first-out), dh in einer Warteschlange, aus dem Mempool entfernt? +1 für deine Antwort.
@Shuzheng Nun, Transaktionen, die zuerst im Mempool ankommen, haben eine höhere Chance, abgebaut und zu einem Block hinzugefügt zu werden, aber es gibt viele Faktoren, die zu berücksichtigen sind. Der offensichtlichste ist der Gaspreis, den Sie zu zahlen bereit sind. Auf die gleiche Weise werden die Transaktionen, die sich am Ende des Mempools befinden, mit größerer Wahrscheinlichkeit entfernt, aber wie Ismael sagte, kann die entfernte Transaktion erneut übermittelt werden. Dies sind die Regeln des Bitcoin-Mempools, die ziemlich ähnlich sein sollten, wie Transaktionen den Mempool verlassen
Soweit ich das beurteilen kann, bedeutet dies, dass es keinen wirklich garantierten Weg gibt, um festzustellen, ob eine Transaktion aus dem Mempool gelöscht wird oder wie hoch die Wahrscheinlichkeit ist, dass eine Transaktion aus dem Mempool gelöscht wird, da sich Knoten technisch so verhalten können, wie sie es wünschen. Es ist also unklug, sich auf die Annahme zu verlassen, dass bestimmte Kriterien erfüllt werden können, um sicherzustellen, dass Sie im Mempool bleiben?