Wie überprüfe ich, ob sich eine Transaktion noch in der Blockchain befindet?

Angenommen, wir möchten bestätigen, dass eine Werttransaktion txeine bestimmte Endgültigkeit erreicht hat, die wir als Warten auf 12 Blockbestätigungen definieren. Wir tun dies, um die Wahrscheinlichkeit zu txverringern, dass Sie aufgrund eines Forks verloren gehen oder in einen Onkelblock aufgenommen werden.

Die Beispiele, die ich gesehen habe, verwenden getBlockund / oder getTransactionzuerst, um sicherzustellen, dass txin einem Block abgebaut wurde.

Sie warten dann, bis 12 neue Blöcke abgebaut wurden, und scheinen zu verwenden getTransactionReceipt, um zu prüfen, ob sie txnoch in der Blockchain sind.

  • Gibt es in diesem Zusammenhang einen funktionalen Unterschied zwischen der Verwendung von getTransactionund getTransactionReceiptzum Überprüfen, ob txnoch vorhanden ist blockNumber? Die Implementierungen scheinen keine der zusätzlichen zurückgegebenen Daten zu verwenden, getTransactionReceiptwas sie leicht verwirrend macht.

  • Nehmen wir txan, vor 12 Bestätigungen ist ein Fork passiert oder in einen verwaisten Block geraten. Bedeutet dies, dass getTransactionund getTransactionReceiptfür die Transaktion null zurückgegeben wird, oder wie spiegelt sich dies in diesen Aufrufen wider?

Kannst du deine endgültige Lösung posten?

Antworten (1)

Nein, in diesem Fall gibt es keinen Unterschied – sie sind im Wesentlichen gleichwertig. Wenn der tx verwaist ist, sollten sie zurückgeben null, aber Sie sollten trotzdem die Blocknummer überprüfen, da sie möglicherweise später als erwartet zur neuen Kette hinzugefügt wurde, was eine geringere Wahrscheinlichkeit der Endgültigkeit ergibt.

Was ist mit dem txVerirren in einer Gabelung? Werden die Methoden immer noch zurückkehren nulloder die Blocknummer sein null? Ich bin mir nicht sicher, ob txdas Verwaisen das Gabelgehäuse abdeckt.
Könnten Sie bitte auch erläutern, wie die Blocknummer überprüft werden sollte? Bedeutet dies, dass txsich die anfängliche Blocknummer von zwischen dem ersten und letzten Aufruf (nach 12 Blöcken) ändern kann? Bedeutet dies außerdem, dass es empfohlen wird, auf zusätzliche Blöcke zu warten, um die Differenz auszugleichen, um 12 Bestätigungen zu erreichen?
Ein Fork und Verwaisung sind im Wesentlichen dasselbe, obwohl ein Fork im Allgemeinen eine viel größere Reorganisationstiefe impliziert. Solange (tx.blockNumber - eth.blockNumber) > 12, haben Sie 12 Bestätigungen.