Wie wird der Txpool zwischen Knoten in einem Web3-JSON-RPC-Anbieter synchronisiert?

Nach meinem Verständnis gibt es einen Zustand, der auf einem Knoten gespeichert wird, wenn er über JSON RPC mit ihm interagiert. Einer dieser für den Knoten lokalen Zustände ist der txpool. Der txpool wird mit der web3.eth.getTransaction(txHash)Methode exponiert. Es gibt eine Transaktion zurück, transaction.blockHash == nullwenn sich die Transaktion im txPool befindet, und kehrt zurück, transaction == nullwenn die Transaktion unbekannt ist.

Wenn ein sendTransactionAufruf an einen Knoten erfolgt, gefolgt von einem getTransactionAufruf an einen anderen Knoten, mit dem von zurückgegebenen Transaktions-Hash sendTransaction, wird eine Null-Transaktion zurückgegeben, da sich die Transaktion nur im txpool des ersten Knotens befindet und der zweite Knoten nichts darüber weiß.

Was tun Dienste wie myetherwallet, um sicherzustellen, dass Sitzungen über Anfragen hinweg aufrechterhalten werden, damit solche Dinge nicht passieren? Gibt es eine Möglichkeit, die Transaktionspools zu synchronisieren?

Antworten (1)

Es ist eine komplexe Frage, ich verwende so weit wie möglich die kürzeste Beschreibung. Zuerst read the facking source code.

Broadcasts-Transaktion . In der Datei handler.go gibt es eine txBroadcastLoopMethode, deren Funktion darin besteht, eine lokale Transaktion an verbundene Peers zu senden. Wenn eine Transaktion festgeschrieben wird, wird diese Methode durch ein Ereignis aufgerufen. Durch die BroadcastTx -Methode wird dieser TX über das P2P-Netzwerk an Peers gesendet. Wenn Sie daran interessiert sind, ihn zu analysieren, lesen Sie bitte die Quelldatei, um zu erfahren, wie das P2P-Netzwerk eine Nachricht erstellt, verbunden, empfangen oder gesendet hat.

Transaktion erhalten . In der gleichen Quelldatei handler.go finden Sie eine handleMsg -Methode, deren Aufgabe es ist, Nachrichten von verbundenen Peers zu empfangen. In Zeile 650 gibt es die Logik, die sich mit entfernten Transaktionen befasst. Zuerst werden diese txs als Remote-Transaktion gekennzeichnet, da es ein besonderes Urteil gibt, z. B. Remote-Transaktionen unter unseren eigenen minimal akzeptierten Gaspreis fallen zu lassen usw. Und dann werden diese Remote-Txs zu hinzugefügt tx_pool, bevor sie hinzugefügt tx_poolwerden So viele Validierungen, dass Sie in der Quelldatei tx_pool.go ein Detail finden können, das Logik zum Transaktionspool hinzufügt .

Hoffe es hilft~